机器学习中关于缺失值的处理

目前处理缺失值的方法有以下几种,

1.用平均值、中值、分位数、众数、随机值等替代。

用sklearn的相关包进行缺失值填充,strategy可以赋值为‘mean’,‘median’,‘most_frequent’,分别代表均值,中位数,众数。

import pandas as pd
from sklearn.preprocessing import Imputer

train_data = pd.read_csv('/360/featureEngineer/trainData/train_data.csv')
values_data = train_data.values
imputer = Imputer(missing_values='NaN', strategy='mean', axis=0)
data_filled = imputer.fit_transform(values_data)

也可以将NaN值作为一个特征,用0填充

import pandas as pd

data = pd.read_csv('data.csv')
data_filled = data.fillna(0)

用均值填充 

data.fillna(data.mean())        # 将所有行用各自的均值填充

data.fillna(data.mean()['f4':'f50']) # 可以指定某些行进行填充

用上下数进行填充

data.fillna(method='pad')   # 用前一个数据代替NaN

data.fillna(method='bfill')  # 用后一个数据代替NaN

用插值法进行填充

data.interpolate()   # 插值法是通过两点(x0,y0),(x1,y1)估计中间值的点

以上方法效果一般,因为等于人为增加了噪声。

2.用其他变量作为预测模型来算出缺失变量。
参考方法用随机森林算法,利用数据表中某些没有缺失的特征属性来预测某特征属性的缺失值。效果比方法1好点。有一定的缺点,如果其他变量与缺失值变量无关,则预测的结果无意义。如果预测结果相当准确,则又说明这个变量是没有必要加入建模的。一般情况下,介于两者之间。

3.最有效的做法,是将变量映射到高维空间。详情可以参考Google、百度的CTR预估模型。

你可能感兴趣的:(机器学习,人工智能)