看了机器学习的第三课,实现了一下LWR算法。

[cpp] view plaincopy
  1. #include<iostream>
  2. using namespace std;
  3. const int Number = 6;
  4. const int Dimesion = 3;
  5. const float learningRate=0.001;
  6. const float errorThr=1; //variance threshold
  7. const int MAX=1000;     //Max times of iteration
  8. typedef struct Data{
  9. float vectorComponent[Dimesion];
  10. }vectorData;
  11. vectorData x[Number] = {
  12. /* {1,1,4},
  13. {1,2,5},
  14. {1,5,1},
  15. {1,4,2},*/
  16. {1,1,1},
  17. {1,1,3},
  18. {1,1,2},
  19. {1,2,3},
  20. {1,2,1},
  21. {1,2,2},
  22. };
  23. float y[Number]={2,10,5,13,5,8};
  24. /lwr(局部线性回归)
  25. float weightValue(vectorData xi,vectorData x){
  26. float weight = 0.0;
  27. for(int i=0;i<Dimesion;i++){
  28. weight+=pow(xi.vectorComponent[i]-x.vectorComponent[i],2);
  29. }
  30. float tempWeight = exp(-(weight/(2*36)));
  31. if(tempWeight<0.02)
  32. tempWeight = 0.0;
  33. return tempWeight;
  34. }
  35. float multiPly(vectorData x1,vectorData x2){
  36. float temp = 0.0;
  37. for(int i=0;i<Dimesion;i++){
  38. temp += x1.vectorComponent[i]*x2.vectorComponent[i];
  39. }
  40. return temp;
  41. }
  42. vectorData addVectorData(vectorData x1,vectorData x2){
  43. vectorData temp;
  44. for(int i=0;i<Dimesion;i++)
  45. temp.vectorComponent[i] = x1.vectorComponent[i]+x2.vectorComponent[i];
  46. return temp;
  47. }
  48. vectorData minusVectorData(vectorData x1,vectorData x2){
  49. vectorData temp;
  50. for(int i=0;i<Dimesion;i++)
  51. temp.vectorComponent[i] = x1.vectorComponent[i]-x2.vectorComponent[i];
  52. return temp;
  53. }
  54. vectorData numberMultiVectorData(float para,vectorData x1){
  55. vectorData temp;
  56. for(int i=0;i<Dimesion;i++)
  57. temp.vectorComponent[i] = x1.vectorComponent[i]*para;
  58. return temp;
  59. }
  60. float costFunction(vectorData parameter[],vectorData inputData[],float inputResultData[],vectorData object){
  61. float costValue = 0.0;
  62. float tempValue = 0.0;
  63. float weightedValue = 0.0;
  64. for(int i=0;i<Number;i++){
  65. tempValue = 0.0;
  66. //consider all the parameters although most of them is zero
  67. for(int j=0;j<Number;j++)
  68. tempValue += multiPly(parameter[j],inputData[i]);
  69. costValue += weightValue(inputData[i],object)*pow((inputResultData[i]-tempValue),2);
  70. }
  71. return (costValue/2*4);
  72. }
  73. int LocallyWeightedAgression(vectorData parameter[],vectorData inputData[],float resultData[],vectorData objectVector){
  74. float tempValue = 0.0;
  75. float errorCost = 0.0;
  76. float weightedValue = 0.0;
  77. errorCost=costFunction(parameter,inputData,resultData,objectVector);
  78. if(errorCost<errorThr)
  79. return 1;
  80. for(int iteration=0;iteration<MAX;iteration++){
  81. //stochastic
  82. for(int i=0;i<Number;i++){
  83. //calculate the h(x)
  84. weightedValue = weightValue(inputData[i],objectVector);
  85. tempValue=0.0;
  86. for(int j=0;j<Number;j++)
  87. tempValue+=multiPly(parameter[j],inputData[i]);
  88. //update the parameter by stochastic(随机梯度下降)
  89. printf("the next parameter is ");
  90. for(int ii=0;ii<Number;ii++){
  91. parameter[ii] = addVectorData(parameter[ii],numberMultiVectorData(weightedValue*learningRate*(resultData[i]-tempValue),inputData[i]));
  92. if(multiPly(parameter[ii],parameter[ii])!=0){
  93. for(int jj=0;jj<Dimesion;jj++){
  94. printf("%f ",parameter[ii].vectorComponent[jj]);
  95. }
  96. }
  97. }
  98. printf("\n");
  99. errorCost=costFunction(parameter,inputData,resultData,objectVector);
  100. printf("error cost is %f\n",errorCost);
  101. if(errorCost<errorThr)
  102. break;
  103. }//end stochastic one time
  104. }//end when the iteration becomes MAX
  105. //calculate the object vector
  106. float resultValue = 0.0;
  107. for(int i=0;i<Number;i++){
  108. resultValue += weightValue(inputData[i],objectVector)*multiPly(parameter[i],objectVector);
  109. }
  110. printf("result value is %f \n",resultValue);
  111. return 1;
  112. }
  113. int testLWA(){
  114. vectorData objectData = {1,1.5,1.5};
  115. vectorData localParameter[Number] = {0.0};
  116. LocallyWeightedAgression(localParameter,x,y,objectData);
  117. return 1;
  118. }
  119. int main(){
  120. //  DescendAlgorithm(parameter,x,y);
  121. //  system("pause");
  122. //clearParameter(parameter);
  123. //Stochastic(parameter,x,y);
  124. //float ForTestData[] = {1,10,20};
  125. //testData(ForTestData);
  126. testLWA();
  127. system("pause");
  128. return 1;
  129. }

