Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 逻辑回归预测所有样本为1_Python_Python 3.x_Scikit Learn_Logistic Regression_Prediction - Fatal编程技术网

Python 逻辑回归预测所有样本为1

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_

我试图用以下数据训练逻辑回归模型: 分类变量: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)

有没有关于如何解决这个问题的想法


谢谢

使用
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有什么帮助。我完全误解了你的问题,以为你想总是采用相同的预测(没有不同的随机性),但如果你找到了问题的解决方案,那没关系