1、 缺失值处理

首先根据df.info()可查看各列非空值个数;df.isnull().sum()可查看数据框各列缺失值个数

 

1.1删除

适合缺失值数量较小(例如占比在5%以下),并且是随机出现的,删除它们对整体数据影响不大

df.dropna() #删除包含缺失值的行

df.drop(axis=1) #删除包含缺失值的列

df.dropna(how='any') #只要含有缺失值,则删除此行

df.dropna(how='all') #只删除所有特征值均为缺失值的行df.dropna(thresh=4)  #只保留非缺失值在阈值以上的行

若某特征值的缺失值占比过大(如超过80%),考虑删除此特征,否则会给模型带入较大噪声,造成不良影响

df.drop['A']

缺点:

l   删除过多样本会导致分析结果可靠性不高

l   删除过多的特征列会丢失数据中的大量信息

1.2使用均值或条件均值填充

#根据A列的均值替代缺失值

data_train['A'].fillna(data_train['A'].mean())

#根据B到D列的均值替代缺失值

data_train['A'].fillna(data_train.mean()['B': 'D'])

使用每行的均值代替缺失值的代码如下:

from sklearn.preprocessing import Imputer

imr=Imputer(missing_values='NaN',strategy='mean',axis=0)

imr=imr.fit(df)

imputed_data=imr.transform(df.values)

#若axis=1则用每列均值替代

#若strategy=median或most_frequent,则表示用中位数或众数替代

优点:用现存数据的多数信息来推测缺失值,不会让数据严重失真,避免产生有偏估计

缺点:可能使变量的均值趋近于填充值,方差趋近于0,从而破坏了数据的随机性,使得整个样本的信息量大幅下降

1.3使用众数、中位数、随机值、上下数据、分位数填充

#运用前一个或后一个数据进行填充的代码分别如下:

data_train.fillna(method='pad')

data_train.fillna(method='bfill')

#在[μ-σ,μ+σ]范围内的随机值替代缺失值的代码如下:

average_age_titanic   = titanic_df["Age"].mean()

std_age_titanic       = titanic_df["Age"].std()

count_nan_age_titanic = titanic_df["Age"].isnull().sum()

rand = np.random.randint(average_age_titanic - std_age_titanic, average_age_titanic + std_age_titanic, size = count_nan_age_titanic)

titanic_df["Age"][np.isnan(titanic_df["Age"])] = rand

优点:处理简单、快速

缺点:易产生有偏估计,形成人为噪声

1.4 利用其它特征值建立模型预测缺失值

构建回归、K-Means、贝叶斯、决策树、随机森林等模型归纳确定。

优点:利用了数据集中尽量多的信息,预测值可能接近于真实值,一定程度上能提高模型性能

缺点:可能在模型中引入自相关或有偏估计,给分析造成障碍。若其它特征值与预测特征值无关,则预测结果无意义;若预测结果相当准确,则该特征值不应加入模型

1.5把变量映射到高维空间(或引入虚拟变量dummy variable):

比如性别有男、女、缺失三种情况,则映射成3个变量:是否男、是否女、是否缺失。

sex_dummies_df = pd.get_dummies(df['Sex'], prefix='Sex')

sex_dummies_df.drop(['Sex'], axis=1, inplace=True)

df = df.join(sex_dummies_df)

优点:完整保留了原始数据的全部信息、不用考虑缺失值、不用考虑线性是否可分等问题

缺点:数据维度的大幅上升使得计算量显著上升。而且只有在样本量足够大时才有较好效果,否则会因为过于稀疏导致效果不佳。

