SMO实现
#include "stdio.h"
#include <vector>
using namespace std;
float function(float alfa[5],float H[5][5],float sign[5])
{
float ret = alfa[0]+alfa[1]+alfa[2]+alfa[3]+alfa[4];
for(int j=0;j<5;++j)
{
float t=0.0;
for(int i=0;i<5;++i)
{
t+=sign[i]*alfa[i]*H[j][i];
}
ret += -1*(t*alfa[j]*sign[j])/2;
}
return ret;
}
int main(void)
{
float matrix[5][4]={
{1,5,1},
{1,2,1},
{2,2,-1},
{2,1,-1},
{1,1,-1}};
float H[5][5];
vector<float> c1;
vector<float> c2;
for(int i=0;i<5;++i)
{
c1.push_back(matrix[i][0]);
c2.push_back(matrix[i][1]);
}
for(int i=0;i<5;++i)
{
for(int j=0;j<5;++j)
{
H[i][j]=c1[i]*c1[j]+c2[i]*c2[j];
printf("%f\t",H[i][j]);
}
printf("\n");
}
float alfa[5]={3,3,2,2,2};
float sign[5];
for(int i=0;i<5;++i)
sign[i]=matrix[i][2];
float last_r = function(alfa,H,sign);
float new_r;
float con_r;
for(int i=0;i<5;++i)
{
for(int j=0;j<5;j++)
{
printf("%f,alfa={%f,%f,%f,%f,%f}\n",last_r,alfa[0],alfa[1],alfa[2],alfa[3],alfa[4]);
if(i==j) continue;
else if((alfa[i]<0.01&&alfa[i]>-0.01)&&(alfa[j]<0.01&&alfa[j]>-0.01)) continue;
else if((alfa[j]>0.01)&&(alfa[i]<0.01&&alfa[i]>-0.01))
{
while(alfa[j]>0.01){
alfa[i]+=0.1;
new_r = function(alfa,H,sign);
if( new_r > last_r )
{
alfa[j] -= 0.1*sign[i]*sign[j];
last_r = function(alfa,H,sign);
}
else
{
alfa[i]-=0.1;
break;
}
};
}
else if((alfa[i]>0.01)&&(alfa[j]<0.01&&alfa[j]>-0.01))
{
while(alfa[i]>0.01){
alfa[j]+=0.1;
new_r = function(alfa,H,sign);
if( new_r > last_r )
{
alfa[i] -= 0.1*sign[i]*sign[j];
last_r = function(alfa,H,sign);
}
else
{
alfa[j]-=0.1;
break;
}
};
}
else
{
alfa[j]+=0.1;
new_r = function(alfa,H,sign);
alfa[j]-=0.2;
con_r = function(alfa,H,sign);
alfa[j]+=0.1;
if(new_r>con_r&&new_r>last_r)
{
while(alfa[i]>0.01&&alfa[j]>0.01)
{
alfa[j] += 0.1;
alfa[i] -= 0.1*sign[i]*sign[j];
new_r = function(alfa,H,sign);
if(new_r > last_r)
{
last_r = new_r;
}
else
{
alfa[j] -= 0.1;
alfa[i] += 0.1*sign[i]*sign[j];
break;
}
};
}
else if(con_r>new_r&&con_r>last_r)
{
while(alfa[i]>0.01&&alfa[j]>0.01)
{
alfa[j] -= 0.1;
alfa[i] += 0.1*sign[i]*sign[j];
con_r = function(alfa,H,sign);
if(con_r > last_r)
{
last_r = con_r;
}
else
{
alfa[j] += 0.1;
alfa[i] -= 0.1*sign[i]*sign[j];
break;
}
}
}
else
{}
}
}
}
printf("%f,alfa={%f,%f,%f,%f,%f}\n",last_r,alfa[0],alfa[1],alfa[2],alfa[3],alfa[4]);
return 0;
}
SMO实现的更多相关文章
- 机器学习——支持向量机(SVM)之Platt SMO算法
Platt SMO算法是通过一个外循环来选择第一个alpha值的,并且其选择过程会在两种方式之间进行交替: 一种方式是在所有数据集上进行单遍扫描,另一种方式则是在非边界alpha中实现单遍扫描. 所谓 ...
- 机器学习——支持向量机(SVM)之拉格朗日乘子法,KKT条件以及简化版SMO算法分析
SVM有很多实现,现在只关注其中最流行的一种实现,即序列最小优化(Sequential Minimal Optimization,SMO)算法,然后介绍如何使用一种核函数(kernel)的方式将SVM ...
- 支持向量机原理(四)SMO算法原理
支持向量机原理(一) 线性支持向量机 支持向量机原理(二) 线性支持向量机的软间隔最大化模型 支持向量机原理(三)线性不可分支持向量机与核函数 支持向量机原理(四)SMO算法原理 支持向量机原理(五) ...
- 借One-Class-SVM回顾SMO在SVM中的数学推导--记录毕业论文5
上篇记录了一些决策树算法,这篇是借OC-SVM填回SMO在SVM中的数学推导这个坑. 参考文献: http://research.microsoft.com/pubs/69644/tr-98-14.p ...
- Index was outside the bounds of the array. (Microsoft.SqlServer.Smo)
本地ssms是 安装Sqlserver 2008 r2 自带的 远端的server是sqlserver2014 可以连接,可以执行查询语句.但是,不能使用ssms生成对象的脚本.推测ssms 2008 ...
- 序列最小最优化算法(SMO)-SVM的求解(续)
在前一篇文章中,我们给出了感知器和逻辑回归的求解,还将SVM算法的求解推导到了最后一步,在这篇文章里面,我们将给出最后一步的求解.也就是我们接下来要介绍的序列最小最优化算法. 序列最小最优化算法(SM ...
- SVM-非线性支持向量机及SMO算法
SVM-非线性支持向量机及SMO算法 如果您想体验更好的阅读:请戳这里littlefish.top 线性不可分情况 线性可分问题的支持向量机学习方法,对线性不可分训练数据是不适用的,为了满足函数间隔大 ...
- SMO推导和代码-记录毕业论文4
SMO的数学公式通过Platt的论文和看这个博客:http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html,大概弄懂了.推导以后 ...
- SVM之SMO最小序列
转载自:JerryLead http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html 11 SMO优化算法(Sequential ...
- 附加数据库对于服务器失败(Microsoft.SqlServer.Smo),无法升级数据库,因为它是只读的,或者具有只读文件
今天在将一个 SQL Server 2000 数据库附加到 SQL Server 2005时出现如下的错误:附加数据库对于服务器失败(Microsoft.SqlServer.Smo),无法升级数据库t ...
随机推荐
- JS——2048(支持触屏及键盘操作)
<html> <head> <title>2048</title> <style type="text/css"> ta ...
- Scala:访问修饰符、运算符和循环
http://blog.csdn.net/pipisorry/article/details/52902234 Scala 访问修饰符 Scala 访问修饰符基本和Java的一样,分别有:privat ...
- ROS机器人程序设计(原书第2版)补充资料 (肆) 第四章 在ROS下使用传感器和执行器
ROS机器人程序设计(原书第2版)补充资料 (肆) 第四章 在ROS使用传感器和执行器 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 第四 ...
- MPAndroidChart的K线图上添加均线
MPAndroidChart的K线图上添加均线 效果图 均线计算方法: 通常说的5日均线,10日均线,其实就是根据当前K线节点的时间维度来说的,当前每个节点代表一天,那么上面的均线就叫做日均线(几日均 ...
- 最优化方法:范数和规则化regularization
http://blog.csdn.net/pipisorry/article/details/52108040 范数规则化 机器学习中出现的非常频繁的问题有:过拟合与规则化.先简单的来理解下常用的L0 ...
- 剑指Offer——好未来视频面知识点储备+面后总结
剑指Offer--好未来视频面知识点储备+面后总结 情景介绍 时间:2016.10.12 13:00- 地点:宿舍 事件:好未来视频面 知识点储备 数据结构 单链表反转 public class Li ...
- iOS9中如何注册远程通知
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在以往的版本中,我们可以通过: [[UIApplication ...
- 插件占坑,四大组件动态注册前奏(二) 系统Service的启动流程
转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52203903 前言:为什么要了解系统Activity,Service,BroadCas ...
- android程序崩溃后重启
有时候由于测试不充分或者程序潜在的问题而导致程序异常崩溃,这个是令人无法接受的,在android中怎样捕获程序的异常崩溃,然后进行一些必要的处理或重新启动 应用这个问题困恼了我很久,今天终于解决了该问 ...
- ubuntu常用文件搜索命令
1.find find [搜索路径] [搜索关键字] 比如查找/test中文件名为t5.tmp的文件: 查找根目录下大于100M的文件 注意,这里的204800单位是块,1块=512字节 在根目录下查 ...