结合sklearn进行特征工程

1 前言

该篇博客主要涉及到sklearn.feature_selection 以及其他相关模型,主要介绍了如何利用sklearn进行特征工程,特征工程在机器学习中占有工程师的大部分精力,目前也有很多成熟的方法和理论,但是结合实际业务背景选择特征仍然是提升模型性能的关键点。sklearn.feature_selection是一个强大的特征处理工具包,磨刀不误砍柴工,熟练使用工具是重中之重!以下是特征工程的概要图。

特征工程

2 数据预处理

  1. 不属于同一量纲:即特征的规格不一样,不能够放在一起比较。无量纲化可以解决这一问题。
  2. 缺失值处理:包括缺失值删除及补充。

导入数据集,sklearn具有自动生成数据集工具包例如sklearn.dataset.make_classification,也有标准数据集比如sklearn.dataset.load_boston,sklearn.dataset.load_iris,下面是鸢尾花IRIS数据的下载程序

from sklearn.datasets import load_iris

#导入IRIS数据集
iris = load_iris()
#特征矩阵
dataset = iris.data

#目标向量
labels = iris.target

print "特征矩阵\n",dataset[:5,:]
print '标签\n',set(labels)
特征矩阵
[[ 5.1  3.5  1.4  0.2]
 [ 4.9  3.   1.4  0.2]
 [ 4.7  3.2  1.3  0.2]
 [ 4.6  3.1  1.5  0.2]
 [ 5.   3.6  1.4  0.2]]
标签
set([0, 1, 2])

2.1 数据无量纲化

无量纲化使不同规格的数据转换到同一规格。常见的无量纲化方法有标准化和区间缩放法。标准化的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。区间缩放法利用了边界值信息,将特征的取值区间缩放到某个特定的范围,例如[0, 1]等。

2.1.1 标准化

标准化需要计算每个特征的均值和标准差,公式表达为:
x=xX¯S

使用preproccessing库的StandardScaler类对数据进行标准化的代码如下:
标准化之后的数据范围在[-1,1]之间

至于为什么用.fit_transform(),可参考http://www.cnblogs.com/jasonfreak/p/5448462.html

from sklearn.preprocessing import StandardScaler

#标准化,返回值为标准化后的数据,矩阵形式,下面只显示了前10行数据
StandardScaler().fit_transform(dataset)[:10,:]
array([[-0.90068117,  1.03205722, -1.3412724 , -1.31297673],
       [-1.14301691, -0.1249576 , -1.3412724 , -1.31297673],
       [-1.38535265,  0.33784833, -1.39813811, -1.31297673],
       [-1.50652052,  0.10644536, -1.2844067 , -1.31297673],
       [-1.02184904,  1.26346019, -1.3412724 , -1.31297673],
       [-0.53717756,  1.95766909, -1.17067529, -1.05003079],
       [-1.50652052,  0.80065426, -1.3412724 , -1.18150376],
       [-1.02184904,  0.80065426, -1.2844067 , -1.31297673],
       [-1.74885626, -0.35636057, -1.3412724 , -1.31297673],
       [-1.14301691,  0.10644536, -1.2844067 , -1.4444497 ]])

2.1.2 归一化处理

标准化与归一化的区别
简单来说,
标准化是依照特征矩阵(每一列是用同一个特征的不同取值)的列处理数据,其通过求z-score的方法,将样本的每个特征的值转换到同一量纲下。
归一化是依照特征矩阵(每一行是不同特征的取值)的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。

规则为 L2 范数的归一化公式如下:
x=xj=1mx2j

使用preproccessing库的Normalizer类对数据进行归一化的代码如下:

from sklearn.preprocessing import Normalizer

#归一化,返回值为归一化后的数据的符号与原数据符号相同
Normalizer().fit_transform(dataset)[:10,:]
array([[ 0.80377277,  0.55160877,  0.22064351,  0.0315205 ],
       [ 0.82813287,  0.50702013,  0.23660939,  0.03380134],
       [ 0.80533308,  0.54831188,  0.2227517 ,  0.03426949],
       [ 0.80003025,  0.53915082,  0.26087943,  0.03478392],
       [ 0.790965  ,  0.5694948 ,  0.2214702 ,  0.0316386 ],
       [ 0.78417499,  0.5663486 ,  0.2468699 ,  0.05808704],
       [ 0.78010936,  0.57660257,  0.23742459,  0.0508767 ],
       [ 0.80218492,  0.54548574,  0.24065548,  0.0320874 ],
       [ 0.80642366,  0.5315065 ,  0.25658935,  0.03665562],
       [ 0.81803119,  0.51752994,  0.25041771,  0.01669451]])

2.1.3 区间缩放法

区间缩放法的思路有多种,常见的一种为利用两个最值进行缩放,公式表达为:

  • 19
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
引用中提到,sklearn支持使用TfidfVectorizer类来计算单词的TF-IDF。这意味着我们可以使用sklearn库来结合jieba进行中文文本的TF-IDF计算。引用中提到,sklearn提供的多项式朴素贝叶斯类MultinomialNB可以用于以单词为粒度计算单词在某个文件中的具体次数,适用于文档分类。因此,我们也可以将jieba与sklearn的MultinomialNB结合进行中文文本的分类任务。 而引用给出了一个使用sklearn进行聚类的示例。通过从TfidfVectorizer得到的稀疏矩阵X,我们可以直接使用sklearn的KMeans聚类算法进行聚类。在这个示例中,通过设置n_clusters参数来指定聚类簇的数量,然后使用.fit_predict()方法来进行聚类并得到聚类标签。最后,将聚类标签添加到原始的数据框中以进行进一步的分析。 综上所述,sklearn可以与jieba结合使用,实现中文文本的TF-IDF计算、文档分类和聚类等任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [使用sklearn+jieba完成一个文档分类器](https://blog.csdn.net/zhouwei_1989_/article/details/87705027)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [文本分析合集,文本向量处理的方法jieba,对文本的特征工程之TfidfVectorizer以及结合TruncatedSVD,...](https://blog.csdn.net/THREEFUCT/article/details/129466255)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨岚❤️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值