基于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)等参数来优化模型性能。 - 特征工程:进一步优化特征,例如添加更多天气特征、时间特征等。
- 超参数调优:使用网格搜索等方法对随机森林的超参数进行调优。

浙公网安备 33010602011771号