多分类Logistic Regression做最短路径预测时one-hot标签报错如何解决
问题解决方法
首先明确报错核心:scikit-learn中的多分类逻辑回归、SVM等分类器,默认要求输入的标签y为一维类别数组,你当前使用的是形状为(50,3)的独热编码二维标签,因此触发格式不匹配报错。另外你原代码中仅传入newy_train[:,0]作为标签,相当于把问题简化为「第0条路径是否为最短路径」的二分类任务,自然无法适配三分类需求。
第一步:转换独热编码标签为一维类别标签
你生成的newy_train每行仅对应一个位置为1,分别对应第0、1、2类(对应三条路径中的最短路径),直接按行取最大值的索引即可完成转换:
# 独热编码转一维类别标签,输出形状为(50,) y_train_label = newy_train.argmax(axis=1) # 测试集标签如果也是独热格式,同理转换 y_test_label = newy_test.argmax(axis=1)
第二步:调整多分类模型训练代码
无需修改分类器的初始化参数,直接传入转换后的一维标签即可完成三分类训练:
from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, confusion_matrix # 初始化多分类逻辑回归 LogReg = LogisticRegression(solver = 'lbfgs', multi_class = 'multinomial') # 传入训练特征和转换后的一维标签 LogReg.fit(newx_train, y_train_label) # 预测 ylog_pred = LogReg.predict(newx_test) # 计算准确率和混淆矩阵 print("模型准确率:", accuracy_score(y_test_label, ylog_pred)) print("混淆矩阵:\n", confusion_matrix(y_test_label, ylog_pred))
其他说明
如果后续要训练SVM多分类模型,标签处理逻辑完全一致,直接使用转换后的一维类别标签即可,无需额外调整标签格式。
内容的提问来源于stack exchange,提问作者Parlielion
相关产品推荐
相关产品推荐

