admin管理员组

文章数量:1529463

这是博主第二个kaggle项目,Housing Prices Competition。这个项目是基于波士顿房价改编的数据集对房子的价格进行预测。虽然是基于波士顿房价数据集,但改编过后有着80多个数据特征,还是有一定难度的。下面给大家分享一下我的做法把,同样地在kaggle上排到了前10%的成绩。

Part1.数据导入和初步分析

先来初步观察一下我们这次要用到的数据集

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(font_scale=1)
train=pd.read_csv('train.csv')
test=pd.read_csv('test.csv')
train.head()


可以看到我们这一次使用的数据集的特征数目是比较多的,有81个特征。
看到那么多的特征数,我们自然而然的会想到,81个特征里面是不是每一个都对我们的房价有着很重要的影响呢,所以接下来我们就来看一下每一个特征对房间的影响程度到底有多少。

corr=train.drop('Id',1).corr().sort_values(by='SalePrice',ascending=False).round(2)
print(corr['SalePrice'])

使用train.corr()参数来查看我们每一个特征对于’SalePrice’之间的影响程度

画出热点图(颜色越深就说明这个特征对我们的房价影响越大)

plt.subplots(figsize=(15, 8))
sns.heatmap(corr, vmax=.8, square=True);


提取出前十个重要的特征,再次画出他们的热点图

cols =corr['SalePrice'].head(10).index
cm = np.corrcoef(train[cols].values.T)
sns.set(font_scale=1)
hm = sns.heatmap(cm, annot=True, yticklabels=cols.values, xticklabels=cols.values)
plt.show()


到这里,我们就可以清楚的看到对于房价影响最深的10个特征分别是:OverallQual(房屋的整体材料饰物的评分),GrLivArea(房子的面积),TotalBsmtSF(地下室总面积),GarageCars(车库的容量),1stFlrSF(1楼的面积),GarageArea(车库的面积),FullBath(地面上浴室的数量),TotRmsAbvGrd(地上不包括浴室的房间数),YearBuilt(房子建造的年龄)。
我们可以画出这十个特征与房价之间的依赖图,看下他们到底是怎样影响我们的房价的。

sns.pairplot(train[corr['SalePrice'].head(10).index],kind='reg')


从我们的依赖图中可以看到有几个特征对于房价的影响是线性相关的(GrLivArea,TotalBsmtSF,1stFlrSF,GarageArea),房价会随着这几个特征的上升而上升,这就是我们81个特征当中的关键特征。kaggle社区上有参赛者会直接选择使用这十个特征来进行建模,这是可行的做法,但获得的分数并不会太高。

Part2.数据处理

将训练集和数据集的数据进行合并,开始我们的数据处理

trainrow=train.shape[0]
testrow=test.shape[0]
testids=test['Id'].copy()
y_train=train['SalePrice'].copy()
data=pd.concat((train,test)).reset_index(drop=True)
data=data.drop('SalePrice',1)
data=data.drop('Id',axis=1)

(1).异常值的处理
在数据集当中有两个特征(GrLivArea,GarageYrBlt)是有离群值和异常值的,所以我们优先处理了这两个特征。

sns.scatterplot(x='GrLivArea',y='SalePrice',data=train)


从散点图可以看到房价是随着居住面积的增加而上涨的,这符合我们的常识。但是右下角出现了两个离群值,面积增加了但是房价并没有增加。这是我们所不希望看到的情况,所以我们要将这两个离群值去掉。

train=train.drop(train.loc[(train['GrLivArea']>4000) & 

本文标签: 实战房价入门kagglePrices