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

   感知机的定义:


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


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


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

[cpp]  view plain copy
  1. #include<iostream>  
  2. #include<fstream>  
  3. using namespace std;  
  4.   
  5. const int num = 10;//数据集大小(估计)  
  6. int count = 0;//数据集大小(实际)  
  7. bool flag = true;//是否误分类  
  8.   
  9. struct DataSet  
  10. {  
  11.     double x1;  
  12.     double x2;  
  13.     int y;  
  14. }data[num];  
  15.   
  16. double eta = 1.0;//学习率  
  17. double w[2] = {0.0, 0.0}, b = 0.0;//定义参数  
  18.   
  19. //从文件中读取数据  
  20. void readData()  
  21. {  
  22.     ifstream file;  
  23.     file.open("data.dat");  
  24.     int i = 0;  
  25.     while(!file.eof())  
  26.     {  
  27.         file >> data[i].x1 >> data[i].x2 >> data[i].y;  
  28.         i++;  
  29.         count++;  
  30.     }  
  31.     file.close();  
  32. }  
  33.   
  34. int main()  
  35. {  
  36.     int i;  
  37.     int n = 0;//迭代次数  
  38.     readData();//读入数据  
  39.   
  40.     //输出数据集  
  41.     cout << "数据集为:" << endl;  
  42.     for(i = 0; i < count; i++)  
  43.     {  
  44.         cout << data[i].x1 << "  " << data[i].x2 << "  " << data[i].y << endl;  
  45.     }  
  46.       
  47.     while(flag)  
  48.     {  
  49.         for(i = 0; i < count; i++)  
  50.         {  
  51.             flag = false;  
  52.             if( data[i].y * (w[0] * data[i].x1 + w[1] * data[i].x2 + b) <= 0)  
  53.             {  
  54.                 flag = true;  
  55.                 w[0] = w[0] + eta * data[i].y * data[i].x1;  
  56.                 w[1] = w[1] + eta * data[i].y * data[i].x2;  
  57.                 b = b + eta * data[i].y;  
  58.                 n++;  
  59.                 break;  
  60.             }  
  61.         }  
  62.     }  
  63.   
  64.     cout << endl << "结果:" << endl;   
  65.     cout << "w = " << w[0] << ", " << w[1] << " " << "b=" << b << endl;  
  66.     cout << "迭代次数:" << n << endl;  
  67.   
  68.     return 0;  
  69. }  
    数据集:data.dat, 内容如下图所示:


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


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


网址:http://blog.csdn.net/IDMer/article/details/49365301

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值