目录
1.如何求解分类问题
(1)抛出问题
先给出一个例子:根据余额,判断小明是否去看电影。
训练数据:
余额1、2、3、4、5:看电影(正样本)
余额为-1、-2、-3、-4、-5:不看电影(负样本)
在图形中表示:
对于这些离散的数据,基本求解方法是找到f(x):
(2)利用线性回归求解
根据上节所学,可以训练出线性回归的相关模型,如图所示
此时发现,效果还蛮好的,但是其存在局限性,当样本量变大以后,准确率就会下降,如图所示。
因此,解决离散数据的分类问题,尤其是二分类,线性回归不是一个好的解决办法,所以我们引出了逻辑回归。
(3)利用逻辑回归求解
先给出逻辑回归方程及图形表示
可以发现,逻辑回归很好的拟合了数据,出色的完成了分类任务。
2.逻辑回归
(1)原理分析
用于解决分类问题的一种模型。根据数据特征或属性,计算其归属于某一类的概率P(X),根据概率数值判断其所属类别。主要应用场景:二分类问题。
数学表达式(也称逻辑回归方程)
其中,y为类别结果,P为概率分布函数,x为特征值。
(2)当分类任务变得复杂(存在两个、三个或多个变量影响)
如上图有x1和x2影响,此时的逻辑回归方程
或者
上面两个分类任务,最重要的是找到决策边界g(x)
(3)逻辑回归求解
之前在线性回归当中,我们介绍了利用最小化损失函数求解该类问题,同样我们也需找到逻辑回归的损失函数(J)
将P(X)带入方程。采用梯度下降法(类似线性回归,感兴趣的读者可以到上一篇博客学习)求解最小值。
注意:其实计算机底层都封装好了这些算法,是应用过程中只需敲几行代码就OK了。这只是帮助大家更好的理解其中的原理。
3.代码实现
(1)分类散点可视化
#画图看决策边界效果,可视化模型表现:
from matplotlib import pyplot as plt
plt.plot(X1,X2_boundary)
passed = plt.scatter(X1[mask],X2[mask])
failed = plt.scatter(X1[~mask],X2[~mask],marker='^')
(2)逻辑回归模型使用
#模型训练
from sklearn.linear_model import LogisticRegression
lr_model = LogisticRegression()
lr_model.fit(x,y)
#边界函数系数
theta1,theta2 = LR.coef_[0][0],LR.coef_[0][1]
theta0 = LR.intercept_[0]
#对新数据做预测
predictions = lr_model.predict(x_new)
(3)建立新数据集
从两幅图对比得知,建立新数据集会使训练的模型更加准确。
X_new_dic = {'X1':X1,'X2':X2,'X1^2':X1_2,'X2^2':X2_2,'X1X2':X1_X2}
X_new = pd.DataFrame(X_new_dic)
(4)模型评估
#计算准确率
from sklearn.metrics import accuracy_score
y_predict = LR.predict(X)
accuracy = accuracy_score(y,y_predict)
准确率越接近1越好。