文章参考了《Python大数据分析与机器学习商业案例实战》(王宇韬 钱妍竹)一书
1. 一元线性回归模型
数学原理:最小二乘法
python中的实现方式:给定自变量X和因变量Y,直接调用sklearn包中的LinearRegression模块
from sklearn.linear_model import LinearRegression
# 新建一个LinearRegression对象
regr = LinearRegression()
# 调用对象的fit方法进行线性回归
regr.fit(X, Y)
2. 一元多次线性回归模型
数学原理:最小二乘法+梯度下降法
python中的实现方式:将单特征自变量变换为多特征自变量,变换出的特征是原特征的n次方,具体通过PolynomialFeatures模块实现,其中Polynomial指多项式
from sklearn.preprocessing import PolynomialFeatures
#以一元二次线性回归为例,输入最高次项次数为2
poly_reg = PolynomialFeatures(degree = 2)
#生成多特征变量X_
X_ = poly_reg.fit_transform(X)
#对X_,Y进行线性回归即可
regr = LinearRegression()
regr.fit(X_, Y)
3. 多元线性回归模型
原理同一元多次线性回归模型,代码形式同一元线性回归模型,只是里面的X变量是多特征值。
4. 逻辑回归模型
数学原理:线性回归原理+Sigmoid函数
Sigmoid函数:一个将取值范围从(-∞,+∞)的自变量转换到(0, 1)之间的因变量的函数,以下代码可以画出其图像
#导入必要的库
import matplotlib.pyplot as plt
import numpy as np
#建立自变量,通过numpy的linspace()函数生成(-6, 6)的等差数列,默认50个数
x = np.linspace(-6,6)
#建立因变量,等式右边为Sigmoid函数的表达式
y = 1.0 / (1.0 + np.exp(-x))
#绘制图像
plt.plot(x,y)
plt.show()
得到的图像如下:
逻辑回归的本质:将线性回归模型通过Sigmoid函数进行非线性转换,得到一个介于0~1的概率值。有了概率之后,就可以进行分类了。
Python实现方式:通过极大似然估计法来确定线性回归模型合适的系数ki和截距b。当然这些都被Python封装到了LogisticRegression模块中,我们可以直接调用
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X, Y)
以上代码实现量调用模型并通过数据X, Y进行训练,想要应用模型进行预测只需调用predict()函数
model.predict(X)
逻辑回估模型的深入理解
对于python实现逻辑回归模型而言,我们只是调用了函数得到了训练后的模型,但想要真正地用好函数需要理解回归值是怎么像概率值映射的。通过如下代码可以获得概率值:
y_pred_proba = model.predict_proba(X)
以二分类问题为例,y_pre_proba是一个ndarray类型的二维数组,分别存储了两种分类对应的概率值。其中二分类中数值较大的分类默认由以下公式计算其概率值P:
这样另一个分类的概率值便可由1-P得出。现在只需要计算截距k0和系数k1、k2使得预测的概率尽可能地准确。正如线性回归模型使用最小二乘法来作为控制条件,逻辑回归模型采用最大似然估计发来作为控制条件。
模型评估方法
对于二分类问题,分类预测结果一共有四种情况(假设两种分类分别为“真”和“假”:
① 预测为“真”,实际为“真”,即True Positive(TP)正确肯定;
② 预测为“真”,实际为“假”,即False Positive (FP)虚报;
③ 预测为“假”,实际为“假”,即True Negative(TN)正确否定;
④ 预测为“假”,实际为“真”,即False Negative(FN)漏报。
基于以上四种情况可以计算两个指标:命中率TPR(真正率)和假警报率FPR(假正率):
- TPR = TP/(TP+FN)
- FP = FP/(FP+TN)
命中率(真正率)又称召回率。
ROC曲线:横轴为假警报率,纵轴为命中率,由不同阈值产生的对应(FPR,TPR)组成的散点连接而成的曲线。
AUC值(Area Under Curve):指ROC曲线下方的面积。
KS曲线:阈值作为横坐标,命中率与假警报率之差作为纵坐标。
KS值:KS曲线的峰值。
一般而言,AUC值能达到0.75以上,KS值在[0.2, 0.3]就是很好的模型了。
下图中绿色的曲线就是KS曲线: