100天机器学习实践之第4~6天

2019-08-20 11:30:51 浏览数 (1)

什么是逻辑回归

逻辑回归用于解决分类问题。 这里的目的是预测被观察的当前对象所属的分类。它会给出0到1之间的离散二元结果。一个简单的例子就是一个人是否会在即将举行的选举中投票。

如何工作

逻辑回归计算非独立变量(我们想要预测的分类标签)与一个或多个独立变量(特征)之间的关系,这个计算通过使用它的基础逻辑函数估计概率来实现。

Sigmoid Function S曲线函数

sigmoid函数是一个S形曲线函数,可以取任何实数值,并将其映射到0到1范围内的值,但从不完全y与0或1相等。

预测

计算获得的概率必须转换为二进制数值以准确地作出预测。这就是逻辑回归函数(也叫S曲线函数)的任务。0和1之间的值被阀值分类器转换为0值或1值。

逻辑回归vs线性回归

逻辑回归给出的结果为离散值,线性回归的结果为连续值。

说明

此数据集包含社交网络中用户的信息。 这些信息是用户ID,性别,年龄和估计工资。 一家汽车公司刚刚推出他们全新的豪华SUV。我们试图看看社交网络中的哪些用户将购买这款全新的SUV。这里的最后一栏告诉我们用户是否购买了这款SUV,我们将构建一个预测模型。如果用户打算根据两个变量来购买SUV,这两个变量将是年龄和估计的工资。所以我们的特征矩阵只是这两列。我们希望找到年龄与用户的估计工资之间的一些相关性以及他是否购买SUV。

Step 1: 数据预处理

代码语言:javascript复制
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

dataset = pd.read_csv('datasets/Social_Network_Ads.csv')
X = dataset.iloc[:,[2,3]].values
y = dataset.iloc[:,4].values

from sklearn.cross_validation 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.fit_transform(X_test)

Step 2: 逻辑回归模型

这个任务中使用的的库将为线性模型库,它被称为线性,因为逻辑回归是一个线性分类器,这意味着,因为我们在两个维度,我们的两类用户将被一条直线分开。我们导入逻辑回归类,然后从这个类中创建一个新对象,它将成为我们的训练集中的分类器。

代码语言:javascript复制
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
classifier.fit(X_train, y_train)

Step 3: 预测

代码语言:javascript复制
y_pred = classifier.predict(X_test)

Step 4: 评估预测结果

预测之后,我们将评估我们的逻辑回归模型是否正确。混淆矩阵将包含我们的模型在集合上做出的正确预测以及不正确的预测。

混淆矩阵用以评估分类的准确性。根据定义,混淆矩阵C使得Ci,j等于已知在组i中但预测在组j中的观测数。因此,在二进制分类中,真阴性的计数是C0,0 ,假阴性是C1,0,真阳性是C1,1 ,假阳性是C0,1 。

本例中,cm=[[63,5],[7,25]],表示值为0预测为0数量为63,值为0预测为1数量为5;值为1预测为0数量为7,值为1预测为1数量为25。

代码语言:javascript复制
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

Step 5: 可视化

可视化训练集

代码语言:javascript复制
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))
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(('red','green'))(i),label=j)
plt.title('Logistic Regression(Training set)')
plt.xlabel('Age')
plt.ylabel('Salary')
plt.legend()
plt.show()

图片.png

0 人点赞