100-Days-Of-ML-Code Day6 逻辑回归

逻辑回归|第6天

Steps

Datasets

数据集包含了社交网络中用户的信息。这些信息涉及用户ID,性别,年龄以及预估薪资。一家汽车公司刚刚推出了他们新型的豪华SUV,尝试预测哪些用户会购买这种全新SUV。并且在最后一列用来表示用户是否购买。将建立一种模型来预测用户是否购买这种SUV,该模型基于两个变量,分别是年龄和预计薪资。因此特征矩阵将是这两列。我们尝试寻找用户年龄与预估薪资之间的某种相关性,以及他是否购买SUV的决定。

Code

第1步:数据预处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#导入库
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
#导入数据集
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:,[2,3]].values
Y = dataset.iloc[:,4].values
#将数据集分成训练集和测试集
from sklearn.model_selection import train_test_split
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size = 0.25,random_state = 0)
#特征缩放
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

第2步:逻辑回归模型

该项工作的库将会是一个线性模型库,之所以被称为线性是因为逻辑回归是一个线性分类器,这意味着在二维空间中,两类用户(购买和不购买)将被一条直线分割。然后导入逻辑回归类。下一步将创建该类的对象,它将作为训练集的分类器。

1
2
3
4
#将逻辑回归应用于训练集
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
classifier.fit(X_train, Y_train)

第3步:预测

1
2
#预测测试集结果
Y_pred=classifier.predict(X_test)

第四步:评估预测

预测了测试集。 现在将评估逻辑回归模型是否正确的学习和理解。因此这个混淆矩阵将包含模型的正确和错误的预测。

1
2
3
4
5
#生成混淆矩阵
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(Y_test,Y_pred)
#用来呈现算法性能的效果的特定矩阵
#混淆矩阵的每一列代表了预测类别,每一列的总数表示预测为该类别的数据的数目;每一行代表了数据的真实归属类别,每一行的数据总数表示该类别的数据实例的数

训练集可视化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from matplotlib.colors import ListedColormap
X_set,Y_set = X_train,Y_train
X1,X2 = np.meshgrid(np.arange(start = X_set[:,0].min() - 1,stop = X_set[:,0].max() + 1,step = 0.01),np.arange(start = X_set[:,1].min() - 1,stop = X_set[:,1].max() + 1,step = 0.01))
#meshgrid(x,y)根据向量x,y生成网格点坐标矩阵,arange()根据参数范围生成向量
plt.contourf(X1,X2,classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),alpha = 0.75,cmap = ListedColormap(('red','green')))
#contourf()绘制三维等高线图在二维空间的投影并进行区域填充,ravel()将多维数组降为一维
plt.xlim(X1.min(),X1.max())
plt.ylim(X2.min(),X2.max())
for i,j in enumerate(np.unique(Y_set)):
plt.scatter(X_set[Y_set == j,0],X_set[Y_set == j,1],c = ListedColormap(('black','white'))(i),label = j)
plt.title('Logistic Regression(Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()#显示图中标签
plt.show()

测试集可视化

1
2
3
4
5
6
7
8
9
10
11
12
X_set,Y_set=X_test,Y_pred
X1,X2 = np.meshgrid(np.arange(start = X_set[:,0].min() - 1,stop = X_set[:,0].max() + 1,step = 0.01),np.arange(start = X_set[:,1].min() - 1,stop = X_set[:,1].max() + 1,step = 0.01))
plt.contourf(X1,X2,classifier.predict(np.array([X1.ravel(),X2.ravel()]).T).reshape(X1.shape),alpha = 0.75,cmap = ListedColormap(('red','green')))
plt.xlim(X1.min(),X1.max())
plt.ylim(X2.min(),X2.max())
for i,j in enumerate(np.unique(Y_set)):
plt.scatter(X_set[Y_set == j,0],X_set[Y_set == j,1],c = ListedColormap(('black','white'))(i),label = j)
plt.title('Logistic Regression(Test set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()