删除
删除含缺失数据的特征
dropna() 丢弃缺失值
dropna()
#一行全为NaM的才丢弃,默认how='any'
dropna(how='all')
#一行至少有n个非空值就保留
dropna(thresh=n)
#一行有NaN就丢弃,默认为axi=0
dropna(axis=1)
填补
替代
均值插补
fmedian = ['缺失列名字1'].median() #中位数
fmean = ['缺失列名字2'].mean() #平均值
fillna({'缺失列名字1':fmedian
'缺失列名字2':fmean})
热卡填补
对于一个包含空值的对象,热卡填充法在完整数据中找到一个与它最相似的对象,然后用这个相似对象的值来进行填充。不同的问题可能会选用不同的标准来对相似进行判定。该方法概念上很简单,且利用了数据间的关系来进行空值估计。这个方法的缺点在于难以定义相似标准,主观因素较多。(网上看到的,具体怎么操作也没例子。。。)
K均值
就是用knn预测一下缺失的数据
knn = KNeighborsClassifier()
knn.fit(x_train, y_train) #完整的特征项,完整的特征值
y_predict = knn.predict(x_test) #缺失的特征项
拟合
回归
建立回归方程。对于包含空值的对象,将已知属性值代入方程来估计未知属性值,以此估计值来进行填充。当变量不是线性相关时会导致有偏差的估计。
极大似然估计
用概率密度函数参数去拟合采样的结果
多重插补
https://blog.youkuaiyun.com/sinat_26917383/article/details/51265213
R实现的多重插补
#多重插补法处理缺失,结果转存
library(lattice) #调入函数包
library(MASS)
library(nnet)
library(mice) #前三个包是mice的基础
imp=mice(inputfile,m=4) #4重插补,即生成4个无缺失数据集
fit=with(imp,lm(sales~date,data=inputfile))#选择插补模型
pooled=pool(fit)
summary(pooled)
result4=complete(imp,action=3)#选择第三个插补数据集作为结果
随机森林
包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定
class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False, class_weight=None)
图片来源:https://www.zhihu.com/question/34470160
关于调参已经很详细了,不必再赘述
衍生
将缺失与否设置为一个新的特征(假设为Y2),当原特征Y1无缺失时Y2=0,反之Y2=1
忽略
略。。。