机器学习1:数据预处理

1、 缺失值处理

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

>>>import pandas as pd

>>>df=pd.read_csv("train.csv")

#看各列非空值个数

>>>df.info()

#查看数据框各列缺失值个数

>>>df.isnull().sum()

 

1.1删除

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

#删除包含缺失值的行

df.dropna()

#删除包含缺失值的列

df.drop(axis=1)

#只删除所有特征值均为缺失值的行

df.dropna(how=‘all‘)

#只删除非缺失值在阈值以下的行

df.dropna(thresh=4)

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

缺点:以减少历史数据来换取信息的完备,会造成资源的浪费,丢弃了大量隐藏在这些对象中的信息

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

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

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

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

优点:处理简单、快速

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

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

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

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

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

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

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

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

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

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、 重复值处理

时间: 2024-10-25 08:10:49

机器学习1:数据预处理的相关文章

机器学习之数据预处理

归一化处理 from sklearn.preprocessing import StandardScaler X_scaler = StandardScaler() y_scaler = StandardScaler() X_train = X_scaler.fit_transform(X_train) y_train = y_scaler.fit_transform(y_train) X_test = X_scaler.transform(X_test) #同样的模型来训练转化测试数据 y_t

机器学习之数据预处理,Pandas读取excel数据

Python读写excel的工具库很多,比如最耳熟能详的xlrd.xlwt,xlutils,openpyxl等.其中xlrd和xlwt库通常配合使用,一个用于读,一个用于写excel.xlutils结合xlrd可以达到修改excel文件目的.openpyxl可以对excel文件同时进行读写操作. 而说到数据预处理,pandas就体现除了它的强大之处,并且它还支持可读写多种文档格式,其中就包括对excel的读写.本文重点就是介绍pandas对excel数据集的预处理. 机器学习常用的模型对数据输入

【机器学习】数据预处理之将类别数据转换为数值

在进行python数据分析的时候,首先要进行数据预处理. 有时候不得不处理一些非数值类别的数据,嗯, 今天要说的就是面对这些数据该如何处理. 目前了解到的大概有三种方法: 1,通过LabelEncoder来进行快速的转换: 2,通过mapping方式,将类别映射为数值.不过这种方法适用范围有限: 3,通过get_dummies方法来转换. 1 import pandas as pd 2 from io import StringIO 3 4 csv_data = '''A,B,C,D 5 1,2

python 机器学习之数据预处理

#数据预处理方法,主要是处理数据的量纲和同趋势化问题. import numpy as np from sklearn import preprocessing #零均值规范 data=np.random.rand(3,4)#随机生成3行4列的数据 data_standardized=preprocessing.scale(data)#对数据进行归一化处理,即每个数值减去均值除以方差 主要用于svm #线性数据变换最大最小化处理 data_scaler=preprocessing.MinMaxS

机器学习:数据预处理之独热编码(One-Hot)

在机器学习算法中,我们经常会遇到分类特征,例如:人的性别有男女,祖国有中国,美国,法国等.这些特征值并不是连续的,而是离散的,无序的.通常我们需要对其进行特征数字化. 那什么是特征数字化呢?例子如下: 性别特征:["男","女"] 祖国特征:["中国","美国,"法国"] 运动特征:["足球","篮球","羽毛球","乒乓球"] 假如某个

机器学习入门-数据预处理-数字映射和one-hot编码 1.LabelEncoder(进行数据自编码) 2.map(进行字典的数字编码映射) 3.OnehotEncoder(进行one-hot编码) 4.pd.get_dummies(直接对特征进行one-hot编码)

1.LabelEncoder() # 用于构建数字编码 2 .map(dict_map)  根据dict_map字典进行数字编码的映射 3.OnehotEncoder()  # 进行one-hot编码,输入的参数必须是二维的,因此需要做reshape,同时使用toarray() 转换为列表形式 3  pd.get_dummies(feature,drop_first=False) 如果填单个特征的话,只对一个特征做one-hot编码映射, drop_first表示去除one-hot编码后的第一列

面向机器学习:数据平台设计与搭建实践

机器学习作为近几年的一项热门技术,不仅凭借众多"人工智能"产品而为人所熟知,更是从根本上增能了传统的互联网产品.在近期举办的2018 ArchSummit全球架构师峰会上,个推首席数据架构师袁凯,基于他在数据平台的建设以及数据产品研发的多年经验,分享了<面向机器学习数据平台的设计与搭建>. 一.背景:机器学习在个推业务中的应用场景 作为独立的智能大数据服务商,个推主要业务包括开发者服务.精准营销服务和各垂直领域的大数据服务.而机器学习技术在多项业务及产品中均有涉及:基于用户

机器学习实战:数据预处理之独热编码(One-Hot Encoding)

问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 例如,考虑一下的三个特征: ["male", "female"] ["from Europe", "from US", "from Asia"] ["uses Firefox", "uses Chrome", "uses Safari", "uses Internet

特征提取(机器学习数据预处理)

特征提取(机器学习数据预处理) 特征提取与特征选择都是数据降维的技术,不过二者有着本质上的区别:特征选择能够保持数据的原始特征,最终得到的降维数据其实是原数据集的一个子集:而特征提取会通过数据转换或数据映射得到一个新的特征空间,尽管新的特征空间是在原特征基础上得来的,但是凭借人眼观察可能看不出新数据集与原始数据集之间的关联. 这里介绍2种常见的特征提取技术: 1)主成分分析(PCA) 2)线性判别分析(LDA) 1.主成分分析(PCA) 一种无监督的数据压缩,数据提取技术,通常用于提高计算效率,

08-05 细分构建机器学习应用程序的流程-数据预处理

目录 细分构建机器学习应用程序的流程-数据预处理 一.1.1 缺失值处理 1.1 1.1.1 删除缺失值 1.1.1 4.6.1.2 填充缺失值 二.1.2 异常值处理 三.1.3 自定义数据类型编码 四.1.4 通过sklearn对数据类型编码 五.1.5 独热编码 5.1 1.5.1 sklearn做独热编码 5.2 1.5.2 pandas做独热编码 六.1.6 数据标准化 6.1 1.6.1 最小-最大标准化 6.2 1.6.2 Z-score标准化 七.1.7 二值化数据 八.1.8