今天给大家介绍一个非常适合新手入门的机器学习实战案例。
这是一个房价预测的案例,来源于 Kaggle 网站,是很多算法初学者的第一道竞赛题目。
该案例有着解机器学习问题的完整流程,包含EDA、特征工程、模型训练、模型融合等。
房价预测流程
下面跟着我,来学习一下该案例。
没有啰嗦的文字,没有多余的代码,只有通俗的讲解。
1. EDA
探索性数据分析(Exploratory Data Analysis,简称EDA) 的目的是让我们对数据集有充分的了解。在这一步,我们探索的内容如下:
EDA内容
1.1 输入数据集
train = pd.read_csv('./data/train.csv')
test = pd.read_csv('./data/test.csv')
训练样本
train和test分别是训练集和测试集,分别有 1460 个样本,80 个特征。
SalePrice列代表房价,是我们要预测的。
1.2 房价分布
因为我们任务是预测房价,所以在数据集中核心要关注的就是房价(SalePrice) 一列的取值分布。
sns.distplot(train['SalePrice']);
房价取值分布
从图上可以看出,SalePrice列峰值比较陡,并且峰值向左偏。
也可以直接调用skew()和kurt()函数计算SalePrice具体的偏度和峰度值。
对于偏度和峰度都比较大的情况,建议对SalePrice列取log()进行平滑。
1.3 与房价相关的特征
了解完SalePrice的分布后,我们可以计算 80 个特征与SalePrice的相关关系。
重点关注与SalePrice相关性最强的 10 个特征。
# 计算列之间相关性
corrmat = train.corr()
# 取 top10
k = 10
cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index
# 绘图
cm = np.corrcoef(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()
与SalePrice高度相关的特征
OverallQual(房子材料和装饰)、GrLivArea(地上居住面积)、GarageCars(车库容量)和 TotalBsmtSF(地下室面积)跟SalePrice有很强的相关性。
这些特征在后面做特征工程时也会重点关注。
1.4 剔除离群样本
由于数据集样本量很少,离群点不利于我们后面训练模型。
所以需要计算每个数值特性的离群点,剔除掉离群次数最多的样本。
# 获取数值型特征
numeric_features = train.dtypes[train.dtypes != 'object'].index
# 计算每个特征的离群样本
for feature in numeric_features:
outs = detect_outliers(trai

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



