回归预测2:机器学习处理共享单车数据集


我们使用随机森林处理共享单车回归模型,主要包含:数据集划分,建立日期特征,对缺失值进行填补。

1 模型1:baseline

我们只使用最基础的模型,不做任何处理

import numpy as np
import pandas as pd
from datetime import datetime
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
np.random.seed(123)

1.1 导入数据,划分特征-标签,划分训练集-测试集

data = pd.read_csv("train.csv")
x = data[["season", "holiday", "workingday", "weather", "temp", "atemp","humidity","windspeed"]]
y = data["count"]
X_train, X_test, y_train, y_test = train_test_split(x, y, 
                                                    train_size=0.7, 
                                                    shuffle=False)

1.2 使用随机森林训练和验证模型

rf = RandomForestRegressor(n_estimators=100)
rf.fit(X_train, y_train)
y_pred = rf.predict(X_test)
print("mse:{}".format(mean_squared_error(y_test, y_pred)))  
## mse:43578.72115559897

2 模型2:增加时间维度特征

在本节,我们从新读取数据,并且将时间维度进行拆分,拆分为:年,月,小时,星期。

2.1 数据读取,特征处理

data = pd.read_csv("train.csv")
data["date"] = data.datetime.apply(lambda x: x.split()[0])
data["hour"] = data.datetime.apply(lambda x: x.split()[1].split(":")[0]).astype("int")
data["year"] = data.datetime.apply(lambda x: x.split()[0].split("-")[0])
data["weekday"] = data.date.apply(lambda dateString: datetime.strptime(dateString, "%Y-%m-%d").weekday())
data["month"] = data.date.apply(lambda dateString: datetime.strptime(dateString, "%Y-%m-%d").month)
x = data[["hour","year","weekday","month","season", "holiday", "workingday", "weather", "temp", "atemp","humidity","windspeed"]]
y = data["count"]
X_train, X_test, y_train, y_test = train_test_split(x, y, 
                                                    train_size=0.7, 
                                                    shuffle=False)  

2.2 使用随机森林训练和验证模型

rf = RandomForestRegressor(n_estimators=100,random_state=123)
rf.fit(X_train, y_train)
y_pred = rf.predict(X_test)
print("mse:{}".format(mean_squared_error(y_test, y_pred)))
## mse:5866.200720560327

通过结果,我们发现在使用了时间维度特征,效果提升很多。

3 模型3:对weedspeed进行填补

通过数据分析,我们发现weedspeed这一列有好多0值,所以,我们使用算法对其进行插补。我们将数据拆分为训练集、测试集,并且挑选出来一部分特征作为特征值,选出weedspeed这一列作为预测值。

3.1 导入数据,增加时间维度

data = pd.read_csv("train.csv")
data["date"] = data.datetime.apply(lambda x: x.split()[0])
data["hour"] = data.datetime.apply(lambda x: x.split()[1].split(":")[0]).astype("int")
data["year"] = data.datetime.apply(lambda x: x.split()[0].split("-")[0])
data["weekday"] = data.date.apply(lambda dateString: datetime.strptime(dateString, "%Y-%m-%d").weekday())
data["month"] = data.date.apply(lambda dateString: datetime.strptime(dateString, "%Y-%m-%d").month)

3.2 使用随机森林填补windspeed这一列的缺失值

dataWind0 = data[data["windspeed"] == 0]
dataWindNot0 = data[data["windspeed"] != 0]
rfModel_wind = RandomForestRegressor()
windColumns = ["season", "weather", "humidity", "month", "temp", "year", "atemp"]
rfModel_wind.fit(dataWindNot0[windColumns], dataWindNot0["windspeed"])

wind0Values = rfModel_wind.predict(X=dataWind0[windColumns])
dataWind0["windspeed"] = wind0Values
data = dataWindNot0.append(dataWind0)
data.reset_index(inplace=True)
data.drop('index', inplace=True, axis=1)

3.3 拆分数据集

x = data[["hour","year","weekday","month","season", "holiday", "workingday", "weather", "temp", "atemp","humidity","windspeed"]]
y = data["count"]
X_train, X_test, y_train, y_test = train_test_split(x, y, 
                                                    train_size=0.7, 
                                                    shuffle=False)

3.4 使用随机森林训练和验证模型

rf = RandomForestRegressor(n_estimators=100,random_state=123)
rf.fit(X_train, y_train)
y_pred = rf.predict(X_test)
print("mse:{}".format(mean_squared_error(y_test, y_pred)))
##mse:4048.247575719535

通过实验,我们发现使用缺失值进行填补,可以提升模型的性能。

首尔自行车数据分析 R中首尔共享单车需求数据集回归分析 • 执行模型分析以预测每小时所需的自行车数量,以确保租赁自行车的稳定供应 • 使用 R、机器学习和统计建模技术 导言:数据集的背景/动机 目前,许多主要城市都引入了租赁自行车,以提高机动性、舒适性和环保交通。重要的是要让公众在适当的时候可以使用和使用租赁自行车,因为这可以缩短等待时间。最终,为城市提供稳定的租赁自行车供应是一个主要问题。有许多因素,如温度、一天中的时间、假期、季节等,可能会影响自行车的可用性。关键部分是预测每小时所需的自行车数量,以稳定租赁自行车的供应。 使用天气数据[1]的首尔自行车共享需求预测的基于规则的模型使用了两个数据集——首尔自行车和首都自行车共享计划。它给出了5个统计模型的结果,这些模型使用重复交叉验证方法用优化的超参数进行训练,并使用测试集进行评估:(a)立方体(b)正则化随机森林(c)分类和回归树(d)K近邻(e)条件推理树。使用R2、均方根误差、平均绝对误差和变异系数等多重评估指标来衡量回归模型的预测性能。结果表明,基于规则的CUBIST模型能够解释汉城自行车测试集中约95%的方差(R2)。对所有开发的模型进行了变量重要性分析,以分析最重要的变量。这些模型表明,温度和一天中的小时数是小时租赁自行车需求预测中最有影响的变量。 Cubist模型是在Quinlan的M5模型树的基础上引入的,该模型树创建了一系列“if-after-after”规则,其中每个规则都有一个相关的线性多元模型。立体主义模型的好处在于,它是一种可行的回归方法,可以应用于各种问题。 在预测自行车共享需求的回归模型[2]中,他们对汉城自行车数据集应用了回归模型,得出的值为0.567,表明线性回归能够确定56.7%的自行车租赁数量变化。研究论文指出,低R平方值的回归模型可能是非常好的模型,原因有几个,因为某些研究领域存在大量无法解释的内在差异。在这些区域,R2值必然较低。 如果一个人的R平方值较低,但自变量在统计上具有显著性,那么仍然可以得出关于变量之间关系的重要结论。正如本文所观察到的,0.56是一个相对较低的值,但统计显著性有助于更好地了解影响自行车租赁数量的因素。从数据集中提取更好的结果和模式的进一步范围包括实现高级算法,如分类树、随机森林、K近邻。 在这个项目中,我们的目标是使用统计数据来确定哪些因素导致每小时租赁自行车的最佳供应。例如,如果温度太高,能见度差,我们将供应少量的自行车,因为需求会减少。如果我们的模型成功,它将允许自行车所有者和管理者决定在任何给定时间租用的自行车数量。自行车使用者也将体验到友好舒适的服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王小葱鸭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值