关闭

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

309人阅读 评论(0) 收藏 举报
分类:

   感知机的定义:


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


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


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

  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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:178528次
    • 积分:2336
    • 等级:
    • 排名:第16013名
    • 原创:3篇
    • 转载:325篇
    • 译文:0篇
    • 评论:8条
    最新评论