感知器(对偶形式)

根据《统计学习方法》用C++实现的感知器模型。

#include 
using namespace std;
const int N = 3;/*样本数量*/
const int M = 2;/*输入数据的维数*/
double W[M]{};
double b = 0;
struct slp {
    double X[M];
    double Y;
};
slp trainData[N] = {
    { { 3,3 },1 },
    { { 4,3 },1 },
    { { 1,1 },-1 }
};
double Gram[N][N]{};/*对偶形式 X的内积矩阵*/
double a[N]{};/*对偶式中的a参数*/
/*生成Gram*/
void getG() {
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            for (int k = 0; k < M; k++) {
                Gram[i][j] += trainData[i].X[k] * trainData[j].X[k];
            }
            //cout << Gram[i][j] << endl;
        }
    }
}
/*对于编号i的输入,调整a,b*/
void update(int i) {
    a[i] += 1;
    b += trainData[i].Y;
}
/*检查条件*/
int check() {
    for (int i = 0; i < N; i++) {
        int ans = 0;
        for (int k = 0; k < N; k++) {
            ans += a[k] * trainData[k].Y*Gram[k][i];
        }
        ans += b;
        if (ans*trainData[i].Y <= 0) {
            update(i);
            return -1;
        }
    }
    return 1;
}
/*计算W并打印结果*/
void myprint() {    
    for (int j = 0; j < M; j++) {
        for (int i = 0; i < N; i++) {
            W[j] += a[i] * trainData[i].X[j] * trainData[i].Y;
        }
        cout << W[j]<

你可能感兴趣的:(感知器(对偶形式))