机器学习中val_机器学习中的特征提取

特征提升特征抽取使用CountVectorizer并且不去掉停用词的条件下,对文本特征进行量化的朴素贝叶斯分类性能测试使用TfidfVectorizer并且不去掉停用词的条件下,对文本特征进行量化的朴素贝叶斯分类性能测试.分别使用CountVectorizer与TfidfVectorizer,并且去掉停用词的条件下,对文本特征进行量化的朴素贝叶斯分类性能测试特征筛选使用Titanic数据集,通过特征筛选的方法一步步提升决策树的预测性能总结

特征提升

早期机器学习的研究与应用,受模型种类和运算能力的限制。因此,大部分研发人员把更多的精力放在对数据的预处理上。他们期望通过对数据特征的抽取或者筛选来达到提升模型性能的目的。所谓特征抽取,就是逐条将原始数据转化为特征向量的形式,这个过程同时涉及对数据特征的量化表示;而特征筛选则更进一步,在高维度、已量化的特征向量中选择对指定任务更有效的特征组合,进一步提升模型性能。

特征抽取

原始数据的种类有很多种,除了数字化的信号数据(声纹、图像),还有大量符号化的文本。然而,我们无法直接将符号化的文字本身用于计算任务,而是需要通过某些处理手段,预先将文本量化为特征向量。有些用符号表示的数据特征已经相对结构化,并且以字典这种数据结构进行存储。这时可以DictVectorizer对特征进行抽取和向量化。

#定义一组字典列表,用来表示多个数据样本(每个字典代表一个数据样本)。
33.  

从代码输出可以看到:在特征向量化的过程中,DictVectorizer对于类别型与数值型特征的处理方式有很大差异。由于类别型特征无法直接数字化表示,因此需要借助原特征的名称,组合产生新的特征,并采用0/1二值方式进行量化;而数值型特征的转化则相对方便,一般情况下只需要维持原始特征值即可。

另外一些文本数据则表现得更为原始,几乎没有使用特殊的数据结构进行存储,只是一系列字符串。我们处理这些数据,比较常用的文本特征表示方法为词袋法:顾名思义,不考虑词语出现的顺序,只是将训练文本中的每个出现过的词汇单独视作一列特征。称这些不重复的词汇集合为词,于是每条训练文本都可以在高维度的词表上映射出一个特征向量。而特征数值的常见计算方式有两种,分别是:CountVectorizer和TfidfVectorizer。对于每一条训练文本, CountVectorizer只考虑每种词汇在该条训练文本中出现的频率。而TfidfVectorizer除了考量某词汇在当前文本中出现的频率之外,同时关注包含这个词汇的文本条数的倒数。相比之下,训练文本的条目越多,TfidfVectorizer这种特征量化方式就更有优势。因为我们计算词频的目的在于找出对所在文本的含义更有贡献的重要词汇。然而,如果一个词汇几乎在每篇文本中出现,说明这是一个 常用词汇,反而不会帮助模型对文本的分类;在训练文本量较多的时候,利用TfidfVectorizer压制这些常用词汇的对分类决策的干扰,往往可以起到提升模型性能的作用。

通常称这些在每条文本中都出现的常用词汇为停用词(StopWords),如英文中的the、a等。这些停用词在文本特征抽取中经常以黑名单的方式过滤掉,并且用来提高模型的性能表现。下面的代码对“20类新闻文本分类”问题进行分析处理,列举上述两种文本特征量化模型的使用方法,并比较他们的性能差异。

使用CountVectorizer并且不去掉停用词的条件下,对文本特征进行量化的朴素贝叶斯分类性能测试

#从sklearn.datasets里导入20类新闻文本数据抓取器。
lib\site-packages\sklearn\cross_validation.py:

从上面代码的输出,我们可以知道,使用CountVectorizer在不去掉停用词的条件下,对训练和测试文本进行特征量化,并利用默认配置的朴素贝叶斯分类器,在测试文本上可以得到83.977%的预测准确性。而且,平均精度、召回率和F1指标,分别是0.86、0.84以及0.82。

使用TfidfVectorizer并且不去掉停用词的条件下,对文本特征进行量化的朴素贝叶斯分类性能测试.

#从sklearn.feature_extraction.text里分别导入TfidfVectorizer.
of classifying 

由上述代码的输出结果,可得出结论:在使用TfidfVectorizer而不去掉停用词的条件下,对训练和测试文本进行特征量化,并利用默认配置的朴素贝叶斯分类器,在测试文本上可以得到比CountVectorizer更加高的预测准确性,即从83.977%提升到84.635%。而且,平均精度、召回率和F1指标都得到提升,分别是0.87、0.85以及0.84。从而,证明了前面叙述的观点:“在训练文本量较多的时候,利用TfidfVectorizer压制这些常用词汇的对分类决策的干扰,往往可以起到提升模型性能的作用”。最后,再使用下面的代码继续验证另-一个观点:“这些停用词在文本特征抽取中经常以黑名单的方式过滤掉,并且用来提高模型的性能表现”。

分别使用CountVectorizer与TfidfVectorizer,并且去掉停用词的条件下,对文本特征进行量化的朴素贝叶斯分类性能测试

#分别使用停用词过滤配置初始化CountVectorizer与TfidfVectorizer.
of classifying 

代码输出依旧证明TfidfVectorizer的特征抽取和量化方法更加具备优势;同时,通过与前面代码性能的比较,可以发现:对停用词进行过滤的文本特征抽取方法,平均要比不过滤停用词的模型综合性能高出3%~4%。

特征筛选

特征筛选与PCA这类通过选择主成分对特征进行重建的方法略有区别:对于PCA而言,我们经常无法解释重建之后的特征;但是特征筛选不存在对特征值的修改,而更加侧重于寻找那些对模型的性能提升较大的少量特征。使用Titanic数据集,尝试通过特征筛选来寻找最佳的特征组合,并且达到提高预测准确性的目标。

使用Titanic数据集,通过特征筛选的方法一步步提升决策树的预测性能

#导人pandas并且更名为pd。
474
#使用决策树模型依靠所有特征进行预测,并作性能评估。
.8115501519756839
#从sklearn导入特征筛选器。
use 
import warnings
0.85063904 
import pylab 
5e629cc9a01667f9a9608266df3049f5.png
在这里插入图片描述
.8571428571428571

总结

  • 经过初步的特征处理后,最终的训练与测试数据均有474个维度的特征;

  • 如果直接使用全部474个维度的特征用于训练决策树模型进行分类预测,那么模型在测试集上的准确性约为81.15%;

  • 如果筛选前20%维度的特征,在相同的模型配置下进行预测,那么在测试集上表现的准确性约为82.06%;

  • 如果按照固定的间隔采用不同百分比的特征进行训练与测试,那么交叉验证得出的准确性有着很大的波动,最好的模型性能表现在选取前7%维度的特征的时候;

  • 如果使用前7%维度的特征,那么最终决策树模型可以在该分类预测任务的测试集上表现出85.71%的准确性,比起最初使用全部特征的模型性能高出接近4个百分点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值