逻辑回归:建立在回归基础上的一种分类模型
从名字上看,二者都带有回归二字,好像都是用于解决回归问题的,但是实际情况却不是这样。线性回归,预测的是连续性的因变量值,而逻辑回归预测的是离散型,或者更通俗的说,是二分类变量,比如是否患病,预测的结果就是两个,患病,正常人,所以说逻辑回归本质是一个分类模型。
那为何又有回归二字呢,是因为逻辑回归还是以线性回归为基础,通过引入概率和sigmod函数,将原本二元的离散变量巧妙的转换为了连续性变量,首先来看下sigmod 函数, 公式如下
其作用是将任意的实数映射到0到1这个区间里面,将该函数的参数t替换成线性回归的方程,就实现了线性回归到概率的转换, 公式如下
可以看到,经过sigmod的映射,得到的概率取值范围为0到1,然后定义一个阈值,计算出的概率值大于阈值定义为1, 小于阈值定义为0,从而完美实现连续型到二元离散的变换。
更进一步对上述公式进行转换,可以得到如下结果
回归方程有了,接下来需要定义损失函数,来对拟合结果进行量化评价。在最小二乘法中,采用了误差平方和这一损失函数,在逻辑回归中,采用的则是最大似然法。
似然的含义可以看做是概率,在最大似然法中,每个样本的拟合结果都是一个概率值,所谓最大似然,就是这些样本点的概率值最大,因为每个样本是相互独立的,所以计算总体概率是要相乘,公式如下
进行对数操作后,转换如下
求该函数的最大值就涉及到了函数极值的问题,函数的极值处都是导数为0的点,所以对该函数求导,导数为0,就可以得到一个方程,求解该方程,即可得到对应的参数值。在求解过程中,一般会使用梯度下降法来进行求解。
在scikit-learn中,运用逻辑回归的代码如下
>>> from sklearn.datasets import make_classification
>>> from sklearn.linear_model import LogisticRegression
>>> X, y = make_classification(n_samples=1000)
>>> reg = LogisticRegression().fit(X, y)
>>> reg
LogisticRegression()
>>> reg.coef_
array([[ 1.57039241, -1.9443342 , 0.33977548, 0.15358626, 0.01151493,
0.049963 , -0.10771043, 0.16370667, 0.09624831, -0.14460016,
-0.05266105, 3.40908235, -0.01764919, 0.1042456 , -0.0111873 ,
-0.9301332 , 0.33795906, 0.25502952, -0.01181707, -0.32428164]])
>>> reg.intercept_
array([0.98562468])
对于逻辑回归而言,求解回归方程的参数是一大重点,另外还需要确定合适的阈值,因为最终要根据阈值来判定样本的具体分类,所以不同阈值对分类效果也有很大的影响。在实际分析中,经常会看到使用ROC曲线来评价不同阈值的分类效果,然后选择一个合适的阈值。