写作绅士,读作丧尸 X岛揭示板
顺猴者昌 逆猴者亡 首页版规 |用户系统 |移动客户端下载 | 丧尸路标 | | 常用图串及路标 | 请关注 官方公众号:【X岛揭示板】 官方微博: 【@X岛极速版】| 人,是会思考的芦苇
常用串:·豆知识·跑团板聊天室·公告汇总串·X岛路标

No.62296920 - 无标题 - 技术宅


回应模式
No.62296920
名 称
E-mail
标题
颜文字
正文
附加图片
•程序语言、压制投稿、视频制作以及各计算机领域的技术问题
•我觉得还是CSDN靠谱一点
•本版发文间隔为15秒。

无标题 无名氏 2024-05-07(二)16:49:58 ID:gfr22vh [举报] [订阅] [只看PO] No.62296920 [回应] 管理
手搓了一个支持向量机的SMO算法实现,用的高斯核
在145个样本、5的样本维度、二分类的数据集上几秒就训练出来了,迭代不超过50次,完全收敛于KKT条件
现在用3089个样本、4的样本维度、二分类的数据集,训练20分钟没动静,这正常吗(;´Д`)
无标题 无名氏 2024-05-07(二)16:58:18 ID:7fwCSXq [举报] No.62296986 管理
嗯,肥肥懂得不多,或许你可以问问神奇海螺。
无标题 无名氏 2024-05-07(二)16:59:46 ID:7fwCSXq [举报] No.62297005 管理
嗯,嗯,神奇海螺这么说:

首先,恭喜您成功实现了支持向量机(SVM)的序列最小优化(SMO)算法。SMO算法是用于训练SVM的有效算法,特别是在使用核函数(如高斯核)时。
对于您遇到的问题,有几个可能的原因:
1. **数据集大小**:从145个样本增加到3089个样本,数据集的大小显著增加。这可能导致算法需要更多的时间来找到合适的分隔超平面。
2. **计算复杂度**:高斯核函数的计算复杂度相对较高,尤其是在样本数量较多的情况下。对于每个样本,都需要计算与其他所有样本的核函数值,这使得计算量随样本数量呈平方级增长。
3. **参数选择**:SVM中的参数,如C(正则化参数)和σ(高斯核的宽度参数),对训练时间和结果有显著影响。不恰当的参数设置可能导致算法收敛缓慢或无法收敛。
4. **KKT条件违反**:如果算法长时间未能收敛,可能是因为某些样本违反了KKT条件,但算法未能有效地调整它们。
5. **实现细节**:虽然您提到算法在较小的数据集上表现良好,但在更大的数据集上可能需要更多的优化和调试。例如,检查是否所有违反KKT条件的样本都被正确处理,以及优化算法的选择和更新步骤。
6. **硬件限制**:如果您的计算资源有限,如CPU性能或内存,也可能导致训练速度慢。
对于解决方案,您可以尝试以下方法:
- **调整参数**:尝试不同的C和σ值,以找到适合您数据集的参数组合。
- **优化算法**:检查SMO算法的实现,确保没有逻辑错误,并尝试优化计算过程。
- **减少数据集**:如果可能,通过采样或特征选择减少数据集的大小。
- **使用并行计算**:利用多核处理器进行并行计算,以加速核函数的计算。
- **使用现有库**:考虑使用现有的高效SVM库,如LIBSVM,以比较性能和收敛速度。
最后,如果您的数据集非常大或维度非常高,可能需要考虑使用更加高效的算法或算法变种,或者使用分布式计算技术来处理。

UP主: