【特征选择 (2 days)】
-
TF-IDF原理。
TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文件频率).
是一种用于资讯检索与资讯探勘的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。
总结:就是一个word在一篇文章中出现的频率越高,在语料库中的频率越低,越能代表这篇文章,通俗的理解就是当某些词只在特定文章中出现那么他就能有很大的权重可以代表这篇文章。 -
文本矩阵化,使用词袋模型,以TF-IDF特征值为权重。(可以使用Python中TfidfTransformer库)
'''
fit_transform()就是将fit()和transform()结合了一下
fit_transform()就是先将数据进行拟合,然后将其标准化
transform()作用是通过找中心和缩放等实现标准化
可以说是:
transform()是一定可以替换成fit_transform(),但是fit_transform()不能替换为transform()
'''
from sklearn.feature_extraction.text import CountVectorizer
vectorizer=CountVectorizer() #构建一个计算词频的对象
text=["I come to China to travel",
"This is a car polupar in China",
"I love tea and Apple ",
"The work is to write some papers in science"]
print(vectorizer.fit_transform(text)) #vectorizer.fit_transform(corpus)将文本输入,得到词频矩阵
# # 各个特征代表的词
print(vectorizer.get_feature_names())
# # 每个文本的词向量特征
print(vectorizer.fit_transform(text).toarray())
vectorizer.get_feature_names()获得的
['and', 'apple', 'car', 'china', 'come', 'in', 'is', 'love', 'papers', 'polupar', 'science', 'some', 'tea', 'the', 'this', 'to', 'travel', 'work', 'write']
vectorizer.fit_transform(text).toarray() 其中每一行对应的文本也就是上面的句子,列式词在上面的词的列表里的元素,数值是频数
[[0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 2 1 0 0]
[0 0 1 1 0 1 1 0 0 1 0 0 0 0 1 0 0 0 0]
[1 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0]
[0 0 0 0 0 1 1 0 1 0 1 1 0 1 0 1 0 1 1]]
print(vectorizer.fit_transform(text)) (index1,index2)index1代表哪一个文本(某一行),index2是在上面的列表中词的位置
(0, 4) 1
(0, 15) 2
(0, 3) 1
(0, 16) 1
(1, 3) 1
(1, 14) 1
(1, 6) 1
(1, 2) 1
(1, 9) 1
(1, 5) 1
(2, 7) 1
(2, 12) 1
(2, 0) 1
(2, 1) 1
(3, 15) 1
(3, 6) 1
(3, 5) 1
(3, 13) 1
(3, 17) 1
(3, 18) 1
(3, 11) 1
(3, 8) 1
(3, 10) 1
- 互信息的原理。
在概率论和信息论中,两个随机变量的互信息(Mutual Information,简称MI)或转移信息(transinformation)是变量间相互依赖性的量度。不同于相关系数,互信息并不局限于实值随机变量,它更加一般且决定着联合分布 p(X,Y) 和分解的边缘分布的乘积 p(X)p(Y) 的相似程度。互信息(Mutual Information)是度量两个事件集合之间的相关性(mutual dependence)。互信息是点间互信息(PMI)的期望值。互信息最常用的单位是bit。
- 使用第二步生成的特征矩阵,利用互信息进行特征筛选。
from sklearn import datasets
from sklearn import metrics as mr
iris = datasets.load_iris()
x = iris.data
x0 = x[:, 0] #区第一列数据
label = iris.target
# 计算各特征与label的互信息
print(mr.mutual_info_score(x0, label))