哈喽,大家好。
今天给大家介绍一个非常适合新手入门的机器学习实战案例。
这是一个房价预测的案例,来源于 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&