美文网首页
公共自行车使用量预测

公共自行车使用量预测

作者: 王高鹏_3202 | 来源:发表于2020-11-06 09:15 被阅读0次

    公共自行车低碳、环保、健康,并且解决了交通中“最后一公里”的痛点,在全国各个城市越来越受欢迎。希望通过分析时间、天气等信息,预测出该街区在一小时内的被借取的公共自行车的数量。
    数据来源: http://sofasofa.io/competition.php?id=1#c1,代码:https://gitee.com/wang-gaopeng/public-bicycle-usage-forecast/tree/master/
    数据文件包括三个:train.csv训练集,test.csv测试集,sample_submit.csv输出结果试例。数据中的字段包括:

    字段 含义
    id 行编号没有实际意义,数字类型
    city 城市,数据集中有两个城市 分别为0和1
    hour 时间24小时制
    is_workday 是否是工作日,1表示是,0是周末或节假日
    weather 当时的天气状况,1为晴朗,2为多云、阴天,3为轻度降水天气,4为强降水天气
    temp_1 当时的气温,单位为摄氏度
    temp_2 当时的体感温度,单位为摄氏度
    wind 风速,值越大,风速越高
    y 因变量 一小时内自行车被借取的数量 ,被预测的量

    使用工具jupter,pandas,matplotlib,scikit-learn

    一.数据导入与清洗。

    import matplotlib.pyplot as plt
    from sklearn import linear_model
    from sklearn.tree import DecisionTreeRegressor
    import numpy as np
    import math
    train=pd.read_csv('C:/Users/wanggaopeng/Desktop/train.csv',encoding='utf-8')
    test=pd.read_csv('C:/Users/wanggaopeng/Desktop/test.csv',encoding='utf-8')
    submit=pd.read_csv('C:/Users/wanggaopeng/Desktop/sample_submit.csv',encoding='utf-8')
    train.head(5)
    
    image.png
    test.head(5)
    
    image.png

    id与我们分析目标不相关,将其剔除。

    train.drop('id',axis=1,inplace=True)
    test.drop('id',axis=1,inplace=True)
    

    训练集的描述性统计分析。

    train.describe()
    
    image.png

    箱线图

    plt.rcParams['font.sans-serif']=['Simhei']#解决中文乱码
    plt.rcParams['axes.unicode_minus']=False #解决负号不显示
    plt.title('箱线图')
    figure=plt.figure()
    figure.add_subplot(3,2,1)
    plt.boxplot(train['hour'],labels=['hour'])
    figure.add_subplot(3,2,2)
    plt.boxplot(train['temp_1'],labels=['temp_1'])
    figure.add_subplot(3,2,3)
    plt.boxplot(train['temp_2'],labels=['temp_2'])
    figure.add_subplot(3,2,4)
    plt.boxplot(train['wind'],labels=['wind'])
    figure.add_subplot(3,2,5)
    plt.boxplot(train['y'],labels=['y'])
    
    image.png

    取出训练集中的y值

    y_train=train.pop('y')
    

    二.建模

    2.1多元线性回归模型

    reg = LinearRegression()
    reg.fit(train, y_train)
    y_pred = reg.predict(test)
    reg.coef_
    reg.intercept_
    reg.score(train,y_train)
    # 输出预测结果至my_lr_prediction.csv
    submit['y'] = y_pred
    submit.to_csv('C:/Users/wanggaopeng/Desktop/my_lr_prediction.csv', index=False)
    

    回归系数:


    image.png

    截距:


    image.png
    预测值:
    image.png

    确定系数R^2:越接近1回归结果越好。


    image.png
    预测结果:
    image.png
    2.2决策树模型
    #建立最大深度为6的决策树模型
    reg1 = DecisionTreeRegressor(max_depth=6)
    reg1.fit(train, y_train)
    y_pred1 = reg1.predict(test)
    
    # 输出预测结果至my_dt_prediction.csv
    submit['y'] = y_pred1
    submit.to_csv('C:/Users/wanggaopeng/Desktop/my_dt_prediction.csv', index=False)
    
    image.png

    2.3模型评估
    评价方法为RMSE(Root of Mean Squared Error)。


    image.png

    RMSE越小,说明模型预测得越准确。

    submit.drop('id',axis=1,inplace=True)
    y=submit['y']
    mae1=y-y_pred1
    sub1=mae1**2
    tob1=sub1.sum(axis=0)
    mob1=tob1/len(y)
    mae2=y-y_pred
    sub2=mae2**2
    tob2=sub2.sum(axis=0)
    mob2=tob2/len(y)
    RMSE1=math.sqrt(mob1)
    RMSE2=math.sqrt(mob2)
    
    image.png

    说明所建立的模型多元线性回归拟合度要优于决策树模型,这两个模型的RMSE都比较大,说明模型的结果不是很理想,模型有进一步优化的空间,也可以使用其他的方法来进行预测分析。

    相关文章

      网友评论

          本文标题:公共自行车使用量预测

          本文链接:https://www.haomeiwen.com/subject/xlpovktx.html