You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 19:47:27