美文网首页机器学习ML波士顿房价预测
基于RandomForestRegressor的波士顿房价回归预

基于RandomForestRegressor的波士顿房价回归预

作者: 潇洒坤 | 来源:发表于2018-08-28 09:14 被阅读78次

    RandomForestRegressor中文叫做随机森林回归模型,是一种常用的集成模型。

    2018年8月27日笔记
    sklearn官方英文用户使用指南:https://sklearn.org/user_guide.html
    sklearn翻译中文用户使用指南:http://sklearn.apachecn.org/cn/0.19.0/user_guide.html
    本文使用的数据集是波士顿房价数据集,可以使用sklearn,datasets库中的load_boston方法直接获取数据。

    0.打开jupyter notebook

    不知道怎么打开jupyter notebook的朋友请查看我的入门指南文章:https://www.jianshu.com/p/bb0812a70246

    1.准备数据

    阅读此篇文章的基础是已经阅读了作者的上一篇文章《基于LinearRegression的波士顿房价预测》。
    文章链接:https://www.jianshu.com/p/f828eae005a1
    加载数据集中的预测目标值。

    from sklearn.datasets import load_boston
    
    y = load_boston().target
    

    如果阅读过上一篇文章,读者应该知道特征提取后的数据处理主要是对数据进行分箱,从而产生新的字段。
    将数据处理的过程封装成函数,代码如下:

    def dataProcessing(df):
        field_cut = {
        'CRIM' : [0,10,20, 100],
        'ZN' : [-1, 5, 18, 20, 40, 80, 86, 100], 
        'INDUS' : [-1, 7, 15, 23, 40],
        'NOX' : [0, 0.51, 0.6, 0.7, 0.8, 1],
        'RM' : [0, 4, 5, 6, 7, 8, 9],
        'AGE' : [0, 60, 80, 100],
        'DIS' : [0, 2, 6, 14],
        'RAD' : [0, 5, 10, 25],
        'TAX' : [0, 200, 400, 500, 800],
        'PTRATIO' : [0, 14, 20, 23],
        'B' : [0, 100, 350, 450],
        'LSTAT' : [0, 5, 10, 20, 40]
        }
        df = df[load_boston().feature_names].copy()
        cut_df = pd.DataFrame()
        for field in field_cut.keys():
            cut_series = pd.cut(df[field], field_cut[field], right=True)
            onehot_df = pd.get_dummies(cut_series, prefix=field)
            cut_df = pd.concat([cut_df, onehot_df], axis=1)
        new_df = pd.concat([df, cut_df], axis=1)
        return new_df
    

    调用函数dataProcessing形成新的特征矩阵,代码如下:

    import pandas as pd
    
    df = pd.DataFrame(load_boston().data, columns=load_boston().feature_names)
    new_df = dataProcessing(df)
    print(new_df.columns)
    new_df.head()
    

    上面一段代码的运行结果如下图所示:


    提取特征后的特征矩阵.png

    将特征处理后的特征矩阵赋值给变量X,代码如下:

    X = new_df.values
    

    2.清除异常值

    波士顿房价预测是kaggle网站上2016年的比赛。
    网上有资料显示有部分预测目标异常值为50,所以我们删除具有此异常值的样本。
    代码如下:

    X = new_df.values
    y = load_boston().target
    print(X.shape)
    X = X[y!=50]
    y = y[y!=50]
    print(X.shape)
    

    上面一段代码的运行结果如下图所示:


    image.png

    从上图中可以看出,特征矩阵X的行数由506变成了490。

    3.决策树回归模型

    使用决策树回归模型做回归预测,并使用交叉验证查看模型得分。
    调用sklearn.tree库的DecisionTreeRegressor方法实例化模型对象。
    调用sklearn.model_selection库的KFold方法实例化交叉验证对象。
    调用sklearn.model_selection库的cross_val_score方法做交叉验证。
    cross_val_score方法需要4个参数,第1个参数是模型对象,第2个参数是特征矩阵X,第3个参数是预测目标值y,第4个关键字参数cv可以为整数或者交叉验证对象,此处因为样本数只有506个,所以得指定交叉验证对象,而且实例化交叉验证对象的时候,必须设置关键字参数shuffle=True,如果不进行设置,会发生严重的错误,读者可以自己尝试一下。
    从官方文档查看cross_val_score方法如何使用的链接:http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.model_selection.cross_val_score.html#sklearn.model_selection.cross_val_score
    调用决策树回归模型的代码如下:

    from sklearn.ensemble import RandomForestRegressor
    from sklearn.model_selection import KFold
    from sklearn.model_selection import cross_val_score
    
    randomForest_model = RandomForestRegressor()
    kf = KFold(n_splits=5, shuffle=True)
    score_ndarray = cross_val_score(randomForest_model, X, y, cv=kf)
    print(score_ndarray)
    print(score_ndarray.mean())
    

    上面一段代码的运行结果如下:

    [0.72204027 0.74381333 0.78099897 0.74281036 0.71886066]
    0.741704717235011

    4.随机森林回归模型

    使用随机森林回归模型做回归预测,并使用交叉验证查看模型得分。
    调用sklearn.ensemble库的RandonForestRegressor方法实例化模型对象。
    调用sklearn.model_selection库的KFold方法实例化交叉验证对象。
    调用sklearn.model_selection库的cross_val_score方法做交叉验证。
    随机森林回归模型的代码如下:

    from sklearn.ensemble import RandomForestRegressor
    from sklearn.model_selection import KFold
    from sklearn.model_selection import cross_val_score
    
    randomForest_model = RandomForestRegressor()
    kf = KFold(n_splits=5, shuffle=True)
    score_ndarray = cross_val_score(randomForest_model, X, y, cv=kf)
    print(score_ndarray)
    print(score_ndarray.mean())
    

    上面一段代码的运行结果如下:

    [0.86489282 0.8010495 0.85862078 0.85851694 0.86895527]
    0.8504070609409359

    5.结论

    随机森林是多个决策树融合的集成模型,按照常理肯定会比单个决策树效果好。
    使用随机森林回归模型可以取得较好的回归效果,比使用单个决策树回归模型提升了11%左右的准确率。

    相关文章

      网友评论

        本文标题:基于RandomForestRegressor的波士顿房价回归预

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