Scikit-learn 分类:二项逻辑回归?

3 投票
2 回答
1399 浏览
提问于 2025-04-18 17:27

我有一些文本,它们的评分范围是从-100到+100。我想把这些文本分类为正面或负面。

我该如何进行二项逻辑回归,以获取测试数据是-100或+100的概率呢?

我目前用的最接近的方法是SGDClassifier( penalty='l2',alpha=1e-05, n_iter=10),但是当我用二项逻辑回归来预测-100和+100的概率时,得到的结果和SPSS不一样。所以我在想,这是不是不对的函数呢?

2 个回答

0

如果你只需要正负标签,或者正标签的概率作为输出,那么你可以通过以下方式得到二进制标签 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)。

2

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% 的准确率。

https://datascience.stackexchange.com/questions/987/text-categorization-combining-different-kind-of-features

我建议你可以尝试以下方法:在 scikit-learn 中测试几种不同的基本分类器,包括标准的逻辑回归和线性支持向量机。同时,也可以多次用不同的训练/测试数据子集重新运行 SPSS 的逻辑回归,并比较结果。如果你发现不同分类器之间的结果差异很大,而这种差异又无法通过确保相似的训练/测试数据分割来解释,那么请把你看到的结果发到你的问题中,我们可以进一步讨论。

祝你好运!

撰写回答