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

预处理

1. 删除缺失值

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

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

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

2. 插值

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

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

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

 cols_with_missing = (col for col in new_data.columns if new_data[col].isnull().any())
 for col in cols_with_missing:
     new_data[col + '_was_missing'] = new_data[col].isnull()
 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)的话,不建议进行独热编码

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

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

>>> df = pd.DataFrame({ 0 a b 1 1 b a 2 2 a c 3 >>> 0 1 1 0 0 1 1 2 0 1 1 2 3 1 0 0 0 1

s-折交叉验证

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

上一篇:【luogu】 P1433 吃奶酪


下一篇:深入springMVC------文件上传源码解析(上篇)