Scikit-learn 分类:二项逻辑回归?
我有一些文本,它们的评分范围是从-100到+100。我想把这些文本分类为正面或负面。
我该如何进行二项逻辑回归,以获取测试数据是-100或+100的概率呢?
我目前用的最接近的方法是SGDClassifier( penalty='l2',alpha=1e-05, n_iter=10),但是当我用二项逻辑回归来预测-100和+100的概率时,得到的结果和SPSS不一样。所以我在想,这是不是不对的函数呢?
2 个回答
如果你只需要正负标签,或者正标签的概率作为输出,那么你可以通过以下方式得到二进制标签 y
:
y = score > 0
假设你已经有了一个NumPy数组 score
,里面存放着这些分数。
接下来,你可以把这个分数输入到一个 LogisticRegression
实例中,利用这个连续的分数来为样本计算相对的权重:
clf = LogisticRegression()
sample_weight = np.abs(score)
sample_weight /= sample_weight.sum()
clf.fit(X, y, sample_weight)
这样一来,分数在±100的推文会被赋予最大的权重,而被标记为中性的推文权重则为零,其他的权重会在这两者之间线性变化。
如果数据集非常大,就像@brentlance展示的那样,你可以使用 SGDClassifier
,但如果你想要一个逻辑回归模型,就必须给它设置 loss="log"
;否则,你得到的将是一个线性支持向量机(SVM)。
SGDClassifier 是一个可以使用多种线性分类器的工具,所有这些分类器都是通过随机梯度下降法训练出来的。默认情况下,它会使用线性支持向量机,除非你指定了其他的损失函数。如果你设置损失函数为 'log',那么它就会使用概率逻辑回归。
你可以查看相关文档,了解更多信息: http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier
另外,你也可以使用 sklearn.linear_model.LogisticRegression 来对文本进行逻辑回归分类。
我不太确定你用 SPSS 得到的结果是否和这里的结果完全一样,因为实现方式可能不同。不过,我认为在统计上不会有显著的差异。
补充说明:
我怀疑你在 SPSS 中得到的 99% 准确率是训练集的准确率,而你在 scikit-learn 中看到的 87% 准确率是测试集的准确率。我在数据科学的讨论区看到一个类似的问题,提问者也遇到了相似的情况,他们在训练集上得到了大约 99% 的准确率,而在测试集上得到了 90% 的准确率。
我建议你可以尝试以下方法:在 scikit-learn 中测试几种不同的基本分类器,包括标准的逻辑回归和线性支持向量机。同时,也可以多次用不同的训练/测试数据子集重新运行 SPSS 的逻辑回归,并比较结果。如果你发现不同分类器之间的结果差异很大,而这种差异又无法通过确保相似的训练/测试数据分割来解释,那么请把你看到的结果发到你的问题中,我们可以进一步讨论。
祝你好运!