Kaggle 房价预测
1.检视源数据集,记得打开data_description.text看一下每组数据分别是什么含义。
2.合并数据(把training data 和 test data合并,一起处理)//也可以以相同方式进行两次处理····(泰坦尼克)
合并数据要写成如下形式:
train_df=pd.read_csv("E:/machine learning/houseprices/train.csv",index_col=0)
test_df=pd.read_csv("E:/machine learning/houseprices/test.csv",index_col=0)
2.1 %matplotlib inline是一个魔法函数(Magic Functions)。官方给出的定义是:IPython有一组预先定义好的所谓的魔法函数(Magic Functions),你可以通过命令行的语法形式来访问它们。可见“%matplotlib inline”就是模仿命令行来访问magic函数的在IPython中独有的形式。
2.2 DataFrame提供的是一个类似表的结构,由多个Series组成,而Series在DataFrame中叫columns
2.3 log1p = log(x+1)尽量变成正态分布的形式,使其结果不会偏
log1p函数有它存在的意义,即保证了x数据的有效性,当x很小时(如 两个数值相减后得到),由于太小超过数值有效性,用计算得到结果为0,换作log1p则计算得到一个很小却不为0的结果,这便是它的意义(好像是用泰勒公式来展开运算的,不确定)。同样的道理对于expm1,当x特别小,就会急剧下降出现如上问题,甚至出现错误值。
2.4 .hist() 用来创建直方图的函数
2.5 pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
2.6 pd.concat() #横向索引取并集,纵向索引取交集,注意该方法对对象表中有重复索引时失效 axis axis = 0, 表示在水平方向(row)进行连接 axis = 1, 表示在垂直方向(column)进行连接
3.特征转化:填补缺失的数据,把特殊含义数据分类,注意由数字表示其他含义而非单纯数字
3.1 把特殊含义数据分类
单个数据:
all_price['MSSubClass'].dtypes
all_price['MSSubClass']=all_price['MSSubClass'].astype[str]
all_price['MSSubClass'].value_counts()
pd.get_dummies(all_price['MSSubClass'],prefix='MSSubClass').head()
全部数据:
all_dummy_df=pd.get_dummies(all_price)
all_dummy_df.head()
3.2 填补缺失数据之填充平均数
mean_cols=all_dummy_df.mean()
all_dummy_df=all_dummy_df.fillna(mean_cols)
3.3 std函数是用来计算标准偏差的一个函数
3.4 让numerical的数据更平滑,更便于计算
法一:(源数据-均值)/标准偏差
numeric_col_means = all_dummy_df.loc[:, numeric_cols].mean()
numeric_col_std = all_dummy_df.loc[:, numeric_cols].std()
all_dummy_df.loc[:, numeric_cols] = (all_dummy_df.loc[:, numeric_cols] - numeric_col_means) / numeric_col_std
4.建立模型
4.1 把数据重新分回数据集与测试集
前提:
train_df=pd.read_csv("E:/machine learning/houseprices/train.csv",index_col=0)
test_df=pd.read_csv("E:/machine learning/houseprices/test.csv",index_col=0)
分回:
dummy_train_df = all_dummy_df.loc[train_df.index]
dummy_test_df = all_dummy_df.loc[test_df.index]
验证是否分回:
dummy_train_df.shape, dummy_test_df.shape
4.2 用Ridge Regression模型来跑一遍看看,并用Sklearn自带的cross validation方法来测试模型(对于多因子的数据集,这种模型可以方便的把所有的var都无脑的放进去)
交叉验证只验证训练集
4.3 用Random Forest模型来跑一遍看看
5 Ensemble集成
用一个Stacking的思维来汲取两种或者多种模型的优点
模型融合知识点:
- Adaboost 做得对的地方权重减少,偏离的地方权重增大,继续进行分类,给到第二棵树直到第n棵树,起到一个减少过拟合的作用,再做
- Stacking 多个结果取线性或者别的模型进行总结提升,汲取多种模型优点
- Bagging 多个结果求平均/投票
6 提交结果