对不住看官,先写个草稿,明后天把具体数据补充上去。
继续前一篇写。
4. 实验准备和结果
采用前面Logistic regression中的 LROne project 和LRTwo project,都是二值(0-1)分类,分别对应了二值输入和实值输入。简单把卡方值低的特征值置为零来去除该特征,代码参考《动手实现Logistic Regression (c++)_测试_再次》中的代码。实验结果,简单来说,发现效果并没有提升。相对直接去除绝对值小的权重对应的特征,如(一)中谈到的策略,用卡方值做指标来过滤特征,并没有获得性能提升,反而略有下降。因为LROne和LRTwo所采用的数据集合的数据量比较少,特征数目也比较少,其实所谓的性能“上升”和“下降”并不明显,都是小数点后三位的事情,对应于测试集合,也就是不超过十个测试样例的结果不同。至于具体数字,因为都是这两天断断续续在办公室和在家做的,而微软Skydrive的同步又是这么的屎,现在手头上也没有,就不列出来了。但结论是确定的,就是用卡方选择特征,在LR模型中并没有实质性的性能提升。对比《动手实现Logistic Regression (c++)_测试_再次》中的实验结果,用权重绝对值来过滤特征,如(一)中的策略,实验证明是能够缓解过拟合,得到性能的提升的。用卡方的方法,如果思路正确,即便性能不提升,也不至于下降啊。
这是为什么呢?难道我们最初的假设错了?
5. 查看数据
以 LROne project 中的训练数据为例,共10个特征,300个样本。对每个特征,它和两个类别的卡方计算结果如下:
。。。。。???---补充数据
因为只有两个类别,所以每个特征对这两个类别的卡方值计算结果一样。如果是多类别,如《第三次实现Logistic Regression(c++)_接口》中LRThree project的实验,特征和各个类别的卡方值就不同了,这就涉及到一个问题,即便是根据卡方值来选择特征,那么根据哪个卡方值来进行选择?可以参考我从前的博文《【朴素贝叶斯】实战朴素贝叶斯_代码实现_特征选择1》的处理方法。哦,又跑题了。
LROne project训练出来的特征权重如下:
2.5668 0.12814 -0.135231 2.55564 -0.0892993 -0.256378 -0.279498 -0.100414 -0.185509 -0.447792
6. 查看数据——继续
我又不死心,因为卡方值是有明确物理意义的,只不过这种意义不是我从前想象的方式来映射到特征权重上面罢了。接下来我做了一个有意思的事情,我把LROne project训练出来的特征权重加和平均,均值是0.375646,是个正数——回头我们再说这个正数的物理含义。注意:我能把这些权重进行加和平均,这样做是有前提的,就是:这些特征的取值范围是相同的,即都是0-1取值,如果到了LRTwo,就都是[0, 1]区间内的取值。这样,才不用考虑特征值之间的scaling,才能够直接进行加和平均。取得平均值之后,我把每个特征的权重与这个平均值做差,再求绝对值,结果如下:
。。。???
如果做差再求平方的话,就是在计算标准差了。
(未完待续)
卡方选择(chi-square)能用到logistic regression当中么?(二)
原文:http://blog.csdn.net/xceman1997/article/details/19249241