使用Sklearn决策树回归器计算单样本指标时遇样本数不一致错误
解决Sklearn决策树回归器单样本MSE计算的维度不匹配问题
问题根源
你调用mean_squared_error(Y, y_prediction)时,参数维度不匹配:
Y是训练集的真实标签(共303行)y_prediction是单个测试样本的预测结果(仅1行)
MSE要求真实值与预测值的样本数量完全对应,因此触发"Found input variables with inconsistent number of samples"错误。
修复方案
方案1:使用测试样本对应的真实标签计算MSE
如果你的测试集(Heart_test.csv)包含该样本的真实心脏病发作概率标签,直接提取对应标签与预测值计算MSE:
import pandas as pd from sklearn import tree from sklearn.metrics import mean_squared_error # 读取数据 heart = pd.read_csv('heart.csv') test_data = pd.read_csv('Heart_test.csv') # 拆分训练集特征与标签(用一维Series避免维度问题) X_train = heart.iloc[:, 0:13] Y_train = heart.iloc[:, 13] # 拆分测试集特征与真实标签 X_test = test_data.iloc[:, 0:13] Y_test = test_data.iloc[:, 13] # 假设第14列为测试样本的真实标签 # 训练模型 model = tree.DecisionTreeRegressor() model.fit(X_train, Y_train) # 预测并计算MSE y_pred = model.predict(X_test) print(mean_squared_error(Y_test, y_pred))
方案2:无真实标签时的处理
如果没有测试样本的真实标签,可直接输出预测结果;若一定要计算MSE,需构造与预测值长度一致的真实值(比如已知的样本真实概率):
import pandas as pd from sklearn import tree from sklearn.metrics import mean_squared_error heart = pd.read_csv('heart.csv') test = pd.read_csv('Heart_test.csv') X_train = heart.iloc[:, 0:13] Y_train = heart.iloc[:, 13] X_test = test.iloc[:, 0:13] model = tree.DecisionTreeRegressor() model.fit(X_train, Y_train) y_pred = model.predict(X_test) # 直接输出预测结果 print("单样本预测概率:", y_pred[0]) # 构造真实值计算MSE(替换为实际真实值) true_value = [0.6] # 示例:假设该样本真实发作概率为0.6 print("MSE:", mean_squared_error(true_value, y_pred))
关键注意事项
- 训练模型时,标签建议用一维
Series(heart.iloc[:,13])而非二维DataFrame(heart.iloc[:,13:14]),减少维度兼容问题。 - 所有评估指标(包括MSE)的核心要求:真实值数组与预测值数组的形状、样本数必须完全匹配。
内容的提问来源于stack exchange,提问作者ThickNicc
相关产品推荐
相关产品推荐

