机器学习:数据集缺失值处理
缺失值是指粗糙数据中由于缺少信息而造成的数据的聚类、分组、删失或截断。它指的是现有数据集中某个或某些属性的值是不完全的。
缺失值的产生的原因多种多样,主要分为机械原因和人为原因。
机械原因是由于机械原因导致的数据收集或保存的失败造成的数据缺失,比如数据存储的失败,存储器损坏,机械故障导致某段时间数据未能收集(对于定时数据采集而言)。
人为原因是由于人的主观失误、历史局限或有意隐瞒造成的数据缺失,比如,在市场调查中被访人拒绝透露相关问题的答案,或者回答的问题是无效的,数据录入人员失误漏录了数据。
如果出现缺失值,我们有几种方法对缺失值进行处理。
第一种:删除法,删除存在缺失值的数据行,这里我推荐使用dropna()函数,方法是xx.drop(axis=0,subset=['含有缺失值的列'])或者xx.drop(how='all')这样可以删除所有含有缺失值的行。
第二种:填补法,如果我们的数据集很少,或者碰巧我们可能删除了一行重要的数据,为了避免这种情况出现,我们可以计算该特征中非缺失值的平均值,一般使用求平均值函数mean(),给定默认参数就是按列求平均值。然后利用fillna()函数,用求出的值填充缺失数据。使用方法是xx.fillna(xx[' 缺失列名'].mean(),axis=1)按列对缺失值填充进平均值。在scikit-learn里面对缺失值进行处理,我们可以使用如下方法对缺失值进行填补:
SimpleImputer(
missing_values=Nan, #缺失值的占位符
strategy='mean', #填补策略(这里选用均值填补)
axis=0, #按列进行填补
copy=True ) #True将创建xx的副本填充,False在xx上填充
strategy有三种方式‘mean’、‘median’、‘most_frequent’分别代表平均数、中位数和众数。
下面介绍一个案例加深对scikit-learn中imputer方法的认识。假设我们有一个关于青少年社交(teenager_sns)的数据集,里面的age列有缺失值,下面我们利用均值对缺失值进行填补。
from sklearn.impute import SimpleImputer
import numpy as np
import pandas as pd
data=read_csv(r'C:\Users\Liujiangchuan\Desktop\Work_zone\teenager_sns.csv')
data['age'].isnull().sum()
imp=SimpleImputer(missing_values=np.nan,strategy='mean')
imp.fit(data[['age']])
data['age_imputed]=imp.transform(data[['age']])
data['age_imputed'].isnull().sum()

浙公网安备 33010602011771号