《统计学习方法》+感知机+C++代码(简单)实现

本文介绍了感知机的学习算法,并以例2.1为例,提供了C++编程实现的详细代码,程序运行展示了结果。虽然只是简单实现,但欢迎交流讨论,共同进步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    感知机的定义:


    感知机学习算法的原始形式算法描述:


    以例2.1为例,编程实现该算法:


    C++编程实现,程序代码,在资源里,有兴趣可以下载,代码如下:

#include<iostream>
#include<fstream>
using namespace std;

const int num = 10;//数据集大小(估计)
int count = 0;//数据集大小(实际)
bool flag = true;//是否误分类

struct DataSet
{
	double x1;
	double x2;
	int y;
}data[num];

double eta = 1.0;//学习率
double w[2] = {0.0, 0.0}, b = 0.0;//定义参数

//从文件中读取数据
void readData()
{
	ifstream file;
	file.open("data.dat");
	int i = 0;
	while(!file.eof())
	{
		file >> data[i].x1 >> data[i].x2 >> data[i].y;
		i++;
		count++;
	}
	file.close();
}

int main()
{
	int i;
	int n = 0;//迭代次数
	readData();//读入数据

	//输出数据集
	cout << "数据集为:" << endl;
	for(i = 0; i < count; i++)
	{
		cout << data[i].x1 << "  " << data[i].x2 << "  " << data[i].y << endl;
	}
	
	while(flag)
	{
		for(i = 0; i < count; i++)
		{
			flag = false;
			if( data[i].y * (w[0] * data[i].x1 + w[1] * data[i].x2 + b) <= 0)
			{
				flag = true;
				w[0] = w[0] + eta * data[i].y * data[i].x1;
				w[1] = w[1] + eta * data[i].y * data[i].x2;
				b = b + eta * data[i].y;
				n++;
				break;
			}
		}
	}

	cout << endl << "结果:" << endl; 
	cout << "w = " << w[0] << ", " << w[1] << " " << "b=" << b << endl;
	cout << "迭代次数:" << n << endl;

	return 0;
}
    数据集:data.dat, 内容如下图所示:


程序运行结果,如下图所示:


    这样结果就求出来了,图的话就不画了,有兴趣的可以用opencv把图像绘制出来。只是简单实现,如果有不对的地方,很乐意一起交流,共同进步。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值