数据挖掘学习笔记——kaggle 数据预处理

预处理

1. 删除缺失值

a. 删除行即样本(对于样本如果输出变量存在缺失的则直接删除该行,因为无法用该样本训练)

b. 删除列,即特征(采用这种删除方式,应保证训练集和验证集都应当删除相同的特征

1 cols_with_missing = [col for col in original_data.columns 
2                                  if original_data[col].isnull().any()]
3 redued_original_data = original_data.drop(cols_with_missing, axis=1)
4 reduced_test_data = test_data.drop(cols_with_missing, axis=1)

2. 插值

a.直接插值—使用sklearn的Impution类进行插值

1 from sklearn.preprocessing import Imputer
2 my_imputer = Imputer()
3 data_with_imputed_values = my_imputer.fit_transform(original_data)

b.使用sklearn的Impution类进行插值,同时增加额外的列,保存缺失值的信息(新增列为0或者1取值)

1 cols_with_missing = (col for col in new_data.columns if new_data[col].isnull().any())
2 for col in cols_with_missing:
3     new_data[col + '_was_missing'] = new_data[col].isnull()
4 my_imputer = Imputer()
5 new_data = my_imputer.fit_transform(new_data)  #注意返回值为数组格式,丢失列标,可通过DataFrame的columns属性进行找回

注意:fit_transform与transform的区别在于fit会先去拟合数据得到参数例如均值,方差,然后将参数用于数据转换,一般先用训练集去fit获取相关参数,然后再用训练集的参数去transform(这里指插值)训练集和测试 集保证,训练集和测试集基与同一参数进行转换

3. 处理分类变量

独热编码One-hot encode,通过将对分类变量的每个属性值映射为0和1对象,生成新的列,如下图所示,如果有十种属性则生成10列只有0和1取值的新列。

通常处理的时候使用DataFrame.nunique方法统计每一类的种类数,如种类数太多(建议不超过:15)的话,不建议进行独热编码

pandas里面有get_dumpies函数可以处理(默认只针对字符串及Object对象进行编码),sklearn里面有OneHotEncoder,只针对数字(好像很少用)

1 >>> df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'], 'C': [1, 2, 3]}) 2 输出: 3 A B C 4 0 a b 1 5 1 b a 2 6 2 a c 3 7 8 >>> pd.get_dummies(df) 9 输出: 10 C A_a A_b B_a B_b B_c 11 0 1 1 0 0 1 0 12 1 2 0 1 1 0 0 13 2 3 1 0 0 0 1

扫描二维码关注公众号,回复: 1603650 查看本文章

 s-折交叉验证

猜你喜欢

转载自www.cnblogs.com/xingzhelin/p/9175381.html
今日推荐