请到后台主题设置添加
首页 / 二手房买卖

kaggle—HousePrice房价预测项目实战

  房价预测是kaggle官网的一个竞赛项目,算是机器学习的一个入门项目。kaggle官网链接: link.   关于kaggle竞赛项目的操作流程可以参看这篇博客: link.   kaggle主要为开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台,kaggle已经吸引了80万名数据科学家的关注。是学习数据挖掘和数据分析一个不可多得的实战学习平台,上面还有许多的项目有巨额的奖金,有许多的获奖选手都会分享他们的代码并分析和挖掘数据的经验。   房价竞赛的链接: link.   导入相应的库:   (1)从官网下载数据集   (2)利用pandas从下载目录里导入数据,输出所有列名、输出详细的目标变量的信息,查看数据是否满足正态分布   所有列名   Index([‘Id’, ‘MSSubClass’, ‘MSZoning’, ‘LotFrontage’, ‘LotArea’, ‘Street’,   ‘Alley’, ‘LotShape’, ‘LandContour’, ‘Utilities’, ‘LotConfig’,   ‘LandSlope’, ‘Neighborhood’, ‘Condition1’, ‘Condition2’, ‘BldgType’,   ‘HouseStyle’, ‘OverallQual’, ‘OverallCond’, ‘YearBuilt’, ‘YearRemodAdd’,   ‘RoofStyle’, ‘RoofMatl’, ‘Exterior1st’, ‘Exterior2nd’, ‘MasVnrType’,   ‘MasVnrArea’, ‘ExterQual’, ‘ExterCond’, ‘Foundation’, ‘BsmtQual’,   ‘BsmtCond’, ‘BsmtExposure’, ‘BsmtFinType1’, ‘BsmtFinSF1’,   ‘BsmtFinType2’, ‘BsmtFinSF2’, ‘BsmtUnfSF’, ‘TotalBsmtSF’, ‘Heating’,   ‘HeatingQC’, ‘CentralAir’, ‘Electrical’, ‘1stFlrSF’, ‘2ndFlrSF’,   ‘LowQualFinSF’, ‘GrLivArea’, ‘BsmtFullBath’, ‘BsmtHalfBath’, ‘FullBath’,   ‘HalfBath’, ‘BedroomAbvGr’, ‘KitchenAbvGr’, ‘KitchenQual’,   ‘TotRmsAbvGrd’, ‘Functional’, ‘Fireplaces’, ‘FireplaceQu’, ‘GarageType’,   ‘GarageYrBlt’, ‘GarageFinish’, ‘GarageCars’, ‘GarageArea’, ‘GarageQual’,   ‘GarageCond’, ‘PavedDrive’, ‘WoodDeckSF’, ‘OpenPorchSF’,   ‘EnclosedPorch’, ‘3SsnPorch’, ‘ScreenPorch’, ‘PoolArea’, ‘PoolQC’,   ‘Fence’, ‘MiscFeature’, ‘MiscVal’, ‘MoSold’, ‘YrSold’, ‘SaleType’,   ‘SaleCondition’, ‘SalePrice’],dtype=‘object’)   房价变量的详细信息   count 1460.000000   mean 180921.195890   std 79442.502883   min 34900.000000   25% 129975.000000   50% 163000.000000   75% 214000.000000   max 755000.000000   Name: SalePrice, dtype: float64   房价分布曲线   在这里插入图片描述   从结果来看并不满足标准的正态分布,所以查看下它的峰度(kurtosis)和偏度(skewness)。   峰度(kurtosis):描述变量取值分布形态的陡缓程度的统计量。   kurtosis=0与正态分布的陡缓程度相同。   kurtosis>0比正态分布的高峰更加陡峭。   kurtosis<0比正态分布的高峰平。   偏度(skewness)是描述变量取值分布对称性的统计量。   skewness=0分布形态与正态分布偏度相同。   skewness>0表示正(右)偏差数值较大,右边的 尾巴比较长。   skewness<0表示负(左)偏差数值较大,左边的尾巴比较长。   Skewness:1.882876   Kurtosis:6.536282   (3)查看各个特征的分布走向   居住面积:   在这里插入图片描述   这里可以看出居住面积存在离群值   地下室面积:   在这里插入图片描述   整体材料与饰面质量:(用箱型图,可以查看离群值,均值,最值)   在这里插入图片描述   原施工日期:   在这里插入图片描述   特征相关度热度图:   在这里插入图片描述   选取前10个和出售价格相关性比较大的特征进行分析:   在这里插入图片描述   将上面挑出来的十个特征进行两两画图(选六个):   在这里插入图片描述   缺失值查看:   Total Percen   PoolQC 1453 0.995205   MiscFeature 1406 0.963014   Alley 1369 0.937671   Fence 1179 0.807534   FireplaceQu 690 0.472603   LotFrontage 259 0.177397   GarageCond 81 0.055479   GarageType 81 0.055479   GarageYrBlt 81 0.055479   GarageFinish 81 0.055479   GarageQual 81 0.055479   BsmtExposure 38 0.026027   BsmtFinType2 38 0.026027   BsmtFinType1 37 0.025342   BsmtCond 37 0.025342   BsmtQual 37 0.025342   MasVnrArea 8 0.005479   MasVnrType 8 0.005479   Electrical 1 0.000685   Utilities 0 0.000000   这个环节将对我们数据分析时候找出来的一些需要处理的数据进行适当的数据处理,数据处理部分因人而异,数据处理的好坏将直接影响模型的结果。   先将所用到的库导入(包括后面建模的)   导入数据集:   查看数据集的大小:   The train data size after dropping Id feature is :(1460, 81)   The test data size after dropping Id feature is :(1459, 80)   将id列赋值给变量,然后删除该列,再看下删除后的数据集大小:   The train data size after dropping Id feature is :(1460, 80)   The test data size after dropping Id feature is :(1459, 79)   由数据分析阶段知道居住面积存在离群值,再次显示出来(为下一步删掉离群值提供删除的范围),删除离群值,显示删除后的数据集:   在这里插入图片描述   在这里插入图片描述   将目标变量转换为正态分布:   在这里插入图片描述   mu = 180932.92 and sigma=79467.79   qq图(可以查看数据与正态分布差距):   在这里插入图片描述   上面可以看出来与正态分布偏离还是很大,这里做个对数变换:   在这里插入图片描述   mu=12.02 and sigma=0.40   在这里插入图片描述   缺失值处理:   缺失值处理前我们先建立整体的数据集(将训练集和测试集放一起处理)   all_data size is :(2917, 79)   打印缺失数据:   Missing Ratio   PoolQC 99.691464   MiscFeature 96.400411   Alley 93.212204   Fence 80.425094   FireplaceQu 48.680151   LotFrontage 16.660953   GarageFinish 5.450806   GarageYrBlt 5.450806   GarageQual 5.450806   GarageCond 5.450806   GarageType 5.382242   BsmtExposure 2.811107   BsmtCond 2.811107   BsmtQual 2.776826   BsmtFinType2 2.742544   BsmtFinType1 2.708262   MasVnrType 0.822763   MasVnrArea 0.788481   MSZoning 0.137127   BsmtFullBath 0.068564   BsmtHalfBath 0.068564   Utilities 0.068564   Functional 0.068564   Exterior2nd 0.034282   Exterior1st 0.034282   SaleType 0.034282   BsmtFinSF1 0.034282   BsmtFinSF2 0.034282   BsmtUnfSF 0.034282   Electrical 0.034282   在这里插入图片描述   对上述缺失值做填充:   填充完以后再次查看缺失值:   Empty DataFrame   Columns: [Missing Ratio]   Index: []   完成填充!   将有些不是连续值的数据给他们做成类别值:   使用sklearn进行标签映射(使用sklearn的LabelEncoder方法将类别特征(离散型)编码为0~n-1之间连续的特征数值):   一般房价与房子整体的面积有关,所以这里多做一个特征,将几个面积整合在一起:   我们检查数值型特征数据的偏度(skewness),但是要注意,object类型的数据无法计算skewness,因此计算的时候要过滤掉object数据。   Skew   MiscVal 21.939672   PoolArea 17.688664   LotArea 13.109495   LowQualFinSF 12.084539   3SsnPorch 11.372080   LandSlope 4.973254   KitchenAbvGr 4.300550   BsmtFinSF2 4.144503   EnclosedPorch 4.002344   ScreenPorch 3.945101   对于偏度过大的特征数据利用sklearn的box-cox转换函数,以降低数据的偏度   使用pandas的dummy方法来进行数据独热编码,并形成最终的训练和测试数据集:   导入所需要的库:   这里使用sklearn的交叉验证函数cross_val_score,由于该函数并没有shuffle的功能,我们还需要额外的kfold函数来对数据集进行随机分割。   Lasso模型   ElasticNet模型   KernelRidge带有核函数的岭回归   GradientBoostingRegressor模型   XGboost模型   lightgbm模型   输出每个模型的得分:   Lasso score: 0.1115 (0.0074)   ElasticNet score: 0.1116 (0.0074)   Kernel Ridge score: 0.1153 (0.0075)   Gradient Boosting score: 0.1167 (0.0083)   Xgboost score: 0.1164 (0.0070)   lightgbm score: 0.1288 (0.0058)   均值化模型   这里我们将enet gboost krr lasso四个模型进行均值:   Averaged base models score: 0.1087 (0.0077)   Stacking模型   在Stacking模型基础上加入元模型。   这里在均化模型基础上加入元模型,然后在这些基础模型上使用折外预测(out-of-folds)来训练我们的元模型,其训练步骤如下:   1 将训练集分出2个部分:train_a和train_b   2 用train_a来训练其他基础模型   3 然后用其训练模型在测试集train_b上进行预测   4 使用步骤3中中的预测结果作为输入,然后在其元模型上进行训练   参考链接: link.我们使用五折stacking方法,一般情况下,我们会将训练集分为5个部分,每次的训练中都会使用其中4个部分的数据集,然后使用最后一个部分数据集来预测,五次迭代后我们会得到五次预测结果,最终使用着五次结果作为元模型的输入进行元模型的训练(其预测目标变量不变)。在元模型的预测部分,我们会平均所有基础模型的预测结果作为元模型的输入进行预测。   用前面定义好的enet、gboost、krr基础模型,使用lasso作为元模型进行训练预测,并计算得分:   Stacking Averaged base models score: 0.1081 (0.0073)   集成模型   将前面的模型进行集成化,组合出一个更加高效的模型(StackedRegressor,XGBoost和LightGBM模型集成)   定义一下评价函数   分别训练XGBoost和LightGBM和StackedRegressor模型:   0.07839506096666995   0.07876052198274874   0.05893922686966146   用加权来平均上述的xgboost和LightGBM和StackedRegressor模型:   生成结果的提交   在这里插入图片描述   在这里插入图片描述
版权说明:
1.版权归本网站或原作者所有;
2.未经本网或原作者允许不得转载本文内容,否则将视为侵权;
3.转载或者引用本文内容请注明来源及原作者;
4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。
你可能感兴趣的文章
搜索
最新留言
关注我们
关注我们
微信
关注我们
微博
请到后台主题设置添加

Powered ByZ-Blog.