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

ELM回归模型K折交叉验证出现矩阵形状不匹配报错如何解决

报错原因

你遇到的维度不匹配报错,根源是两处核心逻辑错误:

  • 混淆了数据索引和实际数据/标签:计算隐层输出、输出权重、预测时,你传入的是train_folds_idx/valid_folds_idx这两个存储样本索引的列表,而非索引对应的特征数据X、标签数据y;且ELM的输出权重需要用训练集隐层输出的伪逆乘训练集标签y,而非验证集索引。
  • K折交叉验证逻辑错误:K折需要逐折遍历训练验证,你没有写循环逻辑,直接把5折的全部索引整体传入计算,自然维度不匹配。

报错的直接触发点:你将shape为(5,640)的折索引列表传入hidden_nodes和input_weights(shape为(特征数,26))做矩阵乘法,矩阵运算要求前一个矩阵的列数等于后一个矩阵的行数,640≠26因此触发报错。


修正后的完整代码
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import KFold
from numpy.linalg import pinv
from sklearn.metrics import mean_squared_error # 可自行替换为需要的评估指标

# 读取数据集
dataset = pd.read_excel("ss.xls")
X = dataset.iloc[:,:-1].values
y = dataset.iloc[:,-1:].values

# 特征归一化
scaler = MinMaxScaler()
X = scaler.fit_transform(X)

# K折交叉验证参数设置
kfolds = KFold(n_splits=5, random_state=16, shuffle=False)  

# ELM模型参数设置
input_size = X.shape[1]
hidden_size = 26
# ELM输入层权重和偏置仅需随机初始化一次,无需迭代更新
input_weights = np.random.normal(size=[input_size, hidden_size])
biases = np.random.normal(size=[hidden_size])

# 激活函数
def relu(x):
    return np.maximum(x, 0, x)

# 隐层输出计算
def hidden_nodes(X):
    G = np.dot(X, input_weights)
    G = G + biases
    H = relu(G)
    return H

# 预测函数
def predict(X, output_weights):
    out = hidden_nodes(X)
    out = np.dot(out, output_weights)
    return out

# 逐折训练验证
fold_metrics = []
for fold, (train_idx, valid_idx) in enumerate(kfolds.split(X)):
    # 按索引提取当前折的训练、验证数据
    X_train, X_valid = X[train_idx], X[valid_idx]
    y_train, y_valid = y[train_idx], y[valid_idx]
    
    # 计算当前折的输出权重
    H_train = hidden_nodes(X_train)
    output_weights = np.dot(pinv(H_train), y_train)
    
    # 预测并计算评估指标
    y_pred = predict(X_valid, output_weights)
    mse = mean_squared_error(y_valid, y_pred)
    fold_metrics.append(mse)
    print(f"第{fold+1}折验证MSE:{mse:.4f}")

# 输出5折交叉验证平均结果
print(f"5折交叉验证平均MSE:{np.mean(fold_metrics):.4f}")

修改说明
  • 补全了缺失的依赖库导入,将X和y转为numpy数组方便索引取值
  • 增加了K折逐折遍历逻辑,每轮按索引取对应训练、验证数据
  • 修正了输出权重的计算逻辑,用训练集隐层输出的伪逆乘训练集标签得到输出权重
  • 预测时传入的是验证集特征数据而非索引,符合模型输入要求

内容的提问来源于stack exchange,提问作者sera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:54:02