Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
352 changes: 352 additions & 0 deletions Logistic Regression code.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,352 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### In the field of machine learning, it's the goal of statistical classification is to use an object's characteristics to identify which class (or group) it belongs to. \n",
"\n",
"- Logistic regression is the means by which classification is made based on predictor function that is linear, combining weights with the values of the dependent variable which in this case is our x\n",
"\n",
"#### Note: This is only for a binary classification problem not multi-classification"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"#TO remove depreciation warnings when we run the code\n",
"import warnings\n",
"warnings.filterwarnings('ignore')\n",
"warnings.filterwarnings('ignore', category=DeprecationWarning)\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"class logistic_regression:\n",
" \n",
" def __init__(self,iterations,alpha):\n",
" self.iterations=iterations #choosing the number of iterations (Hyperparameter)\n",
" self.alpha=alpha #choosing alpha(Hyperparameter) \n",
" \n",
" def sigmoid(self,z):\n",
" return(1/(1+np.exp(-z))) #sigmoid function\n",
" \n",
" def fit(self,x,y): #(X-data for training, y - Output) \n",
" m=x.shape[0] \n",
" self.w=np.random.randn(x.shape[1],1) #Initializing the weight\n",
" \n",
" cost_vals=[] \n",
" for i in range(2): #For each number of iterations\n",
" a= np.dot(x,self.w) #multiplying the weights with the Feature values and summing them up\n",
" z=self.sigmoid(a) #Using link function to transform the data\n",
" \n",
" cost = (-1/m) *( np.dot(y,np.log(z))+(np.dot((1-y),np.log(1-z)))) #Calculating the cost function\n",
" \n",
" cost_vals.append(cost) #Creating a list with all cost values for each iteration\n",
" \n",
" dw = np.dot(x.T,z-np.array([y])).mean() #Calculating the gradient\n",
" \n",
" self.w=self.w-(self.alpha*dw) #updating the weights\n",
" return self\n",
" \n",
" def predict(self,x,threshold): \n",
" probability=self.sigmoid(np.dot(x,self.w)) #predicting a new set of values based on the training \n",
"\n",
" if(probability>threshold):\n",
" return (1)\n",
" else:\n",
" return (0)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv('pimadiabetics.csv')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(768, 9)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Number of times pregnant</th>\n",
" <th>Plasma glucose concentration</th>\n",
" <th>Diastolic blood pressure</th>\n",
" <th>Triceps skinfold thickness</th>\n",
" <th>2-Hour serum insulin</th>\n",
" <th>Body mass index</th>\n",
" <th>Diabetes pedigree function</th>\n",
" <th>Age</th>\n",
" <th>Class</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>6</td>\n",
" <td>148</td>\n",
" <td>72</td>\n",
" <td>35</td>\n",
" <td>0</td>\n",
" <td>33.6</td>\n",
" <td>0.627</td>\n",
" <td>50</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>85</td>\n",
" <td>66</td>\n",
" <td>29</td>\n",
" <td>0</td>\n",
" <td>26.6</td>\n",
" <td>0.351</td>\n",
" <td>31</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>8</td>\n",
" <td>183</td>\n",
" <td>64</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>23.3</td>\n",
" <td>0.672</td>\n",
" <td>32</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>89</td>\n",
" <td>66</td>\n",
" <td>23</td>\n",
" <td>94</td>\n",
" <td>28.1</td>\n",
" <td>0.167</td>\n",
" <td>21</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>137</td>\n",
" <td>40</td>\n",
" <td>35</td>\n",
" <td>168</td>\n",
" <td>43.1</td>\n",
" <td>2.288</td>\n",
" <td>33</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Number of times pregnant Plasma glucose concentration \\\n",
"0 6 148 \n",
"1 1 85 \n",
"2 8 183 \n",
"3 1 89 \n",
"4 0 137 \n",
"\n",
" Diastolic blood pressure Triceps skinfold thickness 2-Hour serum insulin \\\n",
"0 72 35 0 \n",
"1 66 29 0 \n",
"2 64 0 0 \n",
"3 66 23 94 \n",
"4 40 35 168 \n",
"\n",
" Body mass index Diabetes pedigree function Age Class \n",
"0 33.6 0.627 50 1 \n",
"1 26.6 0.351 31 0 \n",
"2 23.3 0.672 32 1 \n",
"3 28.1 0.167 21 0 \n",
"4 43.1 2.288 33 1 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"class_0 = np.where(df['Class']==1)\n",
"class_1 = np.where(df['Class']==0)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.LineCollection at 0x7f02c6fd3940>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig,ax1=plt.subplots(1,1,figsize=(10,5))\n",
"ax1.scatter(df.iloc[class_1]['Age'],df.iloc[class_1]['Class'],s=50,c='b',marker='+',label='One class')\n",
"ax1.scatter(df.iloc[class_0]['Age'],df.iloc[class_0]['Class'],s=50,c='g',marker='o',label=\"Second Class\")\n",
"plt.hlines(y=0.5,xmin=100,xmax=500)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"#Initialize the class\n",
"obj=logistic_regression(df.shape[0],0.001)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"#Convert the features to a matrix\n",
"X = df.iloc[:,0:8].values\n",
"y = df['Class'].values"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"model = obj.fit(X,y)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.predict([[1,115,70,30,96,34.6,0.529,32]],0.5)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
40 changes: 40 additions & 0 deletions model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import numpy as np

class logistic_regression:

def __init__(self,iterations,alpha):
self.iterations=iterations #choosing the number of iterations (Hyperparameter)
self.alpha=alpha #choosing alpha(Hyperparameter)

def sigmoid(self,z):
return(1/(1+np.exp(-z))) #sigmoid function

def fit(self,x,y): #(X-data for training, y - Output)
m=x.shape[0]
self.w=np.random.randn(x.shape[1],1) #Initializing the weight

cost_vals=[]
for i in range(2): #For each number of iterations
a= np.dot(x,self.w) #multiplying the weights with the Feature values and summing them up
z=self.sigmoid(a) #Using link function to transform the data

cost = (-1/m) *( np.dot(y,np.log(z))+(np.dot((1-y),np.log(1-z)))) #Calculating the cost function

cost_vals.append(cost) #Creating a list with all cost values for each iteration

dw = np.dot(x.T,z-np.array([y])).mean() #Calculating the gradient

self.w=self.w-(self.alpha*dw) #updating the weights
return self

def predict(self,x,threshold):
probability=self.sigmoid(np.dot(x,self.w)) #predicting a new set of values based on the training

if(probability>threshold):
return (1)
else:
return (0)


if __name__ == "__main__":
logistic_regression()
Loading