import pandas as pd
from matplotlib import pyplot as plt
from pathlib import Path
import numpy as np
Logistic Regression
Predicted value is categorical
Classification types
- Binary Classification
- Multiclass Classification
Binary Classification
= Path('Data/insurance_data.csv')
path = pd.read_csv(path)
df df.head()
age | bought_insurance | |
---|---|---|
0 | 22 | 0 |
1 | 25 | 0 |
2 | 47 | 1 |
3 | 52 | 0 |
4 | 46 | 1 |
\(\text{sigmoid}(z) = \dfrac{1}{1+e^-z}\) where e = Euler’s number ~ 2.71828
='+',color='red') plt.scatter(df.age,df.bought_insurance,marker
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
= train_test_split(df[['age']],df.bought_insurance,train_size=0.8) X_train, X_test, y_train, y_test
X_test
age | |
---|---|
12 | 27 |
25 | 54 |
7 | 60 |
2 | 47 |
10 | 18 |
9 | 61 |
= LogisticRegression() model
model.fit(X_train, y_train)
LogisticRegression()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.
LogisticRegression()
X_test
age | |
---|---|
12 | 27 |
25 | 54 |
7 | 60 |
2 | 47 |
10 | 18 |
9 | 61 |
= model.predict(X_test)
y_predicted y_predicted
array([0, 1, 1, 1, 0, 1])
= model.predict_proba(X_test) y_probability
model.score(X_test,y_test)
1.0
= np.array(X_test)
array1
# Stack the arrays horizontally
= np.hstack((array1, y_probability[:,1].reshape(-1, 1)))
combined_array
print("Combined Array:")
print(combined_array)
Combined Array:
[[27. 0.18888707]
[54. 0.84143616]
[60. 0.91401439]
[47. 0.70233749]
[18. 0.07590529]
[61. 0.92268871]]
= np.sort(combined_array, 0)
sorted_array 0] sorted_array[:,
array([18., 27., 47., 54., 60., 61.])
='+',color='blue')
plt.scatter(df.age,df.bought_insurance,marker='+',color='red')
plt.scatter(X_test,y_test,marker0],sorted_array[:,1],marker='+',color='green')
plt.plot(sorted_array[:,='*',color='green') plt.scatter(X_test,y_predicted,marker
Multiclass Regression
from sklearn.datasets import load_digits
import matplotlib.pyplot as plt
= load_digits() digits
plt.gray() for i in range(2):
plt.matshow(digits.images[i])
<Figure size 640x480 with 0 Axes>
dir(digits)
['DESCR', 'data', 'feature_names', 'frame', 'images', 'target', 'target_names']
digits.target[:]
array([0, 1, 2, ..., 8, 9, 8])
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
= LogisticRegression() model
= train_test_split(digits.data,digits.target, test_size=0.2) X_train, X_test, y_train, y_test
model.fit(X_train, y_train)
/home/ben/mambaforge/envs/cfast/lib/python3.11/site-packages/sklearn/linear_model/_logistic.py:460: ConvergenceWarning: lbfgs failed to converge (status=1):
STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.
Increase the number of iterations (max_iter) or scale the data as shown in:
https://scikit-learn.org/stable/modules/preprocessing.html
Please also refer to the documentation for alternative solver options:
https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
n_iter_i = _check_optimize_result(
LogisticRegression()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.
LogisticRegression()
model.score(X_test, y_test)
0.9722222222222222
0:5]) model.predict(digits.data[
array([0, 1, 2, 3, 4])
= model.predict(X_test) y_predicted
array([5, 4, 0, 2, 9, 5, 3, 2, 0, 4, 1, 3, 5, 1, 5, 3, 6, 3, 5, 2, 3, 2,
0, 8, 1, 9, 6, 7, 0, 8, 9, 4, 5, 7, 2, 4, 4, 4, 8, 3, 7, 8, 3, 6,
4, 9, 2, 4, 6, 3, 5, 1, 6, 0, 7, 9, 4, 8, 8, 3, 8, 9, 5, 6, 4, 9,
8, 5, 2, 0, 7, 7, 6, 2, 5, 8, 9, 5, 7, 5, 5, 4, 4, 8, 9, 8, 9, 2,
1, 0, 7, 4, 8, 6, 3, 3, 3, 8, 1, 1, 5, 6, 7, 6, 1, 7, 2, 8, 1, 5,
3, 4, 4, 9, 5, 0, 7, 0, 6, 3, 2, 2, 4, 3, 4, 8, 6, 0, 8, 0, 3, 1,
4, 9, 0, 3, 2, 9, 9, 6, 7, 8, 4, 6, 8, 6, 9, 0, 4, 9, 7, 6, 8, 3,
9, 6, 0, 7, 1, 7, 2, 5, 2, 3, 3, 8, 0, 0, 9, 4, 4, 5, 9, 0, 8, 8,
7, 9, 9, 8, 3, 3, 8, 7, 0, 4, 6, 6, 1, 1, 9, 0, 3, 1, 3, 9, 2, 8,
3, 7, 4, 5, 5, 7, 2, 1, 9, 5, 5, 7, 9, 1, 9, 1, 7, 6, 5, 1, 6, 7,
5, 6, 7, 2, 9, 4, 9, 0, 8, 3, 3, 6, 0, 1, 3, 3, 9, 6, 1, 5, 1, 6,
6, 3, 1, 0, 1, 0, 2, 2, 1, 9, 7, 9, 1, 0, 9, 1, 3, 8, 1, 5, 0, 0,
8, 6, 1, 2, 6, 6, 9, 5, 3, 6, 3, 8, 9, 8, 6, 9, 7, 2, 8, 5, 9, 6,
9, 7, 3, 7, 4, 3, 2, 1, 5, 8, 0, 8, 6, 6, 7, 5, 6, 6, 4, 6, 3, 7,
2, 3, 6, 8, 5, 3, 1, 6, 8, 8, 9, 0, 8, 5, 6, 8, 0, 1, 2, 0, 0, 1,
9, 6, 7, 6, 3, 2, 0, 5, 5, 2, 7, 1, 6, 4, 6, 0, 2, 5, 2, 0, 7, 6,
9, 6, 1, 9, 1, 1, 0, 0])
from sklearn.metrics import confusion_matrix
import seaborn as sn
= confusion_matrix(y_test, y_predicted)
cm = (10,7))
plt.figure(figsize =True)
sn.heatmap(cm, annot'Predicted')
plt.xlabel('Truth') plt.ylabel(
Text(95.72222222222221, 0.5, 'Truth')
from sklearn.metrics import classification_report
= classification_report(y_test, y_predicted)
report print(report)
precision recall f1-score support
0 0.97 1.00 0.99 35
1 0.97 0.97 0.97 36
2 0.93 0.96 0.95 28
3 0.97 0.95 0.96 40
4 0.96 1.00 0.98 27
5 0.94 0.94 0.94 35
6 1.00 1.00 1.00 46
7 1.00 0.97 0.98 33
8 0.97 0.97 0.97 38
9 0.98 0.95 0.96 42
accuracy 0.97 360
macro avg 0.97 0.97 0.97 360
weighted avg 0.97 0.97 0.97 360