机器学习之pandas库②——小项目实战②

分析(共享单车使用量项目)

数据集下载(http://archive.ics.uci.edu/ml/datasets/Bike+Sharing+Dataset)
数据集信息:

自行车共享系统是新一代的传统自行车租赁,其中会员,租赁和退货的整个过程已经自动化。通过这些系统,用户能够从特定位置轻松地租用自行车并在另一个位置返回。目前,全世界约有500多个自行车共享计划,其中包括超过50万辆自行车。今天,由于它们在交通,环境和健康问题中的重要作用,因此对这些系统存在很大兴趣。

除了有趣的自行车共享系统的现实应用之外,这些系统产生的数据特征使它们对研究具有吸引力。与公共汽车或地铁等其他交通服务相反,旅行,出发和到达位置的持续时间明确记录在这些系统中。此功能将自行车共享系统转变为虚拟传感器网络,可用于感知城市的移动性。因此,预计通过监测这些数据可以检测到城市中的大多数重要事件。


属性信息:

hour.csv和day.csv都有以下字段,除了在day.csv中不可用的hr

  • instant:记录索引
  • dteday:date
  • season:season(1:springer,2:summer,3:fall,4 :冬天)
  • 年:年(0:2011年,1:2012)
  • 月:月(1到12)
  • 小时:小时(0到23)
  • 假日:天气是假日与否(摘自[网站链接])
  • 工作日:星期几 - 工作日:
    如果一天既不是周末也不是假期是1,否则是0.
  • weathersit:
  • 1:清除,少量云,部分多云,部分多云
  • 2:雾+多云,雾+破碎的云彩,薄雾+少量的云彩,薄雾
  • 3:小雪,小雨+雷暴+散云,小雨+散云
  • 4:大雨+冰托+雷暴+雾,雪+雾
  • 温度:摄氏度的标准化温度。这些值通过(t-t_min)/(t_max-t_min),t_min = -8,t_max = + 39(仅以小时比例)
    得出 - atemp:以摄氏度为单位的归一化感觉温度。这些值通过(t-t_min)/(t_max-t_min),t_min = -16,t_max = + 50(仅以小时比例)得出
  • 哼声:标准化湿度。值分为100(最大)
  • 风速:标准化风速。值分为67(最大)
  • 临时:临时用户数
  • 已注册:注册用户数
  • cnt:包括休闲和注册在内的总租赁自行车数量

简易代码

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)

## 构建XY
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

你可能感兴趣的:(机器学习之pandas库②——小项目实战②)