基于模型的方法会将含有缺失值的变量作为预测目标 将数据集中其他变量或其子集作为输入变量,通过变量的非缺失值构造训练集,训练分类或回归模型 使用构建的模型来预测相应变量的缺失值
是一种数据科学领域的经典学习算法 用来刻画响应变量与自变量之间的关系 线性回归模型的数学表达式为:
这样,一个缺失值填补的问题就成为一个经典的回归预测问题
通过计算训练集样本与目标样本的相似性,“鼓励”每个样本与目标样本去匹配 根据给定条件,选择最适合的K个样本作为目标样本的“邻居” 相似性的度量有以下选择:
计算距离:给定目标样本,计算它与训练集中每个样本的距离 寻找邻居:选择距离最近的K个训练集样本,作为目标样本的近邻 分类预测:根据近样本的所属类别,或者属性的取值来预测目标样本的类别或者属性取值
当预测某个样本的缺失属性时,KNN会先去寻找与该样本最相似的K个样本 通过观察近邻样本的相关属性取值,来最终确定样本的缺失属性值
把gender属性作为目标属性,36个表征兴趣的属性作为输入属性
import pandas as pd
import numpy as np
teenager = pd.read_csv('./input/teenager.csv')
teenager['gender'].value_counts(dropna=False)
na_index = teenager[teenager['gender'].isnull()].index.values
# 不含有缺失值的索引, 可作为我们的训练集
normal_index = teenager[~teenager['gender'].isnull()].index.values
# x为兴趣爱好,y为性别
trainX = teenager.iloc[normal_index]
trainY = teenager.iloc[normal_index,1]
trainX.head()
testX = teenager.iloc[na_index]
testY = teenager.iloc[na_index,1]
# 计算欧式距离
distances = []
for item in testX.iloc[:,4:].values:
dist = {}
for index, item1 in enumerate(trainX.iloc[:,4:].values):
distance = np.sqrt(np.sum(np.square(item - item1)))
dist[index] = distance
distances.append(dist)
enumerate()函数,可以在生成值得时候能够自定生成递增序列
enumerate(trainX.iloc[:,4:].values)
本次的分享就到这里