目录
逻辑回归是一种分类算法 ,通过对训练样本的学习,找到一个超平面 WX+b=0 将正负两类样本分开。
sigmoid function的图像是一条值在0到 1之间的S型曲线,如图:
一、逻辑回归模型的构建
我们简单地把原来的X替换为一个线性模型就得到了上面公式。代替部分可以扩展如下:
除了上面的表现形式,我们也可以用另外一种形式来表达二元逻辑回归模型。将上面模型简单地进行变化:
若将y视为样本x作为正例的可能性,则1-y是其作为反例的可能性。称为几率,称为对数几率 。
逻辑回归实际上是用线性回归模型的预测结果去逼近真实标记的对数几率,因此,其对应的的模型称为“对数几率回归”。
二、逻辑回归的损失函数
类别为1和0的后验概率估计:
通过极大似然估计(MLE)推到逻辑回归的损失函数:
将0和1两类的后验概率合并可得:
使用极大似然估计来根据给定的训练集估计出参数,将n个训练样本的概率相乘得到:
似然函数是相乘的模型,我们可以通过取对数将等式右侧变为相加模型,以便于求解。变换后如下:
似然函数是极大化,而损失函数是最小化,因此,我们需要在上式前加一个负号便可得到最终的损失函数:
其等价于:
三、损失函数求解
使用梯度下降法求解逻辑回归损失函数。梯度下降的迭代公式如下:
问题变为如何求损失函数对参数的梯度。下面进行详细推导过程:
将求得的梯度带入迭代公式中,即为:
四、sklearn实现逻辑回归
参考官网的例子,对鸢尾花数据进行逻辑回归。
import numpy as np
from sklearn import linear_model, datasets
from sklearn.cross_validation import train_test_split
# 1.加载数据
iris = datasets.load_iris()
X = iris.data[:, :2] # 使用前两个特征
Y = iris.target
#np.unique(Y) # out: array([0, 1, 2])
# 2.拆分测试集、训练集。
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=0)
# 设置随机数种子,以便比较结果。
# 3.标准化特征值
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)
# 4. 训练逻辑回归模型
logreg = linear_model.LogisticRegression(C=1e5)
logreg.fit(X_train, Y_train)
# 5. 预测
prepro = logreg.predict_proba(X_test_std)
acc = logreg.score(X_test_std,Y_test)