【发布时间】:2020-09-22 08:07:13
【问题描述】:
我正在尝试使用如下数据训练逻辑回归模型: 分类变量:0 或 1 数值变量:8到20之间的连续数
我有 20 个数值变量,我想一次只使用一个用于预测模型,看看哪个是最好的特征。
我使用的代码是:
for variable in numerical_variable:
X = data[[variable ]]
y = data[categorical_variable]
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.20,random_state=0)
logreg = LogisticRegression()
logreg.fit(X_train, y_train)
y_pred=logreg.predict(X_test)
print(y_pred)
cnf_matrix = metrics.confusion_matrix(y_test, y_pred)
print("Accuracy:", metrics.accuracy_score(y_test, y_pred))
print("Precision:", metrics.precision_score(y_test, y_pred))
print("Recall:", metrics.recall_score(y_test, y_pred))
分类变量偏向1,大约有800个1到200个0。所以我认为这就是为什么它总是预测一个,不管测试样本(如果我不设置 random_state=0)和数值变量。 (使用python 3)
关于如何解决此问题的任何想法?
谢谢
【问题讨论】:
-
您尝试过不同的采样方法吗?我会尝试 SRS 和其他方法。您的输入数据肯定看起来有偏差,但这应该没什么大不了的,因为 logR 应该从每个实体的属性中学习,而不是从数据集的元数据中学习。问题似乎出在 imo 输入层。
-
谢谢,我会看看这个 - 我也尝试过使用 logreg =logisticRegression(class_weight = 'balanced') 这有帮助,现在有时也会预测到 0。与一切都是 1 时的准确度相似。
-
很明显,该模型没有足够的数据来声明为 0(由于样本量小)。因为梯度下降总是试图最小化误差,所以您的模型说最好将所有内容猜测为 1,而不是给某些实体 0,因为它会降低整体准确度。这有意义吗?
-
是的,这是有道理的,那么您是否仍然建议使用 SRS 和其他采样方法?
-
好吧,您受到数据的限制。除非您有更多为 0 的样本,否则您将无能为力。但是,是的,不同的采样方法肯定会超过这个错误。
标签: python python-3.x scikit-learn logistic-regression prediction