• python随机森林房价预测


    Kaggle房价预测

    作为Kaggle竞赛中的经典入门题目,我主要在kernels中学习其他人分析和处理数据的流程,首先是通过各类plt的图表,分析数据特征和房价之间的相关性

    载入数据集

        df_train = pd.read_csv('./input/train.csv')
        df_test = pd.read_csv('./input/test.csv')
    

    房价整体分布概率直方图

        print(df_train['SalePrice'].describe())
        sns.distplot(df_train['SalePrice'])
        plt.show()
    

    根据直方图可以看出整体房价大致的区间分布

    总平方英尺,散点图

        var = 'GrLivArea'
        # axis: 需要合并链接的轴,0是行,1是列
        data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
        data.plot.scatter(x=var, y='SalePrice', ylim=(0, 800000))
        plt.show()
    

    在常规印象中,面积越大房价越贵,根据散点图可以看出基本符合规律,除了少数离群点。

    建造年份,箱线图

        var = 'YearBuilt'
        data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
        f, ag = plt.subplots(figsize=(16, 8))
        fig = sns.boxplot(x=var, y="SalePrice", data=data)
        fig.axis(ymin=0, ymax=800000)
        plt.xticks(rotation=90)
        plt.show()
    

    一般规律是房屋的建造年份越新,房价越高。根据箱线图的走势,基本符合预期。但也有部分年份比较旧的房屋房价特别高,推测可能是历史老屋,或者古董别墅之类的。

    相关系数,热点图

        corrmat = df_train.corr()
        f, ax = plt.subplots(figsize=(12, 9))
        sns.heatmap(corrmat, vmax=.8, square=True)
        plt.show()
    

    在前面单独分析了几个属性后,我们现在查看train训练集中所有属性相关系数的热点图。

    相关系数矩阵,获取相关性最高的前10个特征

        k = 10
        cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index
        cm = np.corrcoef(df_train[cols].values.T)
        sns.set(font_scale=1.25)
        hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 10},
                         yticklabels=cols.values, xticklabels=cols.values)
        plt.show()
    

    在热点图大致了解所有属性的相关性后,接着按照相关系数排序,取前10个特征输出相关矩阵

    特征筛选

    根据Kaggle官方提供的字段说明里,GarageCars和GarageArea描述的是车库容纳车辆数量和车库面积,描述的基本是同一件事情,而且相关系数分别是0.64和0.62,因此只取其中的GrLivArea

    离群点检测

    观察GrLivArea的散点图,最右侧2个点明显不符,因此在训练数据集中删除掉

        df_train.sort_values(by='GrLivArea', ascending=False)[:2]
        print("drop 2 outliers")
        print(df_train.sort_values(by='GrLivArea', ascending=False)[:2])
    
        df_train = df_train.drop(df_train[(df_train['GrLivArea'] > 4000) & (df_train['SalePrice'] < 300000)].index)
    

    随机森林,建模,预测

        # 根据相关度选择特征
        predictor_cols = ['OverallQual', 'GrLivArea', 'GarageCars', 'TotalBsmtSF', 'TotRmsAbvGrd', 'YearBuilt']
        train_X = df_train[predictor_cols]
    
        my_model = RandomForestRegressor()
        my_model.fit(train_X, train_y)
    
        # GarageCars,TotalBsmtSF存在空值,
        df_test['GarageCars'] = df_test['GarageCars'].fillna(0)
        df_test['TotalBsmtSF'] = df_test['TotalBsmtSF'].fillna(0)
    
        test_X = df_test[predictor_cols]
    
        predicted_prices = my_model.predict(test_X)
        # 取整
        print(predicted_prices)
    
        my_submission = pd.DataFrame({'Id': df_test.Id, 'SalePrice': predicted_prices})
        my_submission.to_csv('./submission.csv', index=False)
    

    完整代码,数据集下载

    githup源码

  • 相关阅读:
    『数学』--数论--组合数+卢卡斯定理+扩展卢卡斯定理
    Lucene高亮
    Linux 计划任务
    Lucene.net(4.8.0) 学习问题记录二: 分词器Analyzer中的TokenStream和AttributeSource
    Asp.net Core 异步调用 Task await async 的梳理
    Asp.net core 中的依赖注入
    Lucene.net(4.8.0) 学习问题记录一:分词器Analyzer的构造和内部成员ReuseStategy
    Git 使用篇二:小组协作开发
    Git 使用篇二:搭建远程服务器
    Git 使用篇一:初步使用GitHub,下载安装git,并上传项目
  • 原文地址:https://www.cnblogs.com/wanli002/p/10886872.html
Copyright © 2020-2023  润新知