Kaggle竞赛入门实战——机器学习预测房屋价格.docx

上传人:安*** 文档编号:73266028 上传时间:2023-02-17 格式:DOCX 页数:11 大小:20.79KB
返回 下载 相关 举报
Kaggle竞赛入门实战——机器学习预测房屋价格.docx_第1页
第1页 / 共11页
Kaggle竞赛入门实战——机器学习预测房屋价格.docx_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《Kaggle竞赛入门实战——机器学习预测房屋价格.docx》由会员分享,可在线阅读,更多相关《Kaggle竞赛入门实战——机器学习预测房屋价格.docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Kaggle竞赛入门实战机器学习预测房屋价格这篇文章是介绍一个完好的机器学习小工程预测房屋价格它是Kaggle竞赛中入门级的题目以及我们比拟熟悉的泰坦尼克号生存预测处于同一等级。在之前介绍KNN算法时曾用过这个数据集但只是通过简单的建模帮助理解KNN的思想本文会更加全面地介绍完成一个小工程的流程怎样在科学分析的辅助下预测出我们需要的目的值。在分析之前我们应该提早明确我们的目的中途可能需要处理的问题可以归纳成以下几点解析标签变量可以通过目的变量大致分析出解决问题是需要分类算法还是回归算法。粗略解析特征因为特征标签都为英文所以理解标签含义是最根本的观察每个特征的特点是数值型的、还是字符型的是离散的

2、、还是连续的粗略联想一下各个特征与目的变量间的联络。数据预处理针对性处理数据集中的缺失数据以及异常数据。研究主要特征数据集中可能只有一局部特征与目的变量间相关性极强重点分析这些特征与目的变量间的联络。选择性处理其他特征除主要特征外可能主观上认为某些特征也会影响目的变量可以以选择性分析一下。建模工作选出最合适该问题的模型进展建模、调参等操作。由于每个人的习惯不同所以处理问题时的先后顺序、选择的方法自然也不同比方讲处理缺失值的方法就有很多种本文提及的流程、方法只是个人的一点小思路祈望给伙伴们参考但绝不局限于此不管算法还是模型不都应该向更优处开展嘛。首先一定要大致解析一下测试数据集上图只是数据集的一

3、小局部共80个特征一个目的变量“SalePrice共有1460个样本。很明显这个问题是需要通过房子的一些特征预测出相应的价格所以建模可以选择回归类算法。缺失值处理这个数据集许多特征都或者多或者少的含有一些缺失值针对缺失值个数的多少采取的处理方式也不同像一些特征的缺失值占样本个数超过三分之二那么这些特征的意义也不大所以选择舍去这些特征#很多特征还不及数据个数的三分之一所以选择舍去data.drop(columnsAlley,FireplaceQu,PoolQC,Fence,MiscFeature,axis1,inplaceTrue)而对于缺失值较少的数值型特征根据情况可以选择填充众数、中位数以及

4、平均数#填补数值型缺失值dataLotFrontage.fillna(dataLotFrontage.median(),inplaceTrue)dataMasVnrArea.fillna(dataMasVnrArea.mean(),inplaceTrue)而数据集中本身含有很多字符型特征而对于这类特征的缺失值是没有中位数以及平均数一讲的可以随机填充或填充出现频率最多的元素这里我选择了后者#获得含有缺失值的字符型特征标签miss_index_listdata.isnull().any()data.isnull().any().valuesTrue.index.tolist()miss_list#

5、存元素foriinmiss_index_list:#注意需要reshape规格miss_list.append(datai.values.reshape(-1,1)这里填充缺失值的方式可以用上述方式但前提是需要另写一个函数计算特征的众数另一种方式就是利用sklearn中自带的API进展填充fromsklearn.imputeimportSimpleImputer#用众数填补数值型变量foriinrange(len(miss_list):imp_mostSimpleImputer(strategymost_frequent)#实例化参数选择众数imp_mostimp_most.fit_trans

