逻辑回归算法提示算法不收敛

来源:9-8 OvR与OvO

luluoverflow

2021-12-17

样本特征为5个,标签有6种,使用多项式逻辑回归,多项式次数degree设置为5,L2正则化,OvO多分类,运行的时候警告线性算法没有收敛,而且分类准确度很低(百分之45左右,kNN可以达到80),。是数据太复杂了维度太多了吗?degree设置为10后,直接超出10000的迭代次数限制了。
老师我想问一下,在网格搜索合适的degree、C的时候,搜索范围设置在多少比较合适?造成算法预测准确度这么低的原因会有哪些?图片描述图片描述

写回答

1回答

liuyubobobo

2021-12-18

数据量大概多大?


==========


如果你有 5 个特征,degree = 5,就意味着有 5^5 = 3125 个特征了。这个特征量就已经远远大于你现在的数据量了。而如果 degree = 10,就生成了 9765625 个特征,这个特征量太大了,妥妥的维度灾难。(3125 个特征已经肯定维数灾难了。)


要想获得较好的结果,在大多数情况下,至少数据量要大于特征量,最好的情况下,数据量应该是特征量的 10 倍乃至 100 倍以上。(对比你说获得比较好的效果,degree = 2,就是有 25 个特征,1400 的数据量是 25 的 56 倍左右。)


如果你想要使用多项式特征,就要增大数据量。增大到什么地步?请参考上面我计算出的特征数。


从这些数据,你也可以看出来,实际上在大多数时候,多项式特征都不是一个好的特征工程方式。即使使用,degree = 3 撑死了。(对于诸如图像数据这种高维数据,连 degree = 2 都没有用。)多项式特征是一个极好的介绍“过拟合”概念的方式(所以这个课程在介绍完多项式特征以后,马上介绍过拟合。)但它不是一个好的特征工程方式。


继续加油!:)

0
7
liuyubobobo
回复
luluoverflow
意味着在你的数据和方法下,不要正则化项,得到的结果更好。但这不代表正则化没有意义。你的代码没有验证数据集,所以有蛮高的概率最终的结果对测试数据集过拟合了。请使用验证数据集再试一下。切记,机器学习的目标不是活的最大的测试得分,而是在顾及泛化的效果上,准确度越高越好。不讨论泛化,准确度没有意义。因为理论上,任何数据,一定能找到一个模型,做到 100% 的准确。但关键是,遇到新的数据,结果怎么样。请再仔细体会一下这一小节:https://coding.imooc.com/lesson/169.html#mid=10031 甚至是这一章整体和具体算法无关的内容(什么叫泛化,什么叫验证数据集,什么叫交叉验证,为什么引入他们(包括我们到底为什么引入了正则化这个概念))。毫不夸张的说,对于机器学习来说,这些概念比具体的算法要重要。继续加油!:)
2021-12-18
共7条回复

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5851 学习 · 2437 问题

查看课程