使用DecisionTreeRegressor报ValueError:模型与输入特征数量不匹配
问题原因排查
ValueError: Number of features of the model must match the input. Model n_features is 5 and input n_features is 1.
该报错由模型训练特征维度与预测输入特征维度不匹配导致:
- 训练阶段:你用
X = df.drop(columns=['CLASS'])提取训练特征,最终X包含5个特征列,模型学习时默认要求后续所有预测输入的样本都必须携带5个特征 - 预测阶段:你定义的
X_test = [[34],[62],[96],[30],[1]]是5个样本的集合,每个样本仅包含1个特征,和训练要求的5个特征维度不符,触发报错。
解决方案
根据你的实际需求二选一即可:
方案1:仅用单特征训练+预测
如果你本来就是要只用1个特征做模型训练,修改训练阶段的特征提取逻辑即可,示例如下(假设你要用的特征列名为feature_col,替换为你实际的列名即可):
import pandas as pd from sklearn.tree import DecisionTreeRegressor df = pd.read_csv("/content/Data.csv") y = df['CLASS'] # 仅提取指定的1个特征作为训练输入,两层方括号保证输出为二维结构 X = df[['feature_col']] my_tree = DecisionTreeRegressor() my_tree.fit(X,y) # 此时你的X_test结构符合要求,可以正常预测 X_test = [[34],[62],[96],[30],[1]] y_pred = my_tree.predict(X_test) print(y_pred)
方案2:预测1个携带5个特征的样本
如果你本来是要预测1个特征值分别为34、62、96、30、1的样本,仅修改X_test的结构即可:
import pandas as pd from sklearn.tree import DecisionTreeRegressor df = pd.read_csv("/content/Data.csv") y = df['CLASS'] X = df.drop(columns=['CLASS']) my_tree = DecisionTreeRegressor() my_tree.fit(X,y) # 调整为1个样本、5个特征的二维结构,和训练维度对齐 X_test = [[34,62,96,30,1]] y_pred = my_tree.predict(X_test) print(y_pred)
内容的提问来源于stack exchange,提问作者Ngoc Quy Nguyen
相关产品推荐
相关产品推荐

