下面直接上代码,此处我用的是C++代码用STL中的向量实现存储,当然也可以用数组或者其他方式,感知机的对偶形式代码如下:
#include#include #include #include #include using namespace std; void input_init(); void train(); bool judge(int i); void output(); void gram(); void output_Gram(); void fun_output(); ///****α、b、步长和训练集和Gram矩阵******** vector Gram[1000]; vector data[1000]; vector a; vector w; int b=0; int len=1; ///步长 ///****α、b、步长和训练集和Gram矩阵******** int n; //特征向量的维数 int N; //输入实例的个数 int k=0; //迭代次数 int main() { freopen("in.txt","r",stdin); input_init(); train(); fun_output(); system("pause"); return 0; } void input_init(){ cout<<"请输入特征向量的维数:"< >n; cout<<"请输入实例的个数:"< >N; int tmp; for(int i=0;i >tmp; data[i].push_back(tmp); } a.push_back(0); ///α表示第i个训练数据被误分类的次数 } gram(); output_Gram(); cout< 0)? true:false; //yi(w.xi+b)<=0 } void gram(){ for(int i=0;i 此处我输入的文件in.txt内容如下:
运行结果如下:
以上核心代码其实只有judge()、train()和gram(),去掉冗余输入输出后如下:bool judge(int i){ int sum = 0; for(int j=0;j0)? true:false; //yi(w.xi+b)<=0 } void train(){ for(int i=0;ivoid gram(){ for(int i=0;i原文出处



