LIBSVM的SMO算法(update alpha)
来源:互联网 发布:监控软件手机版 编辑:程序博客网 时间:2024/09/21 08:15
// update alpha[i] and alpha[j], handle bounds carefullyconst Qfloat *Q_i = Q.get_Q(i,active_size);const Qfloat *Q_j = Q.get_Q(j,active_size);double C_i = get_C(i);double C_j = get_C(j);double old_alpha_i = alpha[i];double old_alpha_j = alpha[j];if(y[i]!=y[j]){double quad_coef = QD[i]+QD[j]+2*Q_i[j];if (quad_coef <= 0)quad_coef = TAU;double delta = (-G[i]-G[j])/quad_coef;double diff = alpha[i] - alpha[j];alpha[i] += delta;alpha[j] += delta;if(diff > 0){if(alpha[j] < 0){alpha[j] = 0;alpha[i] = diff;}}else{if(alpha[i] < 0){alpha[i] = 0;alpha[j] = -diff;}}if(diff > C_i - C_j){if(alpha[i] > C_i){alpha[i] = C_i;alpha[j] = C_i - diff;}}else{if(alpha[j] > C_j){alpha[j] = C_j;alpha[i] = C_j + diff;}}}else{double quad_coef = QD[i]+QD[j]-2*Q_i[j];if (quad_coef <= 0)quad_coef = TAU;double delta = (G[i]-G[j])/quad_coef;double sum = alpha[i] + alpha[j];alpha[i] -= delta;alpha[j] += delta;if(sum > C_i){if(alpha[i] > C_i){alpha[i] = C_i;alpha[j] = sum - C_i;}}else{if(alpha[j] < 0){alpha[j] = 0;alpha[i] = sum;}}if(sum > C_j){if(alpha[j] > C_j){alpha[j] = C_j;alpha[i] = sum - C_j;}}else{if(alpha[i] < 0){alpha[i] = 0;alpha[j] = sum;}}}
// update Gdouble delta_alpha_i = alpha[i] - old_alpha_i;double delta_alpha_j = alpha[j] - old_alpha_j;for(int k=0;k<active_size;k++){G[k] += Q_i[k]*delta_alpha_i + Q_j[k]*delta_alpha_j;}
0 0
- LIBSVM的SMO算法(update alpha)
- LIBSVM的SMO算法(select_working_set)
- 自己在libSvm中SMO算法中KKT条件的理解误区(还不确定)
- 关于LibSVM的SMO问题
- 关于Libsvm的SMO问题
- 关于LibSVM的SMO问题
- Andrew Ng机器学习笔记+Weka相关算法实现(六)SMO/LibSVM/SVM参数
- svm的smo算法
- 改进的SMO算法
- smo算法的c++实现
- SVM支持向量机(SMO算法)的R实现
- 支持向量机(SVM)的SMO算法详解
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- SMO算法
- 正则表达式在字母与数字之间增加符号
- 设计模式_简单工厂模式
- Linux/Android Kconfig Makefile defconfig 和 .config关系
- 【路在前端】我的前端工作流程梳理
- 16.1114 模拟考试T1
- LIBSVM的SMO算法(update alpha)
- oracle找不到sid的问题解决
- java设计模式--组合模式
- [Python模块学习]用imghdr模块识别图片格式
- Codevs 1021 玛丽卡==洛谷 P1186
- N级架构演化史
- NOIP 前夕 模板整理
- 16.1116 NOIP 考前模拟(信心题)
- Codevs 1215 迷宫