使用 scikit-learn python 的逻辑回归输出不匹配

Posted

技术标签:

【中文标题】使用 scikit-learn python 的逻辑回归输出不匹配【英文标题】:Logistic regression output using scikit-learn python not matching 【发布时间】:2017-10-20 16:25:37 【问题描述】:

尝试执行以下代码以使用逻辑回归预测值,但即使训练数据中存在的完全相同的行存在于测试数据中,我也没有得到正确的结果。

from sklearn.linear_model import LogisticRegression
from sklearn import metrics
import pandas as pd


X_train_data = 'NegativeScore': [0.25,0.00,0.00,0.00], \
             'NeutralScore':[0.00,0.12,0.00,0.00], \
             'PositiveScore': [0.00,0.00,0.19,0.43]

X_train = pd.DataFrame(X_train_data, columns = \
            ['NegativeScore', 'NeutralScore', 'PositiveScore'])

y_train_data = 'Y': ["Negative", "Others", "Others", "Others"]
y_train = pd.DataFrame(y_train_data, columns = ['Y'])
y_train = y_train.values.ravel()

X_test_data = 'NegativeScore': [0.25, 0.00, 0.00, 0.00, 0.00], \
               'NeutralScore':  [0.00, 0.28, 0.00, 0.00, 0.00], \
               'PositiveScore': [0.00, 0.00, 0.20, 0.30, 0.11]
X_test = pd.DataFrame(X_test_data, columns = ['NegativeScore', 'NeutralScore', 'PositiveScore'])

y_test_data = 'Y': ["Negative", "Others", "Others", "Others", "Others"]
y_test = pd.DataFrame(y_test_data, columns = ['Y'])
y_test = y_test.values.ravel()

logreg = LogisticRegression()
# train the model using X_train_dtm
print("X_train")
print(X_train)
print("y_train")
print(y_train)

print("X_test")
print(X_test)

logreg.fit(X_train, y_train)
# make class predictions for X_test_dtm
y_pred_class = logreg.predict(X_test)
print("y_pred_class")
print(y_pred_class)

代码输出如下:

X_train
   NegativeScore  NeutralScore  PositiveScore
0           0.25          0.00           0.00
1           0.00          0.12           0.00
2           0.00          0.00           0.19
3           0.00          0.00           0.43
y_train
['Negative' 'Others' 'Others' 'Others']
X_test
   NegativeScore  NeutralScore  PositiveScore
0           0.25          0.00           0.00
1           0.00          0.28           0.00
2           0.00          0.00           0.20
3           0.00          0.00           0.30
4           0.00          0.00           0.11
y_pred_class
['Others' 'Others' 'Others' 'Others' 'Others']

y_pred_class 中的第一个值应该是“Negative”。

为什么不能准确预测 Negative 记录? 在这种情况下我是否应该使用其他模型来获得 结果正确吗?

【问题讨论】:

无法理解为什么这个问题得到了 -1?需要改变什么? 【参考方案1】:

只需添加更多带有“否定”标签的训练案例。逻辑回归不能从一个训练案例进行逻辑推断(它不像孩子那样学习),它需要更多的训练案例,越多越好。 您可以逐步添加训练案例,每次使用 logreg.predict_proba(X_test) 来查看概率如何变化。再添加两个或三个案例可能就足够了,您的模型就可以正常工作了。

【讨论】:

以上是关于使用 scikit-learn python 的逻辑回归输出不匹配的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python (scikit-learn) 计算 FactorAnalysis 分数?

将 PMML 模型导入 Python (Scikit-learn)

python 使用scikit-learn框架来分类

python 使用scikit-learn进行文档分类

python机器学习——使用scikit-learn训练感知机模型

在 scikit-learn 中使用 python 生成器 [关闭]