返回介绍

5.6 采用逻辑回归

发布于 2024-01-30 22:34:09 字数 3939 浏览 0 评论 0 收藏 0

与它的名字相反,逻辑回归是一种分类方法。当它处理基于文本的分类任务时,功能非常强大。在处理任务时它首先会用一个逻辑函数来进行回归,这也是这个名字的由来。

5.6.1 一点数学和一个小例子

为了对逻辑回归的工作方式有一个初步的理解,让我们先看看下面这个例子。我们在x 轴上画出了一组人工构造的特征值 ,以及它们对应的类别(0或1)。正如我们所看到的,数据中有很多噪声,使得在1到6的特征值 区间上,类别有很多重叠。因此,不直接对离散类别建模,而是得到特征值属于类别1的概率P (X ),会更好一些。一旦有了这样一个模型,我们就可以进行预测,当P (X )>0.5的时候样本属于类别1,在其他情况下属于类别0。

从数学上来说,对一个有有限区间的事物建模总是有些困难,就像本例里面我们的离散标签0和1。然而,我们可以对概率进行一点调整,使得它们总是在0到1之间。为此,我们需要使用让步比(odds ratio),以及它的对数。

我们假设一下,一个特征有0.9的概率属于类别1,也就是,P (y =1)=0.9,那么让步比就是P (y =1)⁄(P (y =0)=0.9⁄0.1=9。也就是说,这个特征映射到类别1的机会是9:1。如果P (y =0.5),那么这个样本属于类别1的机会将是1:1。让步比以0为下界,但没有上限,可以达到无限大(下图中的左图)。如果对它取对数,我们就可以把所有0到1之间的概率映射到负无穷到正无穷的整个区间上(下图中的右图)。这种方式最好的一点就是,我们仍然保持着这样一个关系:更高的概率对应于更高的让步比对数——这不再限于0或1了。

这意味着我们现在可以把特征的线性组合(是的,我们现在只有一个特征和一个常量,但马上就会有更多)拟合成log(odds)。让我们考虑一下第1章中的线性等式,如下所示:

它可以用如下等式替换(用p 来替换y ):

我们可以从等式中求解Pi ,如下式所示:

我们可以找到适当的系数,使得上述式子在所有数据对(xi ,pi )中能给出最低的误差。这个可以用scikit-learn实现。

将数据拟合到类别标签之后,这个公式对每一个新数据点x 都可以给出x 属于类别1的概率。参考如下代码:

>>> from sklearn.linear_model import LogisticRegression >>> clf = LogisticRegression() >>> print(clf) LogisticRegression(C=1.0, class_weight=None, dual=False, fit_ intercept=True, intercept_scaling=1, penalty=l2, tol=0.0001) >>> clf.fit(X, y) >>> print(np.exp(clf.intercept_), np.exp(clf.coef_.ravel())) [ 0.09437188] [ 1.80094112] >>> def lr_model(clf, X): return 1 / (1 + np.exp(-(clf.intercept_ + clf.coef_*X))) >>> print("P(x=-1)=%.2f\tP(x=7)=%.2f"%(lr_model(clf, -1), lr_ model(clf, 7))) P(x=-1)=0.05 P(x=7)=0.85

你可能已经注意到,scikit-learn可以通过特殊字段intercept_ 把第一个系数暴露出来。

如果把拟合的模型画出来,我们就可以看到它对于给定数据是非常有意义的:

5.6.2 在帖子分类问题上应用逻辑回归

诚然,前一节的例子显示出了逻辑回归的美妙之处。那么用它来处理极其嘈杂的数据,效果又如何呢?

将最邻近分类器(k =90)作为一个基线,我们可以看到,它的效果稍微好一点,但并没有使情况改变很多:

方法

均值(分数)

标准方差

LogReg C=0.1

0.631 0

0.027 91

LogReg C=100.00

0.630 0

0.031 70

LogReg C=10.00

0.630 0

0.031 70

LogReg C=0.01

0.629 5

0.027 52

LogReg C=1.00

0.629 0

0.032 70

90NN

0.628 0

0.027 77

我们已经看到采用不同正则化参数C 所得到的正确率。通过它,我们可以控制模型的复杂度。这个类似于最邻近方法的参数k。较小的C 值会带来较大的惩罚,这是说,它会使模型更为复杂。

让我们快速浏览一下最佳候选方案(C =0.1)的偏差-方差图。图中显示出,我们的模型具有高偏差——测试和训练误差很接近,但都处于难以接受的较高数值上。这意味着逻辑回归在目前的特征空间中是欠拟合的,无法学到一个能够正确拟合数据的模型。

那现在怎么办呢?我们改变了模型,并且在目前所知的范围内把它尽可能调到了最好。但是我们仍然没有得到令人满意的分类器。

似乎,要么是对于我们的任务来说,数据过于嘈杂了,要么是对于区分不同类别来说,我们的特征集合还不是很适合。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文