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

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

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

特征抽取

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

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

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


特征选择

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

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


选择最佳特征

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

SelectKBest返回k个最佳特征

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

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

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

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

PCA

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

创建自己的转换器

转换器有两个关键函数。

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

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

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

from sklearn.base import TransformerMixin
from sklearn.utils import as_float_array

class 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']


发布了25 篇原创文章 · 获赞 14 · 访问量 5万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章