```python from sklearn import datasets iris = datasets.load_iris() list(iris.keys()) ``` ['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'] ```python iris ``` {'data': array([[5.1, 3.5, 1.4, 0.2], [4.9, 3. , 1.4, 0.2], [4.7, 3.2, 1.3, 0.2], [4.6, 3.1, 1.5, 0.2], [5. , 3.6, 1.4, 0.2], [5.4, 3.9, 1.7, 0.4], [4.6, 3.4, 1.4, 0.3], [5. , 3.4, 1.5, 0.2], [4.4, 2.9, 1.4, 0.2], [4.9, 3.1, 1.5, 0.1], [5.4, 3.7, 1.5, 0.2], [4.8, 3.4, 1.6, 0.2], [4.8, 3. , 1.4, 0.1], [4.3, 3. , 1.1, 0.1], [5.8, 4. , 1.2, 0.2], [5.7, 4.4, 1.5, 0.4], [5.4, 3.9, 1.3, 0.4], [5.1, 3.5, 1.4, 0.3], [5.7, 3.8, 1.7, 0.3], [5.1, 3.8, 1.5, 0.3], [5.4, 3.4, 1.7, 0.2], [5.1, 3.7, 1.5, 0.4], [4.6, 3.6, 1. , 0.2], [5.1, 3.3, 1.7, 0.5], [4.8, 3.4, 1.9, 0.2], [5. , 3. , 1.6, 0.2], [5. , 3.4, 1.6, 0.4], [5.2, 3.5, 1.5, 0.2], [5.2, 3.4, 1.4, 0.2], [4.7, 3.2, 1.6, 0.2], [4.8, 3.1, 1.6, 0.2], [5.4, 3.4, 1.5, 0.4], [5.2, 4.1, 1.5, 0.1], [5.5, 4.2, 1.4, 0.2], [4.9, 3.1, 1.5, 0.2], [5. , 3.2, 1.2, 0.2], [5.5, 3.5, 1.3, 0.2], [4.9, 3.6, 1.4, 0.1], [4.4, 3. , 1.3, 0.2], [5.1, 3.4, 1.5, 0.2], [5. , 3.5, 1.3, 0.3], [4.5, 2.3, 1.3, 0.3], [4.4, 3.2, 1.3, 0.2], [5. , 3.5, 1.6, 0.6], [5.1, 3.8, 1.9, 0.4], [4.8, 3. , 1.4, 0.3], [5.1, 3.8, 1.6, 0.2], [4.6, 3.2, 1.4, 0.2], [5.3, 3.7, 1.5, 0.2], [5. , 3.3, 1.4, 0.2], [7. , 3.2, 4.7, 1.4], [6.4, 3.2, 4.5, 1.5], [6.9, 3.1, 4.9, 1.5], [5.5, 2.3, 4. , 1.3], [6.5, 2.8, 4.6, 1.5], [5.7, 2.8, 4.5, 1.3], [6.3, 3.3, 4.7, 1.6], [4.9, 2.4, 3.3, 1. ], [6.6, 2.9, 4.6, 1.3], [5.2, 2.7, 3.9, 1.4], [5. , 2. , 3.5, 1. ], [5.9, 3. , 4.2, 1.5], [6. , 2.2, 4. , 1. ], [6.1, 2.9, 4.7, 1.4], [5.6, 2.9, 3.6, 1.3], [6.7, 3.1, 4.4, 1.4], [5.6, 3. , 4.5, 1.5], [5.8, 2.7, 4.1, 1. ], [6.2, 2.2, 4.5, 1.5], [5.6, 2.5, 3.9, 1.1], [5.9, 3.2, 4.8, 1.8], [6.1, 2.8, 4. , 1.3], [6.3, 2.5, 4.9, 1.5], [6.1, 2.8, 4.7, 1.2], [6.4, 2.9, 4.3, 1.3], [6.6, 3. , 4.4, 1.4], [6.8, 2.8, 4.8, 1.4], [6.7, 3. , 5. , 1.7], [6. , 2.9, 4.5, 1.5], [5.7, 2.6, 3.5, 1. ], [5.5, 2.4, 3.8, 1.1], [5.5, 2.4, 3.7, 1. ], [5.8, 2.7, 3.9, 1.2], [6. , 2.7, 5.1, 1.6], [5.4, 3. , 4.5, 1.5], [6. , 3.4, 4.5, 1.6], [6.7, 3.1, 4.7, 1.5], [6.3, 2.3, 4.4, 1.3], [5.6, 3. , 4.1, 1.3], [5.5, 2.5, 4. , 1.3], [5.5, 2.6, 4.4, 1.2], [6.1, 3. , 4.6, 1.4], [5.8, 2.6, 4. , 1.2], [5. , 2.3, 3.3, 1. ], [5.6, 2.7, 4.2, 1.3], [5.7, 3. , 4.2, 1.2], [5.7, 2.9, 4.2, 1.3], [6.2, 2.9, 4.3, 1.3], [5.1, 2.5, 3. , 1.1], [5.7, 2.8, 4.1, 1.3], [6.3, 3.3, 6. , 2.5], [5.8, 2.7, 5.1, 1.9], [7.1, 3. , 5.9, 2.1], [6.3, 2.9, 5.6, 1.8], [6.5, 3. , 5.8, 2.2], [7.6, 3. , 6.6, 2.1], [4.9, 2.5, 4.5, 1.7], [7.3, 2.9, 6.3, 1.8], [6.7, 2.5, 5.8, 1.8], [7.2, 3.6, 6.1, 2.5], [6.5, 3.2, 5.1, 2. ], [6.4, 2.7, 5.3, 1.9], [6.8, 3. , 5.5, 2.1], [5.7, 2.5, 5. , 2. ], [5.8, 2.8, 5.1, 2.4], [6.4, 3.2, 5.3, 2.3], [6.5, 3. , 5.5, 1.8], [7.7, 3.8, 6.7, 2.2], [7.7, 2.6, 6.9, 2.3], [6. , 2.2, 5. , 1.5], [6.9, 3.2, 5.7, 2.3], [5.6, 2.8, 4.9, 2. ], [7.7, 2.8, 6.7, 2. ], [6.3, 2.7, 4.9, 1.8], [6.7, 3.3, 5.7, 2.1], [7.2, 3.2, 6. , 1.8], [6.2, 2.8, 4.8, 1.8], [6.1, 3. , 4.9, 1.8], [6.4, 2.8, 5.6, 2.1], [7.2, 3. , 5.8, 1.6], [7.4, 2.8, 6.1, 1.9], [7.9, 3.8, 6.4, 2. ], [6.4, 2.8, 5.6, 2.2], [6.3, 2.8, 5.1, 1.5], [6.1, 2.6, 5.6, 1.4], [7.7, 3. , 6.1, 2.3], [6.3, 3.4, 5.6, 2.4], [6.4, 3.1, 5.5, 1.8], [6. , 3. , 4.8, 1.8], [6.9, 3.1, 5.4, 2.1], [6.7, 3.1, 5.6, 2.4], [6.9, 3.1, 5.1, 2.3], [5.8, 2.7, 5.1, 1.9], [6.8, 3.2, 5.9, 2.3], [6.7, 3.3, 5.7, 2.5], [6.7, 3. , 5.2, 2.3], [6.3, 2.5, 5. , 1.9], [6.5, 3. , 5.2, 2. ], [6.2, 3.4, 5.4, 2.3], [5.9, 3. , 5.1, 1.8]]), 'target': array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]), 'frame': None, 'target_names': array(['setosa', 'versicolor', 'virginica'], dtype='] ![png](output_4_1.png) ```python plt.plot(lp,'.k') ``` [] ![png](output_5_1.png) ```python iris.target ``` array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]) # Logistic regressor ## Decision boudaries ```python import numpy as np import matplotlib.pyplot as plt t=np.linspace(-100, 100, 1000) sig=1/(1+np.exp(-t+3)) plt.plot(t,sig, '.b', label=r"$\sigma=\frac{1}{1+e^{-t}}$") plt.legend(loc='upper left', fontsize=20) plt.axis([-5, 5, -0.1, 1]) plt.plot([0,0], [0,1], 'r--') ``` [] ![png](output_8_1.png) # Iris-Setosa Classifier based on petal width ```python X=iris.data[:,1:2] y=(iris.target==0).astype(int) ``` ```python from sklearn.linear_model import LogisticRegression mylr=LogisticRegression(solver='lbfgs', random_state=42) mylr.fit(X,y) ```
LogisticRegression(random_state=42)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
```python Xnew=np.linspace(2,5,70).reshape(-1,1) yPred=mylr.predict_proba(Xnew) plt.plot(Xnew,yPred[:,0],'.r', label='No Iris-Set') plt.plot(Xnew,yPred[:,1],'.b', label='Iris-Set') plt.legend() plt.plot(X,y,'*g') ``` [] ![png](output_12_1.png) ```python ``` ```python # Iris-Setosa Classifier based on petal width X=iris.data[:,0:1] y=(iris.target==0).astype(int) from sklearn.linear_model import LogisticRegression mylr=LogisticRegression(solver='lbfgs', random_state=42) mylr.fit(X,y) Xnew=np.linspace(2,8,70).reshape(-1,1) yPred=mylr.predict_proba(Xnew) #plt.plot(Xnew,yPred[:,0],'.r', label='No Iris-Set') plt.plot(Xnew,yPred[:,1],'.b', label='Iris-Set') plt.legend() plt.plot(X,y,'*g') ``` [] ![png](output_14_1.png) # Session 2: Softmax regression ## Multiple features binary classifier (Virginica) ```python import matplotlib.pyplot as plt pl=iris.data[:,2:3] pw=iris.data[:,3:] tg = iris.target plt.plot(pl[tg==0,0],pw[tg==0,0],'.r',label='Set') plt.plot(pl[tg==1,0],pw[tg==1,0],'.b',label='Ver') plt.plot(pl[tg==2,0],pw[tg==2,0],'.g',label='Vir') plt.legend() plt.show() ``` ![png](output_16_0.png) ```python from sklearn.linear_model import LogisticRegression X=iris.data[:,2:] y=(iris.target==2).astype(int) lrvir=LogisticRegression(random_state=42, tol=1e-5, C=10, max_iter=100, solver='newton-cg') lrvir.fit(X,y) ```
LogisticRegression(C=10, random_state=42, solver='newton-cg', tol=1e-05)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
```python import numpy as np x0, x1=np.meshgrid( np.linspace(1,6.9,500).reshape(-1,1), np.linspace(0.1,2.5,200).reshape(-1,1)) Xnew=np.c_[x0.ravel(), x1.ravel()] yProb=lrvir.predict_proba(Xnew) ``` ```python plt.figure(figsize=(10,4)) plt.plot(X[y==0,0], X[y==0,1],'bs',label='No Virg') plt.plot(X[y==1,0], X[y==1,1],'g^',label='Virginica') zz=yProb[:,1].reshape(x0.shape) contour=plt.contour(x0,x1,zz) plt.clabel(contour, inline=1,fontsize=15) plt.xlabel("Petal Length") plt.ylabel("Petal Width") plt.legend() plt.show() ``` ![png](output_19_0.png) ```python fig, ax =plt.subplots(subplot_kw={"projection": "3d"}) surf = ax.plot_surface(x0,x1,zz) ``` ![png](output_20_0.png) ## Multiple features and multiclass classifier (Virginica) ```python X=iris.data[:,2:] y=iris.target ``` ```python lrmfmc=LogisticRegression(multi_class='multinomial', solver='lbfgs', C=100, random_state=42) lrmfmc.fit(X,y) x0,x1=np.meshgrid( np.linspace(0,8,500).reshape(-1,1), np.linspace(0,3.5,200).reshape(-1,1)) Xnew=np.c_[x0.ravel(), x1.ravel()] yProba=lrmfmc.predict_proba(Xnew) #yPred=lrmfmc.predict(Xnew) from matplotlib.colors import ListedColormap #customc=ListedColormap(['#fafab0', '#9898ff', '#a0faa0']) zz=yProba[:,1].reshape(x0.shape) #zz=yPred.reshape(x0.shape) plt.figure(figsize=(10,4)) plt.plot(X[y==2,0], X[y==2,1],'g^',label='Virg') plt.plot(X[y==1,0], X[y==1,1],'bs',label='Versic') plt.plot(X[y==0,0], X[y==0,1],'yo',label='Setos') contour=plt.contour(x0,x1,zz,cmap=plt.cm.brg) plt.clabel(contour,inline=1,fontsize=12) #plt.contourf(x0,x1,zz,cmap=customc) ``` ![png](output_23_1.png) ```python yPred=lrmfmc.predict(Xnew) zPred=yPred.reshape(x0.shape) plt.contourf(x0,x1,zPred,alpha=0.4) plt.plot(X[y==2,0], X[y==2,1],'g^',label='Virg') plt.plot(X[y==1,0], X[y==1,1],'bs',label='Versic') plt.plot(X[y==0,0], X[y==0,1],'yo',label='Setos') plt.show() ``` ![png](output_24_0.png) ```python fig, ax =plt.subplots(subplot_kw={"projection": "3d"}) surf = ax.plot_surface(x0,x1,zz,cmap='jet') ``` ![png](output_25_0.png) ## Homework: Sepal multi-features and multi-class ```python X=iris.data[:,0:2] y=iris.target mlr3=LogisticRegression( multi_class='multinomial', solver='lbfgs', C=10, random_state=42) mlr3.fit(X,y) ```
LogisticRegression(C=10, multi_class='multinomial', random_state=42)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
```python import numpy as np x0,x1=np.meshgrid( np.linspace(0,7,500).reshape(-1,1), np.linspace(0,3,200).reshape(-1,1)) ``` ```python Xnew=np.c_[x0.ravel(), x1.ravel()] yPred=mlr3.predict_proba(Xnew) yProba=mlr3.predict(Xnew) zz=yProba.reshape(x0.shape) zz1=yPred[:,1].reshape(x0.shape) ``` ```python from matplotlib.colors import ListedColormap plt.plot(X[y==2,0], X[y==2,1],'y*', label='Virg') plt.plot(X[y==1,0], X[y==1,1],'g^', label='Vers') plt.plot(X[y==0,0], X[y==0,1],'bs', label='Set') contour=plt.contour(x0,x1,zz1, cmap=plt.cm.brg) ccmap=ListedColormap(['#fafab0', '#9898ff', '#a0faa0']) plt.contourf(x0,x1,zz,cmap=ccmap) plt.clabel(contour, inline=1,fontsize=12) plt.xlabel('Sepal Width', fontsize=12) plt.ylabel('Sepal Length', fontsize=12) plt.axis([4,8.5,1,5]) plt.legend() ``` ![png](output_30_1.png) ```python fig, ax =plt.subplots(subplot_kw={"projection": "3d"}) surf = ax.plot_surface(x0,x1,zz1,cmap='jet') ``` ![png](output_31_0.png)