python standardscaler_使用Python机器学习工具scikit-learn:从类别变量中提取特征

Scikit-Learn是基于python的机器学习模块,基于BSD开源许可证。

这个项目最早由DavidCournapeau 在2007年发起的,目前也是由社区自愿者进行维护。它的主要特点有操作简单、高效的数据挖掘和数据分析、无访问限制、在任何情况下可重新使用、建立在NumPy、SciPy和matplotlib基础上、使用商业开源协议--BSD许可证等。scikit-learn的基本功能主要被分为六个部分,分类,回归,聚类,数据降维,模型选择,数据预处理等。

72c7464d3d900fff0964a91f5e3a2131.png

今天我们将运用Scikit-Learn从类别变量中提取特征。如果你喜欢,欢迎留言一起探讨。

从类别变量中提取特征

许多问题中的解释变量是类别变量或者名义变量。类别变量的取值范围是一组固定值。例如,一个预测职位薪水的应用可能会使用类似职位所在城市这样的类别变量。类别变量通常使用one-of-k编码算法或者one-hot编码算法进行编码,因此将使用一个二进制特征表示解释变量的所有可能取值。

例如,假设我们的模型中有一个city变量,该变量可以从下面3个值中取值:New York、San Francisco或者Chapel Hill。One-hot编码算法使用每个可能城市的二元特征来表示变量。scikit-learn类库中的Dictvectorizer类是一个可以对类别特征进行one-hot编码的转换器,具体用法如代码1.1所示:

代码1.1

# In[1]:from sklearn.feature_extraction import DictVectorizeronehot_encoder = DictVectorizer()X= [ {'city': 'New York'}, {'city': 'San Francisco'}, {'city': 'Chapel Hill'}]print(onehot_encoder.fit_transform(X).toarray())# Out[1]:[[ 0. 1. 0.] [ 0. 0. 1.] [ 1. 0. 0.]]

需要注意的是,特征的顺序在结果向量中是随机的。在第1个训练实例中,city的值是New York。特征向量的第2个元素代表New York值,它等同于第1个实例。

将一个类别解释变量用单个整数特征表示也许会比较直观。例如New York可以表示为0,San Francisco表示为1,Chapel Hill表示为2。这种表示法存在一些问题用整数表示城市会对现实中不存在的城市顺序进行编码,同时也会促使模型对城市进行没有意义的比较。没有什么自然顺序会使Chapel Hill的编号比San Francisco大1。One-hot编码算法避免了这个问题,它只对变量的值进行表示。

1.2 特征标准化

当学习算法使用标准化数据进行训练时会有更好的性能。回想一下,标准化数据有零平均值和单位方差。零平均值解释变量相对于原点居中,其平均值为0。当特征向量所有特征的方差处于相同量级,则拥有单位方差。如果一个特征的方差和其他特征的方差相差太大的数量级,该特征会控制学习算法,阻止算法从其他变量中学习。当数据没有标准化时,一些学习算法也会更慢地收敛到最佳参数值。除了我们在前一章中使用的StandardScaler转换器,prepocessing模块中的scale函数也可以用于单独对数据集的任何轴进行标准化,如代码1.2所示。

代码1.2

# In[1]:from sklearn import preprocessingimport numpy as npX = np.array([ [0., 0., 5., 13., 9., 1.], [0., 0., 13., 15., 10., 15.], [0., 3., 15., 2., 0., 11.]])print(preprocessing.scale(X))# Out[1]: [[ 0. -0.70710678 -1.38873015 0.52489066 0.59299945 -1.35873244] [ 0. -0.70710678 0.46291005 0.87481777 0.81537425 1.01904933] [ 0. 1.41421356 0.9258201 -1.39970842 -1.4083737 0.33968311]]

最后,RobustScaler是StandardScaler之外的另一个选择,它对于异常值具有更好的鲁棒性。StandardScaler会从在每个实例值上减去特征均值,然后除以特征的标准差。为了减轻大异常值的影响,RobustScaler会减去中位数,然后除以四分位差。四分位数通过把排序后的数据集等分为4个部分来计算。中位数是第2个四分位数,四分位差是第1个四分位数和第3个四分位数的差值。

40bf4721b0f9c0bf05ad04aa57b86222.png

END

本文摘自《scikit-learn机器学习(第2版)

喜欢的朋友欢迎关注我们,并将文章转发到朋友圈,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值