最近听<模式识别 中国科学院19讲> 视频(想要的给我留言.我给你们发邮箱)写了一个感知器的作业.我平时不写作业.这次写了作业当然有发一下给博客加些分.原创的加10分.
下面是问题
ω1: {(0 0 0)T, (1 0 0)T, (1 0 1)T, (1 1 0)T}
ω2: {(00 1)T, (0 1 1)T, (0 1 0)T, (1 1 1)T}
下面是代码
int main()
{
/*
ω1: {(0 0 0)T, (1 0 0)T, (1 0 1)T, (1 1 0)T}
ω2: {(0 0 1)T, (0 1 1)T, (0 1 0)T, (1 1 1)T}
*/
double w[3] = {1,1,1};
int data[8][3] = {
{0,0,0,}, {1,0,0},{1,0,1},{1,1,0}
,{0,0,1},{0,1,1},{0,1,0},{1,1,1}
};
int label[8] = {-1,-1,-1,-1,1,1,1,1};
for (int i =0; i < 100; i++)
{
int error = 0;
for (int n = 0; n < 8; n++)
{
double sum = data[n][0] * w[0] + data[n][1] * w[1] + data[n][2] * w[2];
if (sum * label[n] < 0)
{
error++;
//调整权重
if(label[n] == -1)
{
if (data[n][0] == 1)
{
w[0] -= 0.01;
}
if (data[n][1] == 1)
{
w[1] -= 0.01;
}
if (data[n][2] == 2)
{
w[2] -= 0.01;
}
}
if (label[n] == 1)
{
if (data[n][0] == 1)
{
w[0] += 0.01;
}
if (data[n][1] == 1)
{
w[1] += 0.01;
}
if (data[n][2] == 2)
{
w[2] += 0.01;
}
}
}
}
if (error < 2)
{
break;
}
}
return 0;
}