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

Sklearn MLPRegressor预测特征数不匹配报错如何解决

问题原因

你遇到的特征数不匹配错误和预处理流程、数据格式转换无关,完全是代码逻辑错误导致的,核心问题有2个:

  • 代码残留了测试用的模拟数据生成逻辑:你加载完自己的自行车租赁数据集、完成特征标签拆分和数组转换后,又执行了X, y = make_regression(n_samples=200, random_state=1),这行代码直接覆盖了之前从真实数据提取的X、y变量。make_regression默认生成100个特征的模拟回归数据,你后续的MLP模型是用这组100维的模拟数据训练的,根本没有学习你自己的19维自行车租赁数据,拿19维的真实测试集预测自然会报特征数不匹配。
  • 存在变量名拼写错误:读取训练集时你赋值的变量名是train,后续拆分特征标签时写的是treino.drop(...),如果没有提前定义过treino变量,运行到这行本身就会触发NameError,属于变量名前后不一致问题。
修复方案

按照以下步骤修改代码即可解决问题:

  1. 删掉和当前任务无关的X, y = make_regression(...)模拟数据生成代码,不要让这行代码覆盖你自己加载的真实数据集变量。
  2. 统一训练集变量名,把后续引用的treino全部改成和读取时一致的train,避免变量不存在的报错。
  3. 训练验证集拆分要基于你自己的真实业务数据做,不要用模拟生成的数据。
  4. 归一化操作要遵守规范:StandardScaler只在训练集上执行fit,再用同一个scaler分别转换验证集和测试集,不要在不同数据集上单独fit,避免数据泄露。
  5. 检查测试集CSV是否包含aluguéis标签列,如果有要在预测前先删除该列,否则会导致测试集特征数多1,再次触发特征不匹配错误。
修复后可运行核心代码
import pandas as pd
import numpy as np
import math
from sklearn.neural_network import MLPRegressor
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error

# 读取预处理完成的数据集
caminho_treino = '/content/treino_tratado.csv'
train = pd.read_csv(caminho_treino)
caminho_teste = '/content/teste_tratado.csv'
test = pd.read_csv(caminho_teste)

# 拆分训练集特征与标签,修正变量名拼写问题
X = train.drop('aluguéis', axis=1)
y = train['aluguéis']

# 转换为numpy数组格式
X = X.to_numpy()
y = y.to_numpy()
# 如果测试集包含标签列,要先执行test = test.drop('aluguéis', axis=1)再转数组
test_arr = test.to_numpy()

# 基于自有数据集拆分训练、验证集
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.3, random_state=1)

# 数据归一化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_val_scaled = scaler.transform(X_val)
test_scaled = scaler.transform(test_arr)

# 模型训练
regr = MLPRegressor(
    hidden_layer_sizes=(1000,),
    activation='relu',
    solver='adam',
    alpha=0.0001,
    batch_size='auto',
    learning_rate='constant',
    learning_rate_init=0.001,
    max_iter=200,
    shuffle=True,
    random_state=1, # 固定随机种子保证结果可复现
    tol=0.0001
).fit(X_train_scaled, y_train)

# 验证集RMSE计算
val_pred = regr.predict(X_val_scaled)
val_rmse = math.sqrt(mean_squared_error(y_val, val_pred))
print(f"验证集RMSE: {val_rmse}")

# 测试集预测,此时特征维度完全匹配
test_pred = regr.predict(test_scaled)

内容的提问来源于stack exchange,提问作者Henrique Rezer Mosquér

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:12:19