1.6 期望值最大化方法(Expectation maximizationEM

假设模型对于完整的样本是正确的,那么通过观测数据的边际分布可以对未知参数进行极大似然估计。对于极大似然的参数估计实际中常采用的计算方法是期望值最大化。

优点:利用了数据集中尽量多的信息,预测值可能接近于真实值,一定程度上能提高模型性能

缺点:只适用于大样本,足够数量的有效样本才能保证极大似然估计值是渐近无偏的并服从正态分布。而且这种方法可能会陷入局部极值,同时计算量较大使得收敛速度较慢。

1.7热卡插补

热卡插补法是依照辅助变量的不同条件,将未出现缺失值的观察值分类成若干的“插补单元”,每一个出现缺失值的观察值,依据辅助变量的条件,从相对应的插补单元中找寻一个观察体,以其观测所得的变量数值代替缺失值。

优点:利用数据间的关系来进行缺失值插补,有较高准确率;特征的整体方差与插补前比较接近,避免数据信息量的下降

缺点:难以定义相似标准,主观因素较多;特征数量较多时,难以找到与需要插补样本相似的样本,计算量较大,比较耗时

1.8 人工填写和特殊值填充一般不推荐使用

以上方法各有优缺点,具体情况要根据实际数据分分布情况、倾斜程度、缺失值所占比例等等来选择方法。一般而言,建模法是比较常用的方法,它根据已有的值来预测缺失值,准确率更高。

2、 异常值处理

1.1简单的统计分析

拿到数据后可以对数据进行一个简单的描述性统计分析,譬如最大最小值可以用来判断这个变量的取值是否超过了合理的范围,如客户的年龄为-20岁或200岁,显然为异常值。在python中可以直接用pandas的describe():

1.2 3σ准则

如果数据服从或近似服从正态分布,数值分布在(μ-3σ,μ+3σ)中的概率为99.74%, 可以认为取值几乎全部集中在(μ-3σ,μ+3σ)区间内,超出这个范围的概率为P(|x-μ| > 3σ) <= 0.3%,属于极个别的小概率事件,即为异常值。

这种判别处理原理及方法仅局限于对正态或近似正态分布的样本数据处理,

但实际数据往往并不严格服从正态分布。它们判断异常值的标准是以计算数据的均值和标准差为基础的,而均值和标准差的耐抗性极小,异常值本身会对它们产生较大影响。显然,应用这种方法于非正态分布数据中判断异常值,其有效性是有限的。

1.3箱型图分析

如果一个值在【QL-1.5IQR, QU+1.5IQR】之外,则被称为异常值。QL为下四分位数, QU为上四分位数,IQR为四分位数间距,是QU与QL的差值,包含了全部观察值的一半。

箱型图判断异常值的方法以四分位数和四分位距为基础,四分位数具有鲁棒性:25%的数据可以变得任意远且不会干扰四分位数,所以异常值不能对这个标准施加影响。因此箱型图识别异常值比较客观,在识别异常值时有一定的优越性。

1.4基于模型检测

首先建立一个数据模型,异常是那些同模型不能完美拟合的对象;如果模型是簇的集合,则异常是不显著属于任何簇的对象;在使用回归模型时,异常是相对远离预测值的对象

优点:有坚实的统计学理论基础,当存在充分的数据和所用的检验类型的知识时,这些检验可能非常有效;

缺点:对于多元数据,可用选择少一些,并且对于高维数据,检测的可靠性很差。

1.5基于距离

通常可以在对象之间定义邻近性度量,异常对象是那些远离其他对象的对象

优缺点:1.简单;2.缺点:基于邻近度的方法需要O(m2)时间,大数据集不适用;3.该方法对参数的选择也是敏感的;4.不能处理具有不同密度区域的数据集,因为它使用全局阈值,不能考虑这种密度的变化。

1.6基于密度

当一个点的局部密度显著低于它的大部分近邻时才将其分类为离群点。适合非均匀分布的数据。

优缺点:1.给出了对象是离群点的定量度量,并且即使数据具有不同的区域也能够很好的处理;2.与基于距离的方法一样,这些方法必然具有O(m2)的时间复杂度。对于低维数据使用特定的数据结构可以达到O(mlogm);3.参数选择困难。虽然算法通过观察不同的k值,取得最大离群点得分来处理该问题,但是,仍然需要选择这些值的上下界。

1.7基于聚类

基于聚类的离群点:一个对象是基于聚类的离群点,如果该对象不强属于任何簇。离群点对初始聚类的影响:如果通过聚类检测离群点,则由于离群点影响聚类,存在一个问题:结构是否有效。为了处理该问题,可以使用如下方法:对象聚类,删除离群点,对象再次聚类(这个不能保证产生最优结果)。

优缺点:1.基于线性和接近线性复杂度(k均值)的聚类技术来发现离群点可能是高度有效的;2.簇的定义通常是离群点的补,因此可能同时发现簇和离群点;3.产生的离群点集和它们的得分可能非常依赖所用的簇的个数和数据中离群点的存在性;4.聚类算法产生的簇的质量对该算法产生的离群点的质量影响非常大。

处理方法:

1.删除异常值----明显看出是异常且数量较少可以直接删除

2.不处理---如果算法对异常值不敏感则可以不处理,但如果算法对异常值敏感,则最好不要用,如基于距离计算的一些算法,包括kmeans,knn之类的。

3.平均值替代----损失信息小,简单高效。

4.视为缺失值----可以按照处理缺失值的方法来处理

3、 重复值处理

data.duplicated()

data.drop_duplicates(['A'])

转载于:https://www.cnblogs.com/albertsr/p/7420097.html

机器学习(一):数据预处理相关推荐

  1. 机器学习PAL数据预处理

    机器学习PAL数据预处理 本文介绍如何对原始数据进行数据预处理,得到模型训练集和模型预测集. 前提条件 完成数据准备,详情请参见准备数据. 操作步骤 登录PAI控制台. 在左侧导航栏,选择模型开发和训 ...

  2. 机器学习之数据预处理——归一化,标准化

    机器学习之数据预处理--归一化,标准化 基础知识 1.什么是特征预处理 2.预处理方法 : 3.预处理API: 数据的标准化(normalization)和归一化 数据的标准化 数据归一化 1 把数变 ...

  3. 机器学习之数据预处理——数据清洗(缺失值、异常值和重复值的处理)

    机器学习之数据预处理--数据清洗缺失值.异常值和重复值的处理 基础知识 技术点总结 数据列缺失的处理方法 1.丢弃(缺失值处理) 1.生成一份随机数据 2.查看哪些值缺失 3.获得含有NA的列 4.获 ...

  4. 机器学习之数据预处理——特征编码(标签编码,独热编码)

    机器学习之数据预处理--特征编码 数据预处理--特征编码 离散数据的编码 标签编码 sklearn LabelEncoder(使用fit_transform函数) sklearn LabelEncod ...

  5. 机器学习之数据预处理

    在sklearn之数据分析中总结了数据分析常用方法,接下来对数据预处理进行总结 当我们拿到数据集后一般需要进行以下步骤: (1)明确有数据集有多少特征,哪些是连续的,哪些是类别的 (2)检查有没有缺失 ...

  6. 负数如何归一化处理_机器学习之数据预处理

    第一节:前言 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已.由此可见,特征工程在机器学习中占有相当重要的地位. 特征工程:利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能 ...

  7. [机器学习-sklearn]数据预处理要点总结

    数据预处理要点总结 1. 为什么要数据预处理 2. 数据中存在缺失值 2.1 查看数据的完整性(missingno) 2.2 简单删除法 2.3 人工填写(filling manually) 2.4 ...

  8. 数据标准化处理方法_机器学习系列-数据预处理-数据标准化(归一化)-理论

    在做一个具体的机器学习项目中,拿到收集到的数据后,一般都是需要做数据预处理,而标准化(暂时不考虑标准化和归一化的主要区别)是数据预处理中一个比较重要的环节,那么为什么需要对数据进行标准化处理呢? 数据 ...

  9. 机器学习中数据预处理——标准化/归一化方法(scaler)

    由于工作问题比较忙,有两周没有总结一下工作学习中遇到的问题. 这篇主要是关于机器学习中的数据预处理的scaler变化. 工作中遇到的问题是:流量预测问题,拿到的数据差距非常大,凌晨的通话流量很少几乎为 ...

  10. 深入浅出Python机器学习9——数据预处理、降维、特征提取及聚类

    数据预处理 使用 StandScaler 进行数据预处理 首先手工生成一些数据:        用make_blobs 函数时,指定了样本数量 n_samples 为 40,分类 centers 为 ...

最新文章

  1. [转]ASP.NET 缓存(十六)--检索缓存项的值
  2. python爬虫——web前端基础(1)
  3. 织梦dedecms出现DedeCMS Error: (PHP 5.3 and above) Please set 'request_order' ini value to i解决办法...
  4. 权限管理,pymysql模块
  5. 禅道11.0windows本机安装
  6. php对mysql的操作教程,php与Mysql的一些简单的操作
  7. Adaptive Images : 为不同的屏幕尺寸提供不同的图片
  8. 富士康iPhone生产线自动化进展太缓,所以无法遵守中国的加班条例?
  9. 《操作系统》学习辅导
  10. java课程设计报告_JAVA课程设计报告_完整版.doc
  11. 天涯明月刀手游服务器维护中,《天涯明月刀手游》12月17日服务器维护更新公告...
  12. 机架式服务器主要内部组件,戴尔R815机架式服务器
  13. 无线传输 android下载,无线文件传输 WiFi File Transfer
  14. 小女子做销售 四大温柔手段
  15. 2020,不会分布式怎么可以,这2份pdf共1000+,从原理到系统实现都包含了
  16. 农村科学实验杂志农村科学实验杂志社农村科学实验编辑部2022年第12期目录
  17. c语言实验选择结构程序设计
  18. Python最强干货,建议收藏!!
  19. Python可视化陈氏和R语言--星型图形展示
  20. [Mac OS X] 如何在终端查看 Mac OS 版本信息

热门文章

  1. 大型WEB系统架构的那些组成
  2. 什么是分布式垃圾回收(dgc)?它是如何工作的?_激荡60年——垃圾回收与Go的选择...
  3. 基础数据类型的坑和集合及深浅copy
  4. Material使用05 MdListModule模块 MdButtonToggleModule模块
  5. C++原型模式和模板模式
  6. 20155226-虚拟机与Linux之初体验
  7. pthread_cond_timedwait方法Linux时间编程
  8. .NET中的加密类(对称加密)
  9. Axis2 生成客户端
  10. c3p0,dbcp与druid 三大连接池的区别[转]