样本集的简单封装
D = (numpy.random.randn(N, d), numpy.random.randint(low=0, high=2, size=(N, ))) # D[0] ⇒ X # D[1] ⇒ y
0. 数据预处理
label 平滑化,对不平滑的label,一般是回归问题,连续型的label,进行平滑处理;
- 对比观察是否平滑:
>> prices = pd.DataFrame({'price': train_df.SalePrice, 'log1p(train_df.SalePrice)'}) >> prices.hist()
- 如果有平滑的必要,使用 log1p 进行平滑,log1p 避免了数值溢出;
>> train_y = np.log1p(train_df.pop('SalePrice'))
- 如果我们这里把数据都给平滑化了,那么最后算结果的时候,要记得把预测到的平滑数据给变回去。
- np.log ⇒ np.exp
- np.log1p ⇒ np.expm1
1. One Hot Encoder 编码
- One Hot Encoder 编码针对的是非数值型(numerical),而是类别型(categorical)特征;
- One Hot Encoder 有时会带来维度的激增,而维度的激增会使得最终的识别结果存在过拟合的风险;
- 一个现实的例子即是,比如对商店ID,这一属性,其取值有上千个,对其做One Hot Encoder,显然会带来维度的极大提升,一个解决方案即是:
- 首先对这些商店进行聚类分析,将几千个商店ID,聚类为几十几百个商店种类;
- 然后再进行 one hot encoder;