基于MATLAB实现的随机森林算法对共享单车签入签出数量进行预测

1. 数据准备

假设你有一个CSV文件 bike_data.csv,包含以下列:

  • station_id:站点编号
  • timestamp:时间戳
  • temperature:温度
  • humidity:湿度
  • windspeed:风速
  • is_holiday:是否为节假日(0或1)
  • hour:小时
  • weekday:星期几(0-6)
  • check_in_cnt:签入数量
  • check_out_cnt:签出数量

2. 读取数据并预处理

% 读取数据
data = readtable('bike_data.csv');

% 将时间戳转换为日期时间格式
data.timestamp = datetime(data.timestamp, 'InputFormat', 'yyyy-MM-dd HH:mm:ss');

% 提取时间特征
data.hour = hour(data.timestamp);
data.weekday = weekday(data.timestamp) - 1; % MATLAB中weekday返回1-7,调整为0-6

% 删除无关列
data = rmmissing(data); % 删除缺失值
data = data(:, {'temperature', 'humidity', 'windspeed', 'is_holiday', 'hour', 'weekday', 'check_in_cnt', 'check_out_cnt'});

% 将签入签出数量作为目标变量
Y = data(:, {'check_in_cnt', 'check_out_cnt'});
X = data(:, 1:end-2); % 剩下的作为特征

3. 划分训练集和测试集

% 划分训练集和测试集
cv = cvpartition(height(data), 'HoldOut', 0.2);
X_train = X(training(cv), :);
Y_train = Y(training(cv), :);
X_test = X(test(cv), :);
Y_test = Y(test(cv), :);

4. 训练随机森林模型

% 训练随机森林模型
numTrees = 100; % 随机森林中树的数量
rfModel = TreeBagger(numTrees, X_train, Y_train, 'Method', 'regression', 'OOBPrediction', 'On', 'OOBVarImp', 'On');

% 显示模型的OOB误差
figure;
plot(rfModel.OOBError);
title('OOB Error');
xlabel('Number of Trees');
ylabel('OOB Error');

5. 进行预测

% 使用训练好的模型进行预测
Y_pred = predict(rfModel, X_test);

% 计算预测结果的均方误差
mse_in = mean((Y_pred(:, 1) - Y_test.check_in_cnt).^2);
mse_out = mean((Y_pred(:, 2) - Y_test.check_out_cnt).^2);
fprintf('签入数量的均方误差: %.2f\n', mse_in);
fprintf('签出数量的均方误差: %.2f\n', mse_out);

6. 特征重要性分析

% 特征重要性
figure;
bar(rfModel.OOBPermutedPredictorDeltaError);
set(gca, 'XTickLabel', X.Properties.VariableNames);
title('特征重要性');
xlabel('特征');
ylabel('重要性');

7. 可视化预测结果

% 可视化签入数量的预测结果
figure;
plot(Y_test.check_in_cnt, 'b');
hold on;
plot(Y_pred(:, 1), 'r');
legend('真实签入数量', '预测签入数量');
title('签入数量预测');
xlabel('样本索引');
ylabel('数量');

% 可视化签出数量的预测结果
figure;
plot(Y_test.check_out_cnt, 'b');
hold on;
plot(Y_pred(:, 2), 'r');
legend('真实签出数量', '预测签出数量');
title('签出数量预测');
xlabel('样本索引');
ylabel('数量');

参考模型 运用随机森林算法,对共享单车的签入签出数量进行预测 youwenfan.com/contentcnc/84858.html

8. 模型优化

  • 调整参数:可以通过调整随机森林中的树的数量(numTrees)、最大树深度(MaxNumSplits)等参数来优化模型性能。
  • 特征工程:进一步优化特征,例如添加更多天气特征、时间特征等。
  • 超参数调优:使用网格搜索等方法对随机森林的超参数进行调优。
posted @ 2025-08-12 16:08  u95900090  阅读(25)  评论(0)    收藏  举报