机器学习---数据预处理

2.1数据无量纲化
在机器学习算法时间中,我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布的需求,这种需求统称为将数据“无量纲化”。譬如梯度和矩阵为核心的算法中,譬如逻辑回归,支持向量机,神经网络,无量纲化可以加快求解速度;而在距离类模型,譬如K近邻,K-Means聚类中,无量纲化可以帮我们提升模型精度,避免某一个取值范围特别大的特征对距离计算造成影响。(一个特例决策树和树的集成算法们,对决策树我们根本不需要无量纲化,
决策树可以把任意数据都处理得很好。)数据的无量纲化可以是线性的,也可以是非线性的,线性的无量纲化包括中心化处理和缩放处理。中心化的本质是让所有记录减去 一个固定值,即让数据样本平移到某个位置,缩放的本质是通过除以一个固定值将数据固定早某个范围之中,取对数也算一种缩放处理。

preprocessing.MinMaxScaler
当数据(x)按照最小值中心化后,再按极差(最大值-最小值)缩放,数据移动了最小值个单位,并且会被收敛到[0,1]之间,而这个过程,就叫做数据归一(Normalization,又称Min-Max Scaling)。在sklearn当中,我们使用 preprocessing.MinMaxScaler来实现这个功能。MinMaxScaler有一个重要参数feature_range,控制我们希望把数据压缩到的范围,默认为[0,1].。preprocessing.StandarScaler
当数据x按均值中心化后,再按标准差i缩放,数据就会服从均值为0,方差为1的正态分布,而这个过程就叫做数据标准化(Standardization,又称Z-score normalization),公式如下:

对于StandardScaler和MinMaxScaler来说,空值NaN会被当作是缺失值,再fit的时候忽略,再transform的时候保持缺失值的状态显示,并且,尽管去量纲化的过程不是具体算法,但在fit接口中,依然只允许导入二维数组,一维数组导入会报错。通常来说,我们输入的X会是我们的特征矩阵,现实案例中特征矩阵不太可能是一维所以不会存在这个问题。

StandardScaler和MinMaxScaler选哪个?
看情况。大多机器学习算法中,会选择StandardScaler来进行特征缩放,因为MinMaxScaler对异常值非常敏感。在PCA,聚类,逻辑回归,支持向量机,神经网络这些算法中,StandardScaler往往是最好的选择。MinMazScaler在不涉及距离度量,梯度,协方差计算以及数据需要被压缩到特定区间时使用广泛,比如数字图像处理中量化像素强度时都会使用MinMaxScaler将数据压缩于[0.1]区间之中。

2.2缺失值:
机器学习和数据挖掘中使用的数据,永远不可能是完美的,很多特征,对于分析和建模来说意义非凡,但对实际收集数据的人却不是如此,因此数据挖掘之中,常常会有重要字段缺失值很多,但又不能舍弃,所以数据预处理中非常重要的一项就是处理缺失值。
impute.SimpleImputer class.sklearn.impute.SimpleImputer(missing_values=nan,strategy=‘mean’,fill_value=No ne,verbose=0,copy=True)
在讲解随机森林的案例时,我们用这个类和随机森林回归填补了缺失值,对比了不同的缺失值填补方式对数据的影响。这个类是专门用来填补缺失值的,它包括四个重要参数:
missing_values:告诉SimpleImputer,数据中的缺失值长什么样,默认空值np.nan
strategy:1)我们填补缺失值的策略,默认均值。
2)输入“mean”使用均值填补(仅对数值型特征可用)
3)输入“median”用中值填补(仅对数值型特征可用)
4)输入“most_frequent”用众数填补(对数值型和字符型都可用)
5)输入“constant”表示请参考参数“fill_value”中的值(对数值型和字符型都可用)
fill_value:当参数strategy为“constant”的时候可用,可输入字符串或数字表示要填充的值,常用0
copy:默认为True,将创建特征矩阵副本,反之则会将缺失值填补到原本的特征矩阵中去

2.3处理分类型特征:编码与哑变量
在机器学习中,大多数算法,譬如逻辑回归,支持向量机SVM,k近邻算法都只能够处理数值型数据,不能处理文字,在sklearn当中,除了专用来处理文字的算法,其他算法在fit的时候全部要求输入数组或矩阵,也不能够导入文字型数据
(其实手写决策树和普斯贝叶斯可以处理文字,但sklearn中规定必须导入数值型)。然而在现实中,许多标签和特征在数据收集完毕的时候,都不是以数字表现的,比如说,学历的取值可以是[“小学”“初中”“高中”“大学”],付费方式可能包含[‘支付宝’,‘现金’,‘微信’]等等。在这种情况下,为了让数据适应算法和库,我们必须将数据进行编码,即是说,将文字型数据转换为数值型。
preprocessing.LabelEncoder:标签专用,能够将分类转换为分类数值
preprocessing.OrdinalEncoder:特征专用,能够将分类特征转换为分类数值
preprocessing.OneHotEncoder:独热编码,创建哑变量
我们在转换特征值为数值型时,大多带有不可计算,不可比较,无顺序等性质,但若值用第一和第二中进行编码,就会带入一些原本不具备的性质,
举个例子:性别:“男”,“女”,是两个特征值,它们不可计算,不可比较,你不能说男大于女,也不能说男等于女的多少倍,而且也没有谁先谁后的
顺序,但若用前面两种编码,就会变成0和1,那么这个时候电脑是可以进行计算的,而且可以比较,1大于0嘛,甚至有先0后1的顺序。
所以这种情况就会给电脑带入不正确的信息,于是我们便可以使用独热编码来消除这些性质。
在这里插入图片描述ru如图所示,独热编码用与其相同个数的位数来表示,每一个特征值对应一行。

2.4处理连续型特征:二值化(sklearn.preprocessing.Binarizer)
根据阈值将数据二值化(将特征值设置为0和1),用于处理连续型变量,大于阈值的值映射为1,而小于或等于阈值的值映射为0,默认值阈值为0时,特征值中的所有正值都映射到1。二值化是对文本计数数据的常见操作,分析人员可以绝对仅考虑某种现象的存在与否,它还可以用作考虑布尔随机变量的估计器的预处理步骤。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值