Machine learning LogisticRegressionCV错误地预测标签
我有4个连续变量x_1到x_4,通过原始数据的最小-最大缩放,每个变量分布在[0,1]范围内。我使用LogisticRegression预测类的标签为“1”或“0” 什么不起作用?嗯,我的逻辑回归是预测所有分类为“1”型 剥离=分层剥离剥离=1,测试大小=0.2,随机状态=0 对于序列指数,在split.split数值指数数据中测试指数,y: x_列=数值数据[列指数] y_列=y[列索引] x_检验=数值数据[检验指数] y_检验=y[检验指数] reg=逻辑回归 reg.fitx\U列车,y\U列车 y_pred=reg.predictx_测试 打印分类报告,不支持测试 我有以下问题 LogisticReturnal是这项工作的合适工具吗?因为它可以很好地处理一个热编码数据。 它处理连续数据吗?我想是的。 我是否为LogisticReturnal设置了任何参数不正确?你能推荐更好或更整洁的吗? 最后,我做错什么了吗? 输出Machine learning LogisticRegressionCV错误地预测标签,machine-learning,scikit-learn,classification,logistic-regression,Machine Learning,Scikit Learn,Classification,Logistic Regression,我有4个连续变量x_1到x_4,通过原始数据的最小-最大缩放,每个变量分布在[0,1]范围内。我使用LogisticRegression预测类的标签为“1”或“0” 什么不起作用?嗯,我的逻辑回归是预测所有分类为“1”型 剥离=分层剥离剥离=1,测试大小=0.2,随机状态=0 对于序列指数,在split.split数值指数数据中测试指数,y: x_列=数值数据[列指数] y_列=y[列索引] x_检验=数值数据[检验指数] y_检验=y[检验指数] reg=逻辑回归 reg.fitx\U列车,y
precision recall f1-score
0 0.00 0.00 0.00
1 0.90 1.00 0.95
accuracy 0.90
macro avg 0.45 0.50 0.47
weighted avg 0.80 0.90 0.85
UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.
_warn_prf(average, modifier, msg_start, len(result))
带有逻辑回归的SMOTE代码
os=SMOTErandom\u状态=0
x_序列,x_测试,y_序列,y_测试=序列测试数据,y,测试大小=0.2,随机状态=0
os_data_x,os_data_y=os.fit_samplex_train,y_train
os_data_X=pd.DataFramedata=os_data_X,列=['x1',x2',x3',x4']
os_data_Y=pd.DataFramedata=os_data_Y,列=['Y']
x_序列,x_测试,y_序列,y_测试=序列测试分割数据,os_数据,y.values.ravel,测试大小=0.2,随机状态=0
reg.fitx\U列车,y\U列车
y_pred=reg.predictx_测试
打印分类报告,不支持测试
您的数据似乎不平衡,从精度召回表中我们可以看到,类别1占您总数据的近90%。有多种方法可以解决类不平衡问题,您可以参考此了解详细的解决方案 解决这一问题的一个快速解决方案是向模型中添加类权重。目前,代码中的默认值为“无”,这基本上意味着当模型在预测类0而不是类1时,对模型的惩罚更大。首先,可以将“类权重”值从“无”更改为“平衡”,并查看其执行情况 但同时你应该注意,增加类权重也会对类1的性能产生影响,这基本上是一个你需要权衡的问题
希望这有帮助 你的建议确实很有帮助。在我看到你的评论之前,我发现LogisticRegressionCV表现不佳的原因不仅仅是数据不平衡,还有更多。我甚至试着增加班级权重,但没有多大帮助。我尝试了其他分类器,如SVM和感知器,但性能同样糟糕。最后,我做了一个技巧:1对相同数量的“好”标签进行采样,2对现有数据进行随机调整,对“坏”标签进行过采样。我很高兴看到一个叫Nitish Shukla的人也有同样的想法,并且有一篇关于它的研究论文。还有一种叫做SMOTE的技术,你可能会感兴趣去探索。我编辑了原始帖子,并为SMOTE添加了分类报告,其设置与LogisticRegressionCV相同。我非常感谢您帮助我理解这份报告并提出进一步的改进建议。我还有一个问题,如果我有一个不平衡的数据集,那么我是否应该不做分层hufflesplit?相反,我应该洗牌并做K折叠,但确保没有分层,对吗?我将单独尝试KFold,重点关注标签“0”或坏人的召回分数。据我所知,“StratifiedShuffleSplit”在这种情况下比KFold更适用,原因是,当您仅使用KFold时,可能会出现这样的情况,即您的一些数据折叠可能只包含来自多数类的样本,并且如果您要将一个模型与此数据折叠相匹配,那么这是没有意义的。而分层SHUFLFLESPLIT将确保所有折叠的数据中都包含类,并且经过训练的模型将更有意义。
SMOTE + same settings for LogisticRegressionCV
precision recall f1-score
0 0.63 0.73 0.67
1 0.68 0.57 0.62
accuracy 0.65
macro avg 0.65 0.65 0.65
weighted avg 0.65 0.65 0.65
Accuracy of classifier on test set: 0.71
precision recall f1-score
0 0.14 0.70 0.24
1 0.95 0.57 0.71
accuracy 0.58
macro avg 0.55 0.63 0.47
weighted avg 0.87 0.58 0.67