python数据挖掘入门与实战——学习笔记(第5、6章)

来源:互联网 发布:c语言 pipe 编辑:程序博客网 时间:2024/06/10 14:14

chapter 5 用转换器抽取特征(感觉有点特征工程的意思)

本章所讨论的是如何从数据集中抽取数值和类别型特征,并选出最佳特征。

特征抽取

对于各个实物,我们只有先把现实用特征表示出来,才能借助数据挖掘的力量找到问题的答案。特征选择的另一个优点在于降低真实世界的复杂度。

dataframe中的unique函数有点类似于SQL中的distinct,能把一列中互不相同的元素筛选出来。

数据离散化:条件判断,划分。


特征选择

sklearn中的VarianceThreshold转换器可用来删除特征值的方差达不到最低标准的特征。

from sklearn.feature_selection import VarianceThresholdvt = VarianceThreshold()xt = vt.fit_transform(x)
输出xt后,会发现不符合要求的列消失了。
print(vt.variances_) #输出每一列的方差


选择最佳特征

sklearn提供了几个用于选择单变量特征的转换器:

SelectKBest返回k个最佳特征

SelectPercentile返回表现最佳的前r%个特征

单个特征和某一类别之间相关性的计算方法有很多。常用的有卡方检验、互信息、信息熵等。

使用SelectKBest转换器类,用卡方函数打分

from sklearn.feature_selection import SelectKBestfrom sklearn.feature_selection import chi2transformer = SelectKBest(score_func=chi2, k=3)xt_chi2 = transformer.fit_transform(x, y)#对数据集进行预处理和转换,结果为分类效果较好的三个特征print(transformer.scores_)#打印每一列的相关性

PCA

from sklearn.decomposition import PCApca = PCA(n_components = 5)xd = pca.fit_transform(x)

创建自己的转换器

转换器有两个关键函数。

fit():接收训练数据,设置内部函数。

transform():转换过程。接收训练数据集或相同格式的新数据集。

转换器接收numpy数组作为输入,根据均值将其离散化。任何高于均值的特征值替换为1,小于或等于均值的替换为0.

from sklearn.base import TransformerMixinfrom sklearn.utils import as_float_arrayclass MeanDiscrete(TransformerMixin):    def fit(self, x):        x = as_float_array(x)        self.mean = x.mean(axis = 0)        return self    def transform(self, x):        x = as_float_array(x)        assert x.shape[1] == self.mean.shape[0]        return x > self.mean

chapter 6 使用朴素贝叶斯进行社会媒体挖掘

N元语法

比起用单个词做特征,使用N元语法能更好地描述文档。N元语法是指由几个连续的词组成的子序列。拿本章用的数据集来讲,N元语法指的就是每条消息里一组连续的词。

N元语法的计算方法跟计算单个词语方法相同,把构成N元语法的几个词看成是词袋中的一个词。数据集中每一项就变成了N元语法在给定文档中的词频。

比如,“厉害了我的国”,设N = 3,则这句话的3元语法为,“厉害了”、“害了我”、“了我的”、“我的国”。

N元语法比起单个词,可有助于理解词语用法的上下文信息、有助于发现拼写错误。它的缺点是特征矩阵变得更为稀疏。


当用流水线组合起来后,为了得到模型,就用流水线的fit函数,创建模型。借助流水线的named_steps属性和步骤名,就能访问流水线的每一个步骤。如,可访问朴素贝叶斯模型。

model = pipeline.fit(x, y)nb = model.named_steps['naive-bayes']


阅读全文
0 0
原创粉丝点击