机器学习--sklearn库的详细学习记录(二)特征预处理

在对特征数据进行提取时我们通常会遇到以不同单位(衡量单位)的数据,其中较为典型的数据就是海伦约会数据,下面给出部分数据:

40920	8.326976	0.953952	largeDoses
14488	7.153469	1.673904	smallDoses
26052	1.441871	0.805124	didntLike
75136	13.147394	0.428964	didntLike
38344	1.669788	0.134296	didntLike
72993	10.141740	1.032955	didntLike
35948	6.830792	1.213192	largeDoses
  • 第一列代表的是每年飞行里程数
  • 第二列代表的是每周消耗的冰淇淋公升数
  • 第三列表示的是玩游戏所消耗时间百分比
  • 第四列表示的是评价largeDoses:有较高的兴趣;smallDoses:一般兴趣;didntLike:不喜欢

通过给出的数据我们可以看出,每一列数据表示的都不是同一个概念,不在同一个规格上,所以很难将其整合起来进行比较。这时我们则需要将数据进行处理,我的个人理解就是统一度量衡,专业的名词是无量纲化。将数据都转换成[0,1]之间的数据或者是自定义范围内的数据,这个过程我们就称为特征预处理

特征预处理的方法

特征预处理有很多种方法,这些方法都是由前人已经总结完善的,常用预处理方法有最大-最小标准化Z-score标准化函数转化等等,更加详细的内容大家可以参考这位老哥的博客数据归一化处理

最大-最小标准化

最大-最小标准化是对原始数据进行线性变换,设maxAminA分别是属性A的最大值和最小值,将一个原始值通过最大-最小标准化映射到区间[0, 1]上,那么公式如下
若想要映射到自定义的区间[mx,mi]中的话,则需要第二步公式
https://img-blog.csdnimg.cn/20200405213043800.png

使用的数据就是海伦快速约会数据,同时我要吐槽一下那些比较恶心的人,这些数据本就是可以找到的较为公开的数据,可是偏偏还是有人上传到某sdn上来骗取积分(10积分呢!!)大家可以上这个链接去下载数据。使用git clone即可下载。

该方法在sklearn.preprocessing中对应的方法为MinMaxScaler,接下来给出代码如下:

import pandas as pd
from sklearn.preprocessing import MinMaxScaler
...
def minmaxscaler():
    """
     对约会对象数据进行归一化处理
    :return:
    """
    #     读取数据
    #     由于数据是以制表符进行分割的,所以不采用默认的,进行分割
    dating = pd.read_csv("datingTestSet.txt", "\t")
    data = dating[["milage", "Liters", "Consumtime"]]
    mm = MinMaxScaler()
    data = mm.fit_transform(data)
    print(data)
    return None
  • 数据的归一化处理也是输出数据预处理,所以使用的API在sklearn.preprocessing,同时本人使用的是最大-最小标准化,对于的方法就是MinMaxScaler
  • 由于需要读入数据,所以使用了pandas库,相信学习机器学习的同学已经对pandas库已经有了一些了解,限于篇幅,本人将不介绍。
  • 初始化实例,出入数据并使用fit_transform,得出结果。
  • MinMaxScaler()是可以传入参数的,参数就是我们想要规定的数据范围,默认是[0,1]
  • 由于我给的数据是没有["milage", "Liters", "Consumtime"]的,所以大家注意对原数据进行添加一下,最后一列大家可以写成target

给出输出结果

[[0.15873259 0.34195467 0.98724416]
 [0.28542943 0.06892523 0.47449629]
 [0.82320073 0.62848007 0.25248929]
 ...
 [0.29115949 0.50910294 0.51079493]
 [0.52711097 0.43665451 0.4290048 ]
 [0.47940793 0.3768091  0.78571804]]
  • 结果与原数据是一一对应的,大家可以在没有实例化之前打印输出一次data的值进行对比
  • 这个特征预处理的方法较为简单但是也容易受到极值的影响,所以需要给出第二种特征与处理的方法。

Z-core标准化

通过对最大-最小标准化方法的数学公式进行分析我们也可以看出,这种方法是容易受到极端值的影响的,假如我们录入的最大值或是最小值出现错误,并且出现了极大的偏差这个时候会对所有的数据的特征预处理都造成较为严重的影响。

这个时候我们可以使用Z-core标准化方法。Z-score标准化是基于原始数据的均值标准差进行的数据标准化。将属性A的原始数据x通过Z-score标准化成结果数据x'。Z-score标准化适用于属性的最大值或者最小值未知的情况,或有超出取值范围的离散数据的情况。

该方法在sklearn.preprocessing中对应的方法为StandardScaler,接下来给出代码如下:

import pandas as pd
from sklearn.preprocessing import StandardScaler
...
def starndscaler():
    """
    对约会对象进行标准化处理
    :return:
    """
    dating = pd.read_csv("datingTestSet.txt", "\t")
    data = dating[["milage", "Liters", "Consumtime"]]
    ss = StandardScaler()
    data = ss.fit_transform(data)
    print(data)
    return None
  • 细心的同学想来已经发现了,和上面的代码仅仅只是实例化使用的API不一样,因为命名是StandardScaler,所以我们也说是标准化处理。
  • 转化的结果是将没一列的值都转换为均值为0标准差为1的范围
  • 我们较常使用的特征预处理方法就是这个标准化处理

结尾

结尾当然是老套路啦
1、欢迎大家订阅我的博客,希望大家可以学到更多的知识。
2、希望大家可以给我多提建议哦,手动笔芯。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值