感知机算法理解与C++实现

        开始接触机器学习,今天刚刚学习了感知机并用C++实现了算法。现在整理一下,与大家分享,希望能帮到刚刚入门机器学习的同学。

                   一、简单叙述一下感知机算法的原理

#include

#include

#include

using namespace std;

const int N = 5;

class data_set {

public:

data_set();

~data_set();

void set_x(const double x[2]);

void set_y(const double y);

double get_x0();

double get_x1();

double get_y();

private:

double x[2];

double y;

};

double w[2] = {0, 0};  //初始化参数

double b = 0;

int counts = 0, eta = 1;

data_set::data_set() {

this->x[0] = 0;

this->x[1] = 0;

this->y = 0;

}

data_set::~data_set() {

}

void data_set::set_x(const double x[2]) {

this->x[0] = x[0];

this->x[1] = x[1];

}

void data_set::set_y(const double y) {

this->y = y;

}

double data_set::get_x0() {

return this->x[0];

}

double data_set::get_x1() {

return this->x[1];

}

double data_set::get_y() {

return this->y;

}

int read_file_data(class data_set data[N], string file_name) {

ifstream open_file;

int i = 0;

open_file.open(file_name);

if (!open_file.is_open()) {

cout << "can not open " << file_name << endl;

return -1;

}

while (!open_file.eof()) {

double x[2] = {0};

double y = 0;

open_file >> x[0] >> x[1] >> y;

data[i].set_x(x);

data[i].set_y(y);

i++;

counts++;

cout << "x[0] = " << x[0] << ", x[1] = " << x[1] << ", y = " << y << endl;

}

open_file.close();

if (i == 0) {

return -1;

}

return 0;

}

int main(int argc, char *argv[]) {

class data_set data[N];

int i = 0;

bool flag = true;

int err = read_file_data(data, "test_data.txt");

if (err < 0) {

while (1);

return 0;

}

while (flag) {

for (i = 0; i < counts; i++) {

flag = false;

if (data[i].get_y() * (data[i].get_x0() * w[0] + data[i].get_x1() * w[1] + b) <= 0) {

flag = true;

w[0] = w[0] + eta * data[i].get_y() * data[i].get_x0();

w[1] = w[1] + eta * data[i].get_y() * data[i].get_x1();

b = b + eta * data[i].get_y();

break;

}

}

}

cout << "w[0] = " << w[0]  << ", w[1] = " << w[1] << ", b = " << b << endl;

while (1);

return 0;

}

你可能感兴趣的:(感知机算法理解与C++实现)