人们都说逻辑回归是一种很简单的分类器,笔者也看过不少关于逻辑回归的文章以及教程之类的,可是如果你让把独立地把这个逻辑回归过程完整地复述一遍,还是会有很多细节不太明了。在这里以问答形式作一个总结,错误的地方请指正。
一 能用简单的话讲讲什么是逻辑回归吗?
逻辑回归就是将线性模型的输出值经过Sigmoid函数处理,将输出值定位在(0,1)之间,用于二分类的任务。它不仅能够预测出类别,还能得到属于某个类别的概率预测。
二 逻辑回归的代价函数以及导数是什么?
用极大似然法来估计参数,即属于某正确类别的概率越大越好。初学者看到一大堆公式可能就会害怕, 这里我用通俗易懂的语言来解释一下:前面已经说过这是个二分类问题,假设有0类和1类,逻辑回归输出值为P, 可以看作是属于1类的概率。如果真实标签为1, 那么P就是我们需要最大化的概率,如果真实标签为0,那么(1-P)才是我们需要最大化的概率。我们将这些训练数据属于正确样本的概率相乘起来,然后极大化这个式子。不过概率值是小数,这么多个小数相乘容易赵成浮点数下溢,一般用取对数似然。取对数之后,我们便可以对损失函数求导,并用梯度下降法来求参数值啦。(sigmoid函数有个很好的性质:sigmoid’ = sigmoid*(1-sigmoid))
三 为啥代价函数不能用均方误差函数来做呢?
将Sigmoid函数代入代价函数后发现是个非凸函数,计算太麻烦
四 逻辑回归有什么优缺点?
形式简单,可解释性好
难以拟合复杂的数据
五 逻辑回归的决策边界应该怎么表示?
根据推算可知,线性方程的上方和下方就是两个类。
当我们将线性方程改为多项式项的时候,决策边界就是不规则的:
绘制方法很简单,给不同类别的点取不同的颜色,出现的就是决策边界。
六 逻辑回归的正则化表示?
七 怎么用scikit-learn来实现逻辑回归?
import numpy as np
import malplotlib.pyplot as plt
np.random.seed(666)
x = np.random.normal(0,1,size=(200,2))
y = np.array(x[:,0]**2+x[:,1]<1.5, dtype='int')
for _ in range(20):#add noise
y[np.random.randint(200)]=1
plt.scatter(x[y==0,0],x[y==0,1])
plt.scatter(x[y==1,0],x[y==1,1])
plt.show()
随机分成测试组和训练组:
from sklearn.model_selection import train_test_split
x_train, x_test,y_train,y_test = train_test_split(x,y,random_state=666)
开始逻辑回归:
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression()
log_reg.fit(x_train,y_train)
最后附上笔记