机器学习的第三课,实现了一下LWR算法
看了机器学习的第三课,实现了一下LWR算法。
- #include<iostream>
- using namespace std;
- const int Number = 6;
- const int Dimesion = 3;
- const float learningRate=0.001;
- const float errorThr=1; //variance threshold
- const int MAX=1000; //Max times of iteration
- typedef struct Data{
- float vectorComponent[Dimesion];
- }vectorData;
- vectorData x[Number] = {
- /* {1,1,4},
- {1,2,5},
- {1,5,1},
- {1,4,2},*/
- {1,1,1},
- {1,1,3},
- {1,1,2},
- {1,2,3},
- {1,2,1},
- {1,2,2},
- };
- float y[Number]={2,10,5,13,5,8};
- /lwr(局部线性回归)
- float weightValue(vectorData xi,vectorData x){
- float weight = 0.0;
- for(int i=0;i<Dimesion;i++){
- weight+=pow(xi.vectorComponent[i]-x.vectorComponent[i],2);
- }
- float tempWeight = exp(-(weight/(2*36)));
- if(tempWeight<0.02)
- tempWeight = 0.0;
- return tempWeight;
- }
- float multiPly(vectorData x1,vectorData x2){
- float temp = 0.0;
- for(int i=0;i<Dimesion;i++){
- temp += x1.vectorComponent[i]*x2.vectorComponent[i];
- }
- return temp;
- }
- vectorData addVectorData(vectorData x1,vectorData x2){
- vectorData temp;
- for(int i=0;i<Dimesion;i++)
- temp.vectorComponent[i] = x1.vectorComponent[i]+x2.vectorComponent[i];
- return temp;
- }
- vectorData minusVectorData(vectorData x1,vectorData x2){
- vectorData temp;
- for(int i=0;i<Dimesion;i++)
- temp.vectorComponent[i] = x1.vectorComponent[i]-x2.vectorComponent[i];
- return temp;
- }
- vectorData numberMultiVectorData(float para,vectorData x1){
- vectorData temp;
- for(int i=0;i<Dimesion;i++)
- temp.vectorComponent[i] = x1.vectorComponent[i]*para;
- return temp;
- }
- float costFunction(vectorData parameter[],vectorData inputData[],float inputResultData[],vectorData object){
- float costValue = 0.0;
- float tempValue = 0.0;
- float weightedValue = 0.0;
- for(int i=0;i<Number;i++){
- tempValue = 0.0;
- //consider all the parameters although most of them is zero
- for(int j=0;j<Number;j++)
- tempValue += multiPly(parameter[j],inputData[i]);
- costValue += weightValue(inputData[i],object)*pow((inputResultData[i]-tempValue),2);
- }
- return (costValue/2*4);
- }
- int LocallyWeightedAgression(vectorData parameter[],vectorData inputData[],float resultData[],vectorData objectVector){
- float tempValue = 0.0;
- float errorCost = 0.0;
- float weightedValue = 0.0;
- errorCost=costFunction(parameter,inputData,resultData,objectVector);
- if(errorCost<errorThr)
- return 1;
- for(int iteration=0;iteration<MAX;iteration++){
- //stochastic
- for(int i=0;i<Number;i++){
- //calculate the h(x)
- weightedValue = weightValue(inputData[i],objectVector);
- tempValue=0.0;
- for(int j=0;j<Number;j++)
- tempValue+=multiPly(parameter[j],inputData[i]);
- //update the parameter by stochastic(随机梯度下降)
- printf("the next parameter is ");
- for(int ii=0;ii<Number;ii++){
- parameter[ii] = addVectorData(parameter[ii],numberMultiVectorData(weightedValue*learningRate*(resultData[i]-tempValue),inputData[i]));
- if(multiPly(parameter[ii],parameter[ii])!=0){
- for(int jj=0;jj<Dimesion;jj++){
- printf("%f ",parameter[ii].vectorComponent[jj]);
- }
- }
- }
- printf("\n");
- errorCost=costFunction(parameter,inputData,resultData,objectVector);
- printf("error cost is %f\n",errorCost);
- if(errorCost<errorThr)
- break;
- }//end stochastic one time
- }//end when the iteration becomes MAX
- //calculate the object vector
- float resultValue = 0.0;
- for(int i=0;i<Number;i++){
- resultValue += weightValue(inputData[i],objectVector)*multiPly(parameter[i],objectVector);
- }
- printf("result value is %f \n",resultValue);
- return 1;
- }
- int testLWA(){
- vectorData objectData = {1,1.5,1.5};
- vectorData localParameter[Number] = {0.0};
- LocallyWeightedAgression(localParameter,x,y,objectData);
- return 1;
- }
- int main(){
- // DescendAlgorithm(parameter,x,y);
- // system("pause");
- //clearParameter(parameter);
- //Stochastic(parameter,x,y);
- //float ForTestData[] = {1,10,20};
- //testData(ForTestData);
- testLWA();
- system("pause");
- return 1;
- }
设定的目标函数是平面方程 z=x^2+y^2
实验数据是1.5,1.5
计算结果是 5.124
机器学习的第三课,实现了一下LWR算法相关推荐
- [机器学习导论]——第三课——神经网络Ⅱ
文章目录 第三课--神经网络Ⅱ 反向传播的一般情形 反向传播方程 反向传播算法 神经网络模型参数求解步骤 mini-batch 方程证明 BP1的证明 BP2的证明 BP3的证明 BP4的证明 神经网 ...
- 机器学习基础(三十二) —— 使用 Apriori 算法进行关联分析
Apriori 在拉丁语中指"来自以前".当定义问题时,通常会使用先验知识或者假设,这被称作"一个先验"(a priori).在贝叶斯统计中,使用先验知识作为条 ...
- 0.0 目录-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
文章目录 第五课 第四课 第三课 第二课 第一课 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1.2 数学符号 ...
- 斯坦福大学机器学习第三课“多变量线性回归“
斯坦福大学机器学习第三课"多变量线性回归(Linear Regression with Multiple Variables)" 斯坦福大学机器学习第四课"多变量线性回归 ...
- 【监督学习】第三课(机器学习,折半算法,专家算法,感知机perceptron,Winnow,在线学习)
这里是监督学习第三课,长期更新,求关注! 前两课分别讲了监督学习最简单(普遍)的算法,线性回归,以及knn和常见的问题以及解决方式. 对于线性回归的计算复杂度优化由mn两个参数决定.根据他们的相对大小 ...
- 机器学习三个部分:输入、算法、输出 资料收集
机器学习三个部分:输入.算法.输出. 输入:驱动机器学习的数据 输入是训练和算法需要的数据集.从源代码到统计数据,数据集可以包含任何东西: GSA / data(美国总务管理局数据):https:// ...
- 机器学习coursera 第三章编程作业
机器学习coursera 第三章编程作业 Multi-class Classification and Neural Networks lrCostFunction 整个题目给了两个数据集,一个是关于 ...
- 第三课 大数据技术之Fink1.13的实战学习-时间和窗口
第三课 大数据技术之Fink1.13的实战学习-时间和窗口 文章目录 第三课 大数据技术之Fink1.13的实战学习-时间和窗口 第一节 时间定义 1.1 Flink中的时间语义 1.2 两种时间语义 ...
- 北大AI公开课第三课--视觉计算变革与挑战by Face++孙剑
之前立的flag倒了,今天才来扶,可是有什么办法呢,生活就是要厚着脸皮活下去啊. 今天一起来整理第三课,这是来自face++孙剑老师的分享,因为正好我自己本身也是做计算机视觉的,所以听他的分享,我觉得 ...
最新文章
- OOP 面向对象 七大原则 (一)
- 六角透明颜色[复制]
- 为什么watch机制不是银弹?
- 三维重建15:最近遇到的-标定-EKF-优化方法等
- 企业微信添加机器人播报天气
- 2597 团伙(并查集就是好用!)
- DLL中的自定义类型含有非导出公开字段,从而产生Release版本运行异常
- java quartz 触发_JavaEE进阶知识学习-----定时任务调度Quartz-2-触发器Trigger
- Ubuntu 8.04和Windows Server 2008 双体系的安置与卸载记
- 程序设计语言诞生——程序设计语言的发展历史
- qemu-kvm使用无线网卡桥接_网桥和无线网桥的概念及架设方案
- NANK南卡lite Pro无线蓝牙耳机上手体验
- 史上最暖2月谁制造?
- Java 多线程面试题及回答
- 读安晓辉之《Qt Quick 核心编程》
- Unity2020Video player发布后无法播放视频问题
- Python之生成器详解
- mac npm 相关命令
- delphi5开发人员指南_建立开发人员职位的黄金指南
- 高斯输出文件批量提取单点能:Shell脚本处理