根據(jù)《統(tǒng)計(jì)學(xué)習(xí)方法》用C++實(shí)現(xiàn)的感知器模型。
#include <iostream>
using namespace std;
const int N = 3;/*樣本數(shù)量*/
const int M = 2;/*輸入數(shù)據(jù)的維數(shù)*/
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 }
};
/*根據(jù)第i項(xiàng)數(shù)據(jù)更新一次*/
void update(int i) {
for (int j = 0; j < M; j++) {
W[j] += trainData[i].X[j] * trainData[i].Y;
}
b += trainData[i].Y;
}
/*判斷當(dāng)前解是否可行*/
int check() {
for (int i = 0; i < N; i++) {
double res = 0;
for (int j = 0; j < M; j++) {
res += trainData[i].X[j] * W[j];
}
res += b;
if (res*trainData[i].Y<=0) {
update(i);
return -1;
}
}
return 1;
}
void print_ans() {
for (int j = 0; j < M; j++) {
cout << W[j] << endl;
}
cout << b << endl;
}
int main()
{
while (check() < 0) {
}
print_ans();
system("pause");
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者