【任务3-自然语言处理】时长:2天
Task3 特征选择 (2 days)
1,TF-IDF原理
TF-IDF 是Term Frequency - Inverse Document Frequency 的缩写,即“词频-逆文本频率”,它由两部分组成,TF和IDF,
TF就是词频,文本向量化也就是做了文本中各个词的出现频率统计,并作为文本特征。
概括的来说,IDF反应了一个词在所有文本中出现的频率,如果一个词在很多文本中出现,那么它的IDF值应该低,如果一个词在较少的文本助攻出现,那么它的IDF值应该很高,极端情况,一个词在所有的文本中都出现,那么它的IDF值应该为0.
一个词x的IDF的基本公式如下所示:
I
D
F
(
x
)
=
l
o
g
(
N
N
(
x
)
)
IDF(x) = log(\frac {N}{N(x)})
IDF(x)=log(N(x)N)
其中,
N
N
N代表语料库中文本的总数,而
N
(
x
)
N(x)
N(x)代表语料库中包含词
x
x
x的文本总数。如果一个生僻词在语料库中没有,这样分母为0,IDF没有意义了,所以常对IDF进行平滑,平滑后的公式之一是:
I
D
F
(
x
)
=
l
o
g
N
+
1
N
(
x
)
+
1
+
1
IDF(x) = log \frac {N+1}{N(x)+1}+1
IDF(x)=logN(x)+1N+1+1
所以,某一个词的TD-IDF值得计算公式如下:
T
F
−
I
D
F
(
x
)
=
T
F
(
x
)
∗
I
D
F
(
x
)
TF-IDF(x) = TF(x)*IDF(x)
TF−IDF(x)=TF(x)∗IDF(x)
2,文本矩阵化,使用词袋模型,以TF-IDF特征值为权重。(可以使用Python中TfidfTransforme)
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_extraction.text import CountVectorizer
corpus=["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"]
vectorizer=CountVectorizer()
transformer = TfidfTransformer()
tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))
print(tfidf)
from sklearn.feature_extraction.text import TfidfVectorizer
tfidf2 = TfidfVectorizer()
re = tfidf2.fit_transform(corpus)
print(re)
计算出来的TF-IDF的如下所示:
(0, 16) 0.4424621378947393
(0, 15) 0.697684463383976
(0, 4) 0.4424621378947393
(0, 3) 0.348842231691988
(1, 14) 0.45338639737285463
(1, 9) 0.45338639737285463
(1, 6) 0.3574550433419527
(1, 5) 0.3574550433419527
(1, 3) 0.3574550433419527
(1, 2) 0.45338639737285463
(2, 12) 0.5
(2, 7) 0.5
(2, 1) 0.5
(2, 0) 0.5
(3, 18) 0.3565798233381452
(3, 17) 0.3565798233381452
(3, 15) 0.2811316284405006
(3, 13) 0.3565798233381452
(3, 11) 0.3565798233381452
(3, 10) 0.3565798233381452
(3, 8) 0.3565798233381452
(3, 6) 0.2811316284405006
(3, 5) 0.2811316284405006
(0, 4) 0.4424621378947393
(0, 15) 0.697684463383976
(0, 3) 0.348842231691988
(0, 16) 0.4424621378947393
(1, 3) 0.3574550433419527
(1, 14) 0.45338639737285463
(1, 6) 0.3574550433419527
(1, 2) 0.45338639737285463
(1, 9) 0.45338639737285463
(1, 5) 0.3574550433419527
(2, 7) 0.5
(2, 12) 0.5
(2, 0) 0.5
(2, 1) 0.5
(3, 15) 0.2811316284405006
(3, 6) 0.2811316284405006
(3, 5) 0.2811316284405006
(3, 13) 0.3565798233381452
(3, 17) 0.3565798233381452
(3, 18) 0.3565798233381452
(3, 11) 0.3565798233381452
(3, 8) 0.3565798233381452
(3, 10) 0.3565798233381452
3,互信息的原理。
在机器学习的相关文献里面,经常会用点互信息PMI(Pointwise Mutal Information)这个指标来衡量两个事物之间的相关性,比如两个词。计算公式如下:
P
M
I
(
x
;
y
)
=
l
o
g
p
(
x
,
y
)
p
(
x
)
p
(
y
)
=
l
o
g
p
(
x
∣
y
)
p
(
x
)
=
l
o
g
p
(
y
∣
x
)
p
(
y
)
PMI(x;y) = log \frac{p(x,y)}{p(x)p(y)}=log \frac {p(x|y)}{p(x)}=log\frac {p(y|x)}{p(y)}
PMI(x;y)=logp(x)p(y)p(x,y)=logp(x)p(x∣y)=logp(y)p(y∣x)
在概率论中,如果x和y不相关,那么p(x,y) = p(x)p(y),二者相关性越大,则p(x,y)就比p(x)p(y)越大。
互信息的计算公式如下:
I
(
X
;
Y
)
=
∑
x
∈
X
∑
y
∈
Y
p
(
x
,
y
)
l
o
g
p
(
x
,
y
)
p
(
x
)
p
(
y
)
I(X;Y) = \sum_{x \in X}\sum_{y \in Y}p(x,y)log\frac{p(x,y)}{p(x)p(y)}
I(X;Y)=x∈X∑y∈Y∑p(x,y)logp(x)p(y)p(x,y)
其衡量的是两个随机变量之间的相关性。
4,使用第二步生成的特征矩阵,利用互信息进行特征筛选。
参考
-
[文本挖掘预处理之TF-IDF:文本挖掘预处理之TF-IDF - 刘建平Pinard - 博客园](https://www.cnblogs.com/pinard/p/6693230.html
-
[使用不同的方法计算TF-IDF值:使用不同的方法计算TF-IDF值 - 简书](https://www.jianshu.com/p/f3b92124cd2b
-
[sklearn-点互信息和互信息:sklearn:点互信息和互信息 - 专注计算机体系结构 - CSDN博客](https://blog.csdn.net/u013710265/article/details/72848755
-
[如何进行特征选择(理论篇)机器学习你会遇到的“坑”:如何进行特征选择(理论篇)机器学习你会遇到的“坑” ](https://baijiahao.baidu.com/s?id=1604074325918456186&wfr=spider&for=pc