Python 逻辑回归预测所有样本为1
我试图用以下数据训练逻辑回归模型: 分类变量:0或1 数值变量:8到20之间的连续数 我有20个数值变量,我想一次只使用一个用于预测模型,看看哪一个是最好的特性 我使用的代码是:Python 逻辑回归预测所有样本为1,python,python-3.x,scikit-learn,logistic-regression,prediction,Python,Python 3.x,Scikit Learn,Logistic Regression,Prediction,我试图用以下数据训练逻辑回归模型: 分类变量: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_
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)
有没有关于如何解决这个问题的想法
谢谢使用
joblib
库保存您的模型
import joblib
your_model = LogisticRegression()
your_model.fit(X_train, y_train)
filename = 'finalized_model.sav'
joblib.dump(your_model, filename)
此代码将您的模型保存为“finalized_model.sav”。扩展并不重要,即使你不写
然后,您可以通过此代码调用精确且固定的模型,以便始终进行相同的预测
your_loaded_model = joblib.load('finalized_model.sav')
作为预测示例
your_loaded_model.predict(X_test)
你试过不同的抽样方法吗?我会尝试SRS和其他方法。您的输入数据显然是倾斜的,但这不应该是什么大问题,因为logR应该从每个实体的属性中学习,而不是从数据集的元数据中学习。问题似乎出在imo的输入层。谢谢,我会看看这个-我也尝试过使用logreg=logisticRegression(class_weight='balanced'),这很有帮助,现在0有时也会被预测。与一切为1时的精度相似。显然,模型没有足够的数据将某个值声明为0(由于样本量较小)。因为梯度下降总是试图最小化误差,所以你的模型说,最好把所有东西都猜测为1,而不是给一些实体0,因为这会降低它的整体精度。这有意义吗?是的,有意义,那么你建议仍然使用SRS和其他采样方法吗?嗯,你受到数据的限制。除非您有更多的样本为0,否则您将无法完成很多工作。但是,是的,不同的采样方法肯定会超过这个误差。我不明白这对预测总是1有什么帮助。我完全误解了你的问题,以为你想总是采用相同的预测(没有不同的随机性),但如果你找到了问题的解决方案,那没关系