scikit-learn逻辑回归无法拟合object类型目标变量问题求助
scikit-learn逻辑回归目标变量类型问题解析
核心结论
scikit-learn的LogisticRegression不能直接使用未明确分类的object类型作为目标变量,但并非完全不支持分类类型标签——只要将object类型转换为sklearn可识别的分类格式,就能既完成训练,又输出原始分类类型的预测结果。
报错原因
你触发的ValueError: Unknown label type: 'unknown',是因为当目标变量为pandas的object类型时,sklearn的check_classification_targets函数无法自动判定这是合法的分类标签。常见诱因包括:
- object列中存在混合数据类型(如同时包含字符串和数值)
- 列中包含非离散的连续值(但从业务场景看你的情况应该是离散分类)
- 列的类型标记为object,但实际内容无法被识别为分类任务的标签
可行解决方案(满足分类结果输出需求)
方案1:将object列转为pandas分类类型
直接把目标列转为category类型,sklearn可识别该类型,且训练后预测结果直接输出原始分类值:
import pandas as pd from sklearn.linear_model import LogisticRegression # 转换目标变量为分类类型 df['Interest_Rate_New'] = df['Interest_Rate_New'].astype('category') # 拟合模型 model = LogisticRegression() model.fit(df[['Loan_Amount_Requested','Debt_To_Income']], df['Interest_Rate_New']) # 预测输出原始分类值 predictions = model.predict(df[['Loan_Amount_Requested','Debt_To_Income']])
方案2:用LabelEncoder编码+逆映射还原
先将分类值转为整数编码训练,预测后再映射回原始分类标签:
from sklearn.preprocessing import LabelEncoder from sklearn.linear_model import LogisticRegression le = LabelEncoder() # 转换为整数编码 y_encoded = le.fit_transform(df['Interest_Rate_New']) # 训练模型 model = LogisticRegression() model.fit(df[['Loan_Amount_Requested','Debt_To_Income']], y_encoded) # 预测后还原为原始分类值 predictions_encoded = model.predict(df[['Loan_Amount_Requested','Debt_To_Income']]) predictions = le.inverse_transform(predictions_encoded)
关键注意点
- 确保目标列的所有值都是离散的分类值,无缺失值或异常数据类型,否则转换分类类型时会失败
- 如果
Interest_Rate_New是连续数值(如浮点利率),逻辑回归不适用,应改用线性回归模型
内容的提问来源于stack exchange,提问作者Onimus Ragnarok
相关产品推荐
相关产品推荐

