<jupyter_start><jupyter_text>Classifying flowers! This notebook classifies flowers from the Iris dataset to go to the Maldives! We base our work in the excellent example https://scikit-learn.org/stable/auto_examples/linear_model/plot_iris_logistic.htmlsphx-glr-auto-examples-linear-model-plot-iris-logistic-py<jupyter_code>import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn import datasets
# import some data to play with
iris = datasets.load_iris()
X = iris.data[:, :2]  # we only take the first two features.
Y = iris.target<jupyter_output><empty_output><jupyter_text>Although in theory it sounds really complex, in reality it is super simple to have a multinomial logistic regression! Multinomial LR is just another revump of Logistic Regression for multiple features as multiple linear regression to linear regression.<jupyter_code>logreg = LogisticRegression(C=1e5, solver='lbfgs', multi_class='multinomial')

# Create an instance of Logistic Regression Classifier and fit the data.
logreg.fit(X, Y)
# Plot the decision boundary. For that, we will assign a color to each
# point in the mesh [x_min, x_max]x[y_min, y_max].
x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
h = .02  # step size in the mesh
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = logreg.predict(np.c_[xx.ravel(), yy.ravel()])

# Put the result into a color plot
Z = Z.reshape(xx.shape)
plt.figure(1, figsize=(4, 3))
plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired)

# Plot also the training points
plt.scatter(X[:, 0], X[:, 1], c=Y, edgecolors='k', cmap=plt.cm.Paired)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')

plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.xticks(())
plt.yticks(())

plt.show()<jupyter_output><empty_output><jupyter_text>Plotting the decision boundary we can check that is linear as we could have foretold. Also this algorithms finds it difficult to classify Iris-Versicolour and Iris-Virginica. This is normal since we can check int he scatter plot that both are quite meshed. Lets see if One vs All compares!<jupyter_code>logreg = LogisticRegression(C=1e5, solver='lbfgs', multi_class='ovr')

# Create an instance of Logistic Regression Classifier and fit the data.
logreg.fit(X, Y)
# Plot the decision boundary. For that, we will assign a color to each
# point in the mesh [x_min, x_max]x[y_min, y_max].
x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
h = .02  # step size in the mesh
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = logreg.predict(np.c_[xx.ravel(), yy.ravel()])

# Put the result into a color plot
Z = Z.reshape(xx.shape)
plt.figure(1, figsize=(4, 3))
plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired)

# Plot also the training points
plt.scatter(X[:, 0], X[:, 1], c=Y, edgecolors='k', cmap=plt.cm.Paired)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')

plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.xticks(())
plt.yticks(())

plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.14492753623188406, 'fraction_numerical': 0.011027095148078135, 'mean_word_length': 5.013257575757576, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 13, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '394885', 'license': 'MIT', 'n_tokens_mistral': 1224, 'n_tokens_neox': 1179, 'n_words': 362, 'path': 'Module 6/multiclass_logistic.ipynb', 'repo_name': 'axel-sirota/interpreting-data-with-advanced-models', 'size': '3174'}