数据集下载(http://archive.ics.uci.edu/ml/datasets/Bike+Sharing+Dataset)
数据集信息:
自行车共享系统是新一代的传统自行车租赁,其中会员,租赁和退货的整个过程已经自动化。通过这些系统,用户能够从特定位置轻松地租用自行车并在另一个位置返回。目前,全世界约有500多个自行车共享计划,其中包括超过50万辆自行车。今天,由于它们在交通,环境和健康问题中的重要作用,因此对这些系统存在很大兴趣。
除了有趣的自行车共享系统的现实应用之外,这些系统产生的数据特征使它们对研究具有吸引力。与公共汽车或地铁等其他交通服务相反,旅行,出发和到达位置的持续时间明确记录在这些系统中。此功能将自行车共享系统转变为虚拟传感器网络,可用于感知城市的移动性。因此,预计通过监测这些数据可以检测到城市中的大多数重要事件。
属性信息:
hour.csv和day.csv都有以下字段,除了在day.csv中不可用的hr
import pandas as pd #pandas库
from sklearn.preprocessing import OneHotEncoder #独热编码
from sklearn.preprocessing import PolynomialFeatures #多项式扩展
from sklearn.preprocessing import StandardScaler #特征缩放(标准化)
from sklearn.model_selection import train_test_split #数据集切分
from sklearn.linear_model import LinearRegression #线性回归
from sklearn.linear_model import Ridge #岭回归
from sklearn.metrics import mean_absolute_error #平均绝对误差
# 读取数据
path = "../../datas/hour.csv"
data = pd.read_csv(path)
## 删除无用的列
data.drop(columns=['instant','dteday','casual','registered'],inplace=True)
# print(data)
## 检查哪些特征需要做独热编码
# for i in data.columns:
# print(data[i].value_counts())
## 独热编码,对需要进行独热编码的列编码
hotcoder = OneHotEncoder(sparse=False,handle_unknown='ignore')
hot = hotcoder.fit_transform(data[['season','mnth','hr','weekday','weathersit']])
hot = pd.DataFrame(hot)
# print(hot)
## 删除掉独热编码的列
data.drop(columns=['season','mnth','hr','weekday','weathersit'],inplace=True)
print(data)
## 多项式扩展
polyCoder = PolynomialFeatures(degree=3,interaction_only=False)
pcoder = polyCoder.fit_transform(data[['temp','atemp','hum','windspeed']])
pcoder = pd.DataFrame(pcoder,columns=polyCoder.get_feature_names())
print(pcoder)
## 标准化
sscoder = StandardScaler()
scoder = sscoder.fit_transform(pcoder)
scoder = pd.DataFrame(scoder,columns=pf.get_feature_names())
print(scoder)
## 删除掉标准化的列
data.drop(columns=['temp','atemp','hum','windspeed'],inplace=True)
# print(data)
## 合并
data = pd.concat([hot,scoder,data],axis=1)
print(data)
## 构建X和Y
x = data.iloc[:,:-1]
y = data.iloc[:,-1]
## 划分训练集和测试集
train_x,test_x,train_y,test_y = train_test_split(x,y,test_size=0.33,random_state=7)
## 训练LinearRegression模型
lr = LinearRegression()
lr.fit(train_x,train_y)
print(lr.score(test_x,test_y))
hietory = mean_absolute_error(y_pred=lr.predict(test_x),y_true=test_y)
print(hietory)
## 训练Ridge
ridge = Ridge(alpha=0.7,fit_intercept=True,max_iter=200,solver='auto')
ridge.fit(train_x,train_y)
print(ridge.score(test_x,test_y))
hietory1 = mean_absolute_error(y_pred=ridge.predict(test_x),y_true=test_y)
print(hietory1)
效果如下
0.7032993956224423
74.06016823570432
0.7032488512553888
74.06116966254734