设定的目标函数是平面方程 z=x^2+y^2 
实验数据是1.5,1.5 
计算结果是 5.124

机器学习的第三课,实现了一下LWR算法相关推荐

  1. [机器学习导论]——第三课——神经网络Ⅱ

    文章目录 第三课--神经网络Ⅱ 反向传播的一般情形 反向传播方程 反向传播算法 神经网络模型参数求解步骤 mini-batch 方程证明 BP1的证明 BP2的证明 BP3的证明 BP4的证明 神经网 ...

  2. 机器学习基础(三十二) —— 使用 Apriori 算法进行关联分析

    Apriori 在拉丁语中指"来自以前".当定义问题时,通常会使用先验知识或者假设,这被称作"一个先验"(a priori).在贝叶斯统计中,使用先验知识作为条 ...

  3. 0.0 目录-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授

    文章目录 第五课 第四课 第三课 第二课 第一课 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1.2 数学符号 ...

  4. 斯坦福大学机器学习第三课“多变量线性回归“

    斯坦福大学机器学习第三课"多变量线性回归(Linear Regression with Multiple Variables)" 斯坦福大学机器学习第四课"多变量线性回归 ...

  5. 【监督学习】第三课(机器学习,折半算法,专家算法,感知机perceptron,Winnow,在线学习)

    这里是监督学习第三课,长期更新,求关注! 前两课分别讲了监督学习最简单(普遍)的算法,线性回归,以及knn和常见的问题以及解决方式. 对于线性回归的计算复杂度优化由mn两个参数决定.根据他们的相对大小 ...

  6. 机器学习三个部分:输入、算法、输出 资料收集

    机器学习三个部分:输入.算法.输出. 输入:驱动机器学习的数据 输入是训练和算法需要的数据集.从源代码到统计数据,数据集可以包含任何东西: GSA / data(美国总务管理局数据):https:// ...

  7. 机器学习coursera 第三章编程作业

    机器学习coursera 第三章编程作业 Multi-class Classification and Neural Networks lrCostFunction 整个题目给了两个数据集,一个是关于 ...

  8. 第三课 大数据技术之Fink1.13的实战学习-时间和窗口

    第三课 大数据技术之Fink1.13的实战学习-时间和窗口 文章目录 第三课 大数据技术之Fink1.13的实战学习-时间和窗口 第一节 时间定义 1.1 Flink中的时间语义 1.2 两种时间语义 ...

  9. 北大AI公开课第三课--视觉计算变革与挑战by Face++孙剑

    之前立的flag倒了,今天才来扶,可是有什么办法呢,生活就是要厚着脸皮活下去啊. 今天一起来整理第三课,这是来自face++孙剑老师的分享,因为正好我自己本身也是做计算机视觉的,所以听他的分享,我觉得 ...

最新文章

  1. OOP 面向对象 七大原则 (一)
  2. 六角透明颜色[复制]
  3. 为什么watch机制不是银弹?
  4. 三维重建15:最近遇到的-标定-EKF-优化方法等
  5. 企业微信添加机器人播报天气
  6. 2597 团伙(并查集就是好用!)
  7. DLL中的自定义类型含有非导出公开字段,从而产生Release版本运行异常
  8. java quartz 触发_JavaEE进阶知识学习-----定时任务调度Quartz-2-触发器Trigger
  9. Ubuntu 8.04和Windows Server 2008 双体系的安置与卸载记
  10. 程序设计语言诞生——程序设计语言的发展历史
  11. qemu-kvm使用无线网卡桥接_网桥和无线网桥的概念及架设方案
  12. NANK南卡lite Pro无线蓝牙耳机上手体验
  13. 史上最暖2月谁制造?
  14. Java 多线程面试题及回答
  15. 读安晓辉之《Qt Quick 核心编程》
  16. Unity2020Video player发布后无法播放视频问题
  17. Python之生成器详解
  18. mac npm 相关命令
  19. delphi5开发人员指南_建立开发人员职位的黄金指南
  20. 高斯输出文件批量提取单点能:Shell脚本处理

热门文章

  1. S7-1200PLC 与温控仪表Modbus RTU通信
  2. wifi大师分销多开v3.1.5安装教程附带源码
  3. EOS代码架构及分析(四)
  4. 通过小程序实际微信运动步数与健步走活动的统计方案
  5. 《指数基金投资指南》读书笔记_2022002
  6. python爬豆瓣top250书籍_python爬虫练习-爬取豆瓣图书top250
  7. 怎么样才能进入BAT公司的研发部门
  8. 编辑PDF文件时如何提取页面
  9. ssm在线教学质量评价系统毕业设计源码141550
  10. emlog模板 Meta主题带后台开源版 资源娱乐网模板