C++版
#include <bits/stdc++.h>
using namespace std;
const double exps = 1e-5;
double dataset[6][5]=
{
{1,0.10723,0.64385,0.29556,1},
{1,0.2418, 0.83075, 0.42741,1},
{1,0.23321,0.81004,0.98691,1},
{1,0.36163, 0.14351,0.3153,-1},
{1, 0.46984, 0.32142, 0.00042772,-1},
{1, 0.25969, 0.87208,0.075063, -1}
};
double W[4] = {1, 1, 1, 1}; //全部权值初始化为1
double sign(double a)
{
return a > 0 ? 1: -1;
}
double dot(double *x)
{
double sum = 0;
for (int i = 0; i < 4; i++)
{
sum += (W[i] * x[i]);
}
return sign(sum);
}
int main()
{
int k = 0;
int count1 = 0;
while(count1 < 6)
{
count1 = 0;
for (int i = 0; i < 6; i++)
{
double *x = dataset[i];
double y = dot(x);
if(abs(y - x[4]) < exps)
{
continue;
}
else
{
for (int s = 0; s < 4; s++)
{
W[s] = W[s] + x[4] * x[s];
}
}
}
for (int i = 0; i < 6; i++)
{
double *x = dataset[i];
double y = dot(x);
if(abs(y - x[4]) < exps)
{
count1++;
}
}
}
cout << count1 << endl;
return 0;
}
Python版
import numpy as np
from numpy import *
W = np.ones(4); #权值初始化为1
dataset = [[1,0.10723,0.64385, 0.29556 ,1],
[1 ,0.2418, 0.83075, 0.42741, 1],
[1 ,0.23321 ,0.81004 ,0.98691, 1],
[1 ,0.36163, 0.14351 ,0.3153, -1],
[1, 0.46984, 0.32142, 0.00042772, -1],
[1, 0.25969, 0.87208 ,0.075063, -1],
]
count = 0;
while count < 6:
count = 0
for _ in range(len(dataset)):
X = dataset[_][:-1]
Y = np.dot(W, X)
if sign(Y) == sign(dataset[_][-1]):
continue
else:
W = W + (dataset[_][-1]) * np.array(X)
for _ in range(len(dataset)):
X = dataset[_][:-1]
Y = np.dot(W, X)
if sign(Y) == sign(dataset[_][-1]):
count += 1
print(count)