6、form(miss_listi)#训练data.loc:,miss_index_listiimp_most#交换原来的一列当然这种方式也适用于数值型其中参数strategy也是可选的像均值、中位数、众数以及自定义这几种代码中most_frequent就代表众数。对于填充缺失值的方式numpy以及pandas应用较多但这种利用API填充也比拟便利可以当成一次拓展自己解析一下。处理字符型特征对于某些回归类算法比方线性回归是通过计算继而预测出最后的目的变量所以训练时传入字符型元素是不合法的。但假如利用随机森林可以防止因为由决策树构成的随机森林只注重样本特征的分布但如今我们并不知道哪一种模型更合适该问

7、题因为最后我们要从中挑选出一个最优的那么我们在处理数据时就要兼顾我们将要选择的所有模型。这里选择利用哑变量也称独热编码处理字符型数据可能有的人比拟生疏但介于篇幅问题不在太多阐述可以自行查询一下或过段时间也会写一篇文章单独讲一下变量处理的相关知识。我们只针对字符型特征进展哑变量转化所以需要索引出字符型类的特征data_data.copy()#在一个新的数据集上操作ob_featuresdata_.select_dtypes(includeobject).columns.tolist()然后就可以通过sklearn中自带的API对字符型特征进展哑变量转换#哑变量/独热编码fromsklearn.p

8、reprocessingimportOneHotEncoderOneHotOneHotEncoder(categoriesauto)#实例化resultOneHot.fit_transform(data_.loc:,ob_features).toarray()#训练打印一下result输出如下这个矩阵中的每一列可以看成一个新的特征而每个特征只包含0以及1两个元素其中1代表有、0代表没有。比方Street特征中包含两个元素Grvl以及Pave而这两个元素就可以通过哑变量转化形成两个新的特征。Street特征中为Grvl的样本在Gral新一列中就为1在Pave新一列中就为0其他特征也是如此。#获取

9、特征名OneHotnamesOneHot.get_feature_names().tolist()OneHotDfpd.DataFrame(result,columnsOneHotnames)利用get_feature_names方法可以获取特征的标签将上述矩阵转化为一个DataFrame过滤方差因为转化为哑变量之后许多特征都是由0以及1组成的仍然用Street举例会不会有种可能就是所有样本的Street中的元素都为Grvl呢假如这样哑变量转化后的Grvl一列皆为1而Pave一列皆为0那么这两个新的特征对于最后的目的变量的预测是没有一点用途的是可以直接删去的所以利用方差过滤掉类似的情况将阈值设

10、为0.1方差低于0.1的特征都将被过滤掉。fromsklearn.feature_selectionimportVarianceThreshold#过滤掉方差小于0.1的特征transferVarianceThreshold(threshold0.1)new_data1transfer.fit_transform(data_)#get_support得到的需要留下的下标索引var_indextransfer.get_support(True).tolist()data1data_.iloc:,var_index最后利用该方法过滤掉了188个特征本来的270个特征还剩下82个特征。相关性过滤82

11、个特征仍然过多了一定还有一些无关紧要的特征需要继续特征降维假如一个特征对于目的变量的预测有帮助那么这个特征与目的变量间一定有某种联络那么这个特征与目的变量之间的相关性一定是比拟高的所以可以通过特征与目的变量间的相关系数过滤一些特征。#皮尔逊相关系数fromscipy.statsimportpearsonrpear_num#存系数pear_name#存特征名称feature_namesdata1.columns.tolist()#得到每个特征与SalePrice间的相关系数foriinrange(0,len(feature_names)-1):print(%s以及%s之间的皮尔逊相关系数为%f%

12、(feature_namesi,feature_names-1,pearsonr(data1feature_namesi,data1feature_names-1)0)if(abs(pearsonr(data1feature_namesi,data1feature_names-1)0)0.5):pear_num.append(pearsonr(data1feature_namesi,data1feature_names-1)0)pear_name.append(feature_namesi)我们设定阈值为0.5留下相关系数绝对值大于0.5的特征因为不止正相关有影响负相关也是对预测有一定作用的。

