![af66d4c405fe7f9e53ac9cb9061d53f9.png](https://i-blog.csdnimg.cn/blog_migrate/b2c7ee3307f8b5fb8275bed6e8ac08d8.jpeg)
以二分类多项式朴素贝叶斯模型为例说明特征选择的原理。通过前边朴素贝叶斯sklearn实践部分我们可以看到,对于二分类问题来说,sklearn中只使用一个线性分类器f(x)=wx+b,这里显然w是一个一维的向量,它是分类器的参数,x是待预测文本的TF法向量化表示,b表示该分类器所预测的两个类别中的一个类别的出现概率。显然w各维表示的词语的似然概率p(w|c),p(w|c)的值越大说明类别c产生这个词语的可能越大,也就是说这个词语更能表征这个类别。通过上边的分析,我们不难想到,可以通过设一定的系数值阈值来实现特征选择,对于系数值大于设定阈值的词项予以保留,对于系数值小于设定阈值的词项予以去除,实现了特征选择的目的。
![71c813fc4facb86ab781be343ada80ec.png](https://i-blog.csdnimg.cn/blog_migrate/13f1ae7d729ea1b51c17650d89109824.jpeg)
在SelectFromModel类中特征选择之前对系数做了绝对值操作,这叫做1范数正则化,我们都知道正则化的操作是避免线性模型过拟合问题的,但是对于朴素贝叶斯来说这样的操作是不符合原理的。因为朴素贝叶斯根本就不涉及过拟合的问题,因为它根本就没有通过迭代最小化误差的思想。反而由于取了绝对值再去做阈值筛选,筛选出来的反倒是要被过滤的。原因是朴素贝叶斯的所有概率值都去了对数,则所有系数值都为负值且值越小概率越小,但是由于绝对值的操作,使得概率值变为正值,而且对数曲线在0-1区间内变为减函数,于是值越小反而概率越大。综上,对于SelectFromModel这个类特征选择,只能给他传递线性模型,比如线性SVM。这里我们给出利用SelectFromModel思想的朴素贝叶斯模型特征选择方法代码
# 定义文本集
今天的内容主要说了SelectFromModel只能传入线性分了模型,而不能传入朴素贝叶斯模型,基于朴素贝叶斯原理做出了这个结论,想找到一个例子来证明这么理解是对的,但是没有找到,如果小伙伴觉得这个结论有问题,欢迎留言。