随机森林分析共享单车的需求

随机森林相关API:

import sklearn.ensemble as se
# 随机森林回归模型	(属于集合算法的一种)
# max_depth:决策树最大深度10
# n_estimators:构建1000棵决策树,训练模型
# min_samples_split: 子表中最小样本数 若小于这个数字,则不再继续向下拆分
model = se.RandomForestRegressor(max_depth=10, n_estimators=1000, min_samples_split=2)

案例:分析共享单车的需求,从而判断如何进行共享单车的投放。

共享单车部分数据如下
倒数第二和第三列分别是游客和注册用户的使用量,最后一列是游客+注册用户的使用量,我直接预测的是最后一列的数据
在这里插入图片描述在这里插入图片描述

import numpy as np
import sklearn.utils as su
import sklearn.ensemble as se
import sklearn.metrics as sm
import matplotlib.pyplot as mp

data = np.loadtxt('../data/bike_day.csv', unpack=False, dtype='U20', delimiter=',')
day_headers = data[0, 2:13]
x = np.array(data[1:, 2:13], dtype=float)
y = np.array(data[1:, -1], dtype=float)

x, y = su.shuffle(x, y, random_state=7)
print(x.shape, y.shape)
#(731, 11) (731,)
train_size = int(len(x) * 0.9)
train_x, test_x, train_y, test_y = \
    x[:train_size], x[train_size:], y[:train_size], y[train_size:]
# 随机森林回归器
model = se.RandomForestRegressor( max_depth=10, n_estimators=1000, min_samples_split=2)
model.fit(train_x, train_y)
# 基于“天”数据集的特征重要性
fi_dy = model.feature_importances_
pred_test_y = model.predict(test_x)
print(sm.r2_score(test_y, pred_test_y))
##0.892898964206058

data = np.loadtxt('../data/bike_hour.csv', unpack=False, dtype='U20', delimiter=',')
hour_headers = data[0, 2:13]
x = np.array(data[1:, 2:13], dtype=float)
y = np.array(data[1:, -1], dtype=float)
x, y = su.shuffle(x, y, random_state=7)
train_size = int(len(x) * 0.9)
train_x, test_x, train_y, test_y = \
    x[:train_size], x[train_size:], \
    y[:train_size], y[train_size:]
# 随机森林回归器
model = se.RandomForestRegressor(
    max_depth=10, n_estimators=1000,
    min_samples_split=2)
model.fit(train_x, train_y)
# 基于“小时”数据集的特征重要性
fi_hr = model.feature_importances_
pred_test_y = model.predict(test_x)
print(sm.r2_score(test_y, pred_test_y))
#0.91879221816765

画图显示两组样本数据的特征重要性:

mp.figure('Bike', facecolor='lightgray')
mp.subplot(211)
mp.title('Day', fontsize=16)
mp.ylabel('Importance', fontsize=12)
mp.tick_params(labelsize=10)
mp.grid(axis='y', linestyle=':')
sorted_indices = fi_dy.argsort()[::-1]
pos = np.arange(sorted_indices.size)
mp.bar(pos, fi_dy[sorted_indices], facecolor='deepskyblue', edgecolor='steelblue')
mp.xticks(pos, day_headers[sorted_indices], rotation=30)

mp.subplot(212)
mp.title('Hour', fontsize=16)
mp.ylabel('Importance', fontsize=12)
mp.tick_params(labelsize=10)
mp.grid(axis='y', linestyle=':')
sorted_indices = fi_hr.argsort()[::-1]
pos = np.arange(sorted_indices.size)
mp.bar(pos, fi_hr[sorted_indices], facecolor='lightcoral', edgecolor='indianred')
mp.xticks(pos, hour_headers[sorted_indices], rotation=30)
mp.tight_layout()
mp.show()

在这里插入图片描述

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
SVM(支持向量机)和随机森林都是常用的机器学习算法,可以用于共享单车预测问题。下面将解释如何将它们结合使用。 SVM是一种监督学习算法,可以用于分类和回归问题。它通过寻找一个最佳的分割超平面来将不同类别的样本区分开。在共享单车预测中,我们可以使用SVM来预测某一时刻内的租车总量。我们可以将时间、天气、季节等因素作为特征,然后使用SVM进行训练,得到一个预测模型。 然而,SVM并不擅长处理非线性问题,而共享单车预测问题常常涉及各种复杂的非线性关系。因此,我们可以引入随机森林算法来增强预测性能。随机森林是一种集成学习方法,由多个决策树组成。每个决策树都是基于随机选择的样本和特征训练的。在共享单车预测中,随机森林可以通过对不同的特征和样本进行随机选择和组合来捕捉更多的非线性关系,提高预测的准确性。 具体地,我们可以首先使用SVM对数据进行初步预测,在得到的预测结果的基础上再使用随机森林进行进一步的预测。这样可以利用SVM对线性关系的建模能力,同时通过随机森林的非线性特性,捕捉更多复杂的影响因素。最后,我们可以将两者的预测结果进行加权融合,得到最终的共享单车预测结果。 总之,将SVM与随机森林结合使用可以有效提高共享单车预测的准确性和稳定性。通过SVM的线性建模能力和随机森林的非线性特性,我们可以更好地处理共享单车预测问题中的各种复杂关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值