Scikit-learn分类:二项对数回归



我有一个连续等级从-100到+100的文本。我正试着把它们分为积极的和消极的。

如何执行二项对数回归来获得测试数据为-100或+100的概率?

我得到的最接近的是SGDClassifier(penalty='l2',alpha=1e-05, n_iter=10),但是当我使用二项对数回归来预测-100和+100的概率时,这并没有提供与SPSS相同的结果。我猜这不是正确的函数?

SGDClassifier提供了对几个线性分类器的访问,这些分类器都是用随机梯度体面训练的。它将默认为线性支持向量机,除非你用不同的损失函数调用它。Loss ='log'将提供概率逻辑回归。

参见文档:http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html sklearn.linear_model.SGDClassifier

或者,您可以使用sklearn.linear_model。LogisticRegression用逻辑回归对文本进行分类。

由于实现上的差异,我不清楚你是否会得到与SPSS完全相同的结果。然而,我不希望看到统计上的显著差异。

编辑添加:

我怀疑你用SPSS逻辑回归得到的99%的准确性是训练集的准确性,而你用scikits-learn逻辑回归看到的87%是测试集的准确性。我在数据科学堆栈交换中发现了这个问题,其中不同的人正在尝试和非常相似的问题,并且在训练集上获得了~99%的准确率和90%的测试集准确率。

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

我的推荐路径如下:在scikits-learn中尝试几种不同的基本分类器,包括标准逻辑回归和线性支持向量机,并使用数据的不同训练/测试子集重新运行SPSS逻辑回归几次,并比较结果。如果你继续看到分类器之间存在很大的分歧,这无法通过确保相似的训练/测试数据分割来解释,然后将你看到的结果发布到你的问题中,我们可以从那里继续前进。

祝你好运!

如果pos/负,或者pos的概率,真的是你唯一需要的输出,那么你可以导出二进制标签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。

最新更新