c++ 实现感知机算法/对偶算法

#include
using namespace std;
struct type_
{
int x[2];
int y;
};

int main()
{
bool check_(int w[2], int b, type_ x);
int update(int w[2], int &b, int &learning_ratio, const type_ x);
type_ xx[3] = {{{3, 3}, 1}, {{4, 3}, 1}, {{1, 1}, -1}};
int w[2] = {0, 0};
int b = 0;
bool flag=true;
int learning_ratio = 1;
while (flag)
{
for (int i = 0; i < 3; i++)
{
flag = false;
if (check_(w, b, xx[i]))
{
flag = true;
update(w, b, learning_ratio, xx[i]);
break;
}
}
}
cout << "w= " << w[0] << “,” << w[1] << ",b= " << b << endl;
return 0;
}
bool check_(int w[2], int b, type_ x)
{
int W;
W = w[0] * x.x[0] + w[1] * x.x[1] + b;
if (x.y * W <= 0)
return true;
else
return false;
}
int update(int w[2], int &b, int &learning_ratio, type_ x)
{
w[0] = w[0] + learning_ratio * x.y * x.x[0];
w[1] = w[1] + learning_ratio * x.y * x.x[1];
b = b + learning_ratio * x.y;
}
对偶:
#include
#include
using namespace std;
struct Date
{
int x1;
int x2;
int y;
};
int main()
{
vector<vector> Gram(3);
Date date[3] = {{3, 3, 1}, {4, 3, 1}, {1, 1, -1}};
int b = 0;
bool flag = true;
int a[3] = {0,0,0};
int learning_ratio = 1;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
{
Gram[i].push_back(date[i].x1 * date[j].x1 + date[i].x2 * date[j].x2);
}
while(flag)
{
for (int i = 0; i < 3; i++)
{
flag = false;
int test = 0;
for (int j = 0; j < 3; j++)
{
test = test + a[j] * date[j].y * Gram[j][i]+b;
}
if (date[i].y * test <= 0)
{
flag = true;
a[i] = a[i] + 1;
b = b + date[i].y;
break;
}
}
}
int w[2] = {0};
for (int k = 0; k < 3; k++)
{
w[0] = w[0] + a[k] * date[k].y * date[k].x1;
w[1] = w[1] + a[k] * date[k].y * date[k].x2;
b = b + a[k] * date[k].y;
}
cout << “w[0]=” << w[0] << “,w[1]=” << w[1] << “,b=” << b << endl;
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值