对于二分类问题,一般不采用逻辑回归模型,因为使用线性回归处理分类有如下问题,设标记值只有两个值0和1:
当进行预测时,模型得到的结果大于0.5时,将结果归为1,当结果小于0.5时将结果归为0.看似使用线性回归可以解决分类问题,不过当遇到下面这种情况时,使用线性回归处理分类会出现偏差:
此时中间部分的结果会出错.逻辑回归(logistic regression)可以有效解决这个问题.
逻辑回归由英文logistic regression直译而来,在周志华<机器学习>中译为对数几率回归.
其中
被称作sigmoid函数.图像为:
当z趋近负无穷,g(z)趋近0,当z趋近正无穷时,g(z)趋近1.模型的输出大多数都非常接近0或1,而在0.5附近的区域非常小,这就让我们容易确定输出结果该归为1或是0.
此时的直线相当于如下形式,而点到直线的距离相当于sigmoid函数的输入z,所以点离直线越远概率越大,在直线附近时概率为0.5
逻辑回归输出的是概率,而衡量概率分布的相似程度的常用方法是KL散度,而在这里KL散度等价于交叉熵。
交叉熵的公式是:
根据交叉熵的公式,可以写出我们的损失函数:
我们新构造的代价函数为凸函数,所以我们使用梯度下降找到最优的模型:
我们计算后,得到:
我们发现逻辑回归的迭代公式与线性回归看起来是一样的,不过注意这里可是不一样的哦!
这里我们可以使用矩阵相乘一次性计算出所有的
设:
我们可以将上面两个公式合并成一个公式:
根据最大似然法的思想,如果模型足够好,则要使已知的数据的概率足够高,所以:
为了方便计算对取对数,这并不影响结果
最大化,其实相当于最小化,你会发现与上面的正好对应起来.
对求导:
根据最终的到随机梯度下降规则:
假设我们要解决一个分类问题,该分类问题有三个类别,分别用△,□和×表示,每个实例(Entity)有两个属性(Attribute),如果把属性 1 作为 X 轴,属性 2 作为 Y 轴,训练集(Training Dataset)的分布可以表示为下图:
One-Vs-All(或者叫 One-Vs-Rest)的思想是把一个多分类的问题变成多个二分类的问题。转变的思路就如同方法名称描述的那样,选择其中一个类别为正类(Positive),使其他所有类别为负类(Negative)。比如第一步,我们可以将三角形所代表的实例全部视为正类,其他实例全部视为负类,得到的分类器如图:
同理我们把 X 视为正类,其他视为负类,可以得到第二个分类器:
最后,第三个分类器是把正方形视为正类,其余视为负类:
对于一个三分类问题,我们最终得到 3 个二元分类器。在预测阶段,可以选择概率最高的分离器作为最终的结果。
优点:普适性还比较广,可以应用于能输出值或者概率的分类器,同时效率相对较好,有多少个类别就训练多少个分类器。
缺点:很容易造成训练集样本数量的不平衡(Unbalance),尤其在类别较多的情况下,经常容易出现正类样本的数量远远不及负类样本的数量,这样就会造成分类器的偏向性。
相比于 One-Vs-All 由于样本数量可能的偏向性带来的不稳定性,One-Vs-One 是一种相对稳健的扩展方法。对于同样的三分类问题,我们像举行车轮作战一样让不同类别的数据两两组合训练分类器,可以得到 3 个二元分类器。
它们分别是三角形与 x 训练得出的分类器:
三角形与正方形训练的出的分类器:
预测结果可以通过投票决定。
这种方法的缺点是当类别比较多时需要训练的分离器也会比较多。优点是不会出现类别不均衡的情况。
对于多分类问题,还可以使用Softmax 回归来解决:
如果让分类数为 2 带入 softmax 回归,会发现其本质上和 logistic 回归是一样的。
sklearn中提供了One-Vs-All与Softmax两种多分类支持,可以通过参数multi_class来设置使用哪种多分类方式。
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
X, y = load_iris(return_X_y=True)
clf = LogisticRegression(random_state=0, solver='lbfgs',
multi_class='multinomial').fit(X, y)
clf.predict(X[:2, :])
clf.predict_proba(X[:2, :])
clf.score(X, y)
编程实现:
https://www.kaggle.com/swimmingwhale/logistic-regression
参考:
http://cs229.stanford.edu/
https://www.coursera.org/learn/machine-learning