采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
样本特征为5个,标签有6种,使用多项式逻辑回归,多项式次数degree设置为5,L2正则化,OvO多分类,运行的时候警告线性算法没有收敛,而且分类准确度很低(百分之45左右,kNN可以达到80),。是数据太复杂了维度太多了吗?degree设置为10后,直接超出10000的迭代次数限制了。 老师我想问一下,在网格搜索合适的degree、C的时候,搜索范围设置在多少比较合适?造成算法预测准确度这么低的原因会有哪些?
数据量大概多大?
==========
如果你有 5 个特征,degree = 5,就意味着有 5^5 = 3125 个特征了。这个特征量就已经远远大于你现在的数据量了。而如果 degree = 10,就生成了 9765625 个特征,这个特征量太大了,妥妥的维度灾难。(3125 个特征已经肯定维数灾难了。)
要想获得较好的结果,在大多数情况下,至少数据量要大于特征量,最好的情况下,数据量应该是特征量的 10 倍乃至 100 倍以上。(对比你说获得比较好的效果,degree = 2,就是有 25 个特征,1400 的数据量是 25 的 56 倍左右。)
如果你想要使用多项式特征,就要增大数据量。增大到什么地步?请参考上面我计算出的特征数。
从这些数据,你也可以看出来,实际上在大多数时候,多项式特征都不是一个好的特征工程方式。即使使用,degree = 3 撑死了。(对于诸如图像数据这种高维数据,连 degree = 2 都没有用。)多项式特征是一个极好的介绍“过拟合”概念的方式(所以这个课程在介绍完多项式特征以后,马上介绍过拟合。)但它不是一个好的特征工程方式。
继续加油!:)
1400条,我使用网格搜索,C=3800,degree=2的时候准确率最高,在百分之58左右,但是需要把max_iter设置为10000算法才能收敛。。。耗时特别长,是数据量太大了吗
老师我刚刚设置成OvO分类,max_iter设置为10000,使用网格搜索C=[3000, 3200, 3400, 3500, 3600, 3800, 4000], degree=[1, 2],最后搜索的最优C=3800,degree=2,平均准确率提高到了67,不过当我把degree范围扩大到[1. 2. 3. ],就偶尔会(运行10次警3次)警告线性算法没有收敛(warn('The line search algorithm did not converge', LineSearchWarning),是不是不能再尝试更大的degree值了,还有别的办法吗?
另外老师,l1正则化和OvO分类都有各自的solver要求,那如果想同时使用,solver应该设置成什么呢
登录后可查看更多问答,登录/注册
Python3+sklearn,兼顾原理、算法底层实现和框架使用。
2.5k 19
3.5k 17
2.9k 15
1.6k 15
1.4k 14