ZBLOG

% 读取数据 data1= readtable('kz_1.xlsx'); data2=readtable('Theta_1.xlsx'); % 分割自变量和目标变量 X = data1{:, 1:end}; y = data2{:, 1:end}; % 划分训练集和测试集索引 c = cvpartition(size(X, 1), 'HoldOut', 0.3); trainIdx = training(c); testIdx = test(c); % 根据索引获取训练集和测试集 ...

您提供的代码存在一处错误,即在计算MSE和R-squared之后,重新定义了y_test变量。这可能导致与后续评估操作不匹配。请将以下行删除或注释掉:

y_test = y(testIdx);

修正后的代码如下所示:

% 读取数据
data1 = readtable('kz_1.xlsx');
data2 = readtable('Theta_1.xlsx');

% 分割自变量和目标变量
X = data1{:, 1:end};
y = data2{:, 1:end};

% 划分训练集和测试集索引
c = cvpartition(size(X, 1), 'HoldOut', 0.3);
trainIdx = training(c);
testIdx = test(c);

% 根据索引获取训练集和测试集
X_train = X(trainIdx, :);
y_train = y(trainIdx);
X_test = X(testIdx, :);
y_test = y(testIdx);

% 确认划分结果是否正确
disp(size(X_train)); % 显示训练集特征矩阵的大小
disp(size(y_train)); % 显示训练集目标向量的大小
disp(size(X_test)); % 显示测试集特征矩阵的大小
disp(size(y_test)); % 显示测试集目标向量的大小

% 接下来,可以在训练集上拟合模型,并在测试集上进行评估等操作。

% 训练模型
n_estimators = 100;
rf = TreeBagger(n_estimators, X_train, y_train);

% 预测结果
y_pred = predict(rf, X_test);

% 转换预测结果格式为double类型
y_pred = str2double(y_pred);

% 计算MSE和R-squared
mse = mean((y_test - y_pred).^2);
r2 = 1 - sum((y_test - y_pred).^2) / sum((y_test - mean(y_test)).^2);

% 输出模型评估结果和目标方程
disp(['MSE: ', num2str(mse)]);
disp(['R-squared: ', num2str(r2)]);

% 输出目标方程系数
rf.OOBPredictorImportance = 'on';
feature_importance = rf.OOBPermutedPredictorDeltaError;
feature_names = data1.Properties.VariableNames(2:end)';
[~, sorted_idx] = sort(feature_importance);

fprintf('目标方程:\n');
for i = sorted_idx'
    fprintf('%f * %s +\n', feature_importance(i), char(feature_names(i)));
end

% 绘制特征重要性条形图
figure;
barh(feature_importance(sorted_idx));
set(gca, 'YTick', 1:length(feature_importance), 'YTickLabel', feature_names(sorted_idx), 'FontSize', 5);
xlabel('特征重要性');
ylabel('特征名称');
title('随机森林回归特征重要性');
saveas(gcf, '随机森林回归特征重要性.png');

请注意,此代码假设您已经安装了相关的工具箱和函数库,并且确保文件路径正确。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=4166

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?