13、经过滤后只剩下13个特征上述计算的是特征与目的变量之间的相关性我们可以再从特征与特征之间的相关性找一找联络可不可以再降几维呢TotalBsmtSF房间总数以及GrLivArea地面以上居住面积相关系数0.83GarageCars车库可装车辆个数以及GarageArea车库面积相关系数0.88TotalBsmtSF地下室总面积以及1stFlrSF第一层面积相关系数0.82个人觉得可以将TotalBsmtSF以及GrLivArea都保存因为房间面积以及房间总数不会过于冲突可能在房间面积一样的情况下房间个数越多的房子价格会更高一些呢而剩下的四个特征从意思上就有一些冲突可以取GarageArea以及o

14、talBsmtSF两个特征。可视化分析我们可以通过可视化验证一下过滤后的特征与目的变量之间是否存在上文我们料想的某种联络这里推荐用箱线图绘制数据较为离散的特征、用散点图绘制数据较为连续的特征前者方便比拟后者方便观察分布利于找出联络。可以看到OverallQual(总体评价)对于价格的影响真的宏大所以买卖口碑真的是非常重要呀其他离散特征与目的变量间的联络也是具有很明显的趋势的。散点图可视化出的结果也是非常明显所以我们选取的这几个特征都是不错的但是这不代表其他特征与目的变量之间没有联络之前也提及过可以选取一些主观上感觉有联络的特征再进展二次分析。我自己猜想Neighborhood(地理位置)以及H

15、eatingQC(加热质量)对于价格应该会有影响但是可视化出的结果显示联络并不大。选模、调参模型测试我选择用线性回归以及随机森林由于线性回归对传入数据的要求和要通过均方误差判断哪一个模型更优所以需要先对训练集以及测试集进展标准化然后计算两个模型对应的均方误差代码如下#计算模型的均方误差clfsrfr:RandomForestRegressor(),LR:LinearRegression()forclfinclfs:clfsclf.fit(x_train_sta,y_train_sta)predictionclfsclf.predict(x_test_sta)print(clfRMSE:str(

16、np.sqrt(metrics.mean_squared_error(y_test_sta,prediction)rfrRMSE:0.38292937665826626LRRMSE:0.5534982168680332在不调整参数的情况下rfr的均方误差小于LR随机森林在该问题上是要优于线性回归的所以选定随机森林作为最后建模要用的算法然后利用网格搜索或学习曲线对算法进展调参。这里省略很多很多调参步骤。最后我自己尝试调出的最正确参数如下调参之后的模型得分大约为84%前后相比大约进步了大约2%。rfRandomForestRegressor(n_estimators300,max_depth20,

17、max_features5,min_samples_leaf2,min_samples_split2)gridGridSearchCV(rf,param_gridparam_grid,cv5)grid.fit(x_train,y_train)rf_reggrid.best_estimator_#最正确模型可以在模型的根底上分析一下特征重要程度其中OverallQual(总体评价)以及GrLivArea居住面积两者重要程度占比就已经超过五成反观x32_Unf(未完成地下室面积)以及x29_TA(厨房质量)影响甚微。需要对测试集做与训练集一致的操作例如缺失值处理、哑变量转化等然后索引出测试集中这些

18、重要特征并传入建好的模型中得出最终的预测结果SalePrice然后将Id以及SalePrice导出一个名为submission的csv文件最后需要在Kaggle需要上传这份文件就可以得到自己的排名啦。submission_Idpd.read_csv(house_test.csv,usecolsId)SalePricepd.DataFrame(test_value_y,columnsSalePrice)Submissionpd.concat(submission_Id,SalePrice,axis1)Submission.to_csv(submission.csv,indexFalse)总结综上可以发现完成一个小工程五成的时间用来处理分析数据、四成的时间用来调参、最后一成时间用来选模建模而最终模型的好坏五成取决数据本身、四成取决于你的特征工程、最后一成取决于你的调参所以需要把更多时间更多精力放在数据处理、特征工程上才能得到让自己满意的一个结果。公众号【喵讲Python】回复房价预测可获取源码供参考

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 工程图纸

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