房价预测
背景
kaggle 房屋价格预测
最近想去kaggle找几个项目做做,提升自己的实战能力,就把这个入门级的房子价格预测项目来过来从头到尾梳理一遍,这个熟练之后再做其他的整体上应该不会出现什么问题了,对于模型的训练的话传统机器学习大部分时间还是在数据预处理上面的,其实个人还是拥抱深度学习的,但是传统机器学习还是有很多思路值得我们细细体会的分析
房子价格预测是一个回归问题工具
pandas
随机森林
数据预处理
数据预处理
我们在让随机森林运行起来之前还有一件事要做:随机森林虽然理论上可以应对分类特征(非数据形式:字符串)和数据缺失,scikit-learn 实现却并不支持这两种情况。所以我们需要使用 pd.interpolate() 来填充缺失的值,然后使用 pd.get_dummies() 的『One-Hot Encoding』来将分类特征转换为数字特征。这个方法非常简单,让我们假设一个分类变量有 n 个可能值。该列被分为 n 个列,每一列对应一个原始值(相当于对每个原始值的『is_value?』)。每个观察值(以前有一个分类变量的字符串值),现在在旧字符串值对应的列上有一个 1,而其他所有列上为 0。
- model
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
path = "/Users/heiqie/Documents/dataset/kaggle/house_price/"
//导入训练集
df_train = pd.read_csv(f'{path}train.csv',index_col='Id')
//导入测试集
df_test = pd.read_csv(f'{path}test.csv',index_col='Id')
//训练集中已经存在的预测的价格
target = df_train['SalePrice']
df_train = df_train.drop('SalePrice',axis=1)
//下面这一段主要是 先把训练集和测试集连接在一起 做一些缺失数据的处理
//和字符串转化(转换成数值类型)
df_train['training_set'] = True
df_test['training_set'] = False
df_full = pd.concat([df_train,df_test])
df_full = df_full.interpolate()
df_full = pd.get_dummies(df_full)
df_train = df_full[df_full['training_set']==True]
df_train = df_train.drop('training_set', axis=1)
df_test = df_full[df_full['training_set']==False]
df_test = df_test.drop('training_set', axis=1)
//训练模型
rf = RandomForestRegressor(n_estimators=100,n_jobs=-1)
rf.fit(df_train,target)
//在测试集上预测
preds = rf.predict(df_test)
my_submission = pd.DataFrame({'Id':df_test.index,'SalePrice':preds})
//预测结果保存到文件里
my_submission.to_csv(f'{path}submission.csv',index=False)
- result