机器学习 PPT_四月的小白的博客-程序员信息网_机器学习ppt

技术标签: 机器学习  过拟合和欠拟合  梯度下降  资源  线性回归  

    软件技术中心的例会终于也轮到我了,为了给小伙伴们讲一点干货,于是开始了为期一周的学习,从百度知乎博客到请教学长(JY大佬)甚至查阅相关书籍资料,终于有所收获,并对其产生了浓厚兴趣,希望以后能够在这方面有更大的进步。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#include<bits/stdc++.h> 
using namespace std;
double cx[1000000],cy[1000000],cz[1000000];	//存储测试数据的数组 
int main(){
	int sum;
	double a1,b1,c1,vol,max; 
	
	printf("请输入生成数据的数量:");
	cin>>sum;
	printf("请输入数据上限:");
	cin>>max;
	printf("\n请输入计算公式的两个系数和一个常数\n\n");
	printf("a=");
	cin>>a1;
	printf("\nb=");
	cin>>b1;
	printf("\nc=");
	cin>>c1;
	printf("\n\n请输入生成数据的误差百分比:");
	cin>>vol;
	srand(time(NULL)); 
	for(int k=0;k<sum;k++){
		cx[k]=(double)rand()/RAND_MAX*max;
		cy[k]=(double)rand()/RAND_MAX*max;
		cz[k]=(a1*cx[k]+b1*cy[k]+c1)*((((double)rand()/RAND_MAX*2-1)*vol)+1);
	}
	FILE *fp1;
	fp1=fopen("xunlian.txt","w");
	for(int k=0;k<sum;k++)
	fprintf(fp1,"%lf %lf %lf ",cx[k],cy[k],cz[k]);
	fclose(fp1);
	cout<<"成功!";
}

 

 

 

 

#include<bits/stdc++.h> 
using namespace std;

//一些全局变量  
double xx=0,yy=0,zz=0;	//平均数
int i;
int num;	//数据数 
double a,b,c;	//系数
double x[1000000],y[1000000],z[1000000];	//两个自变量和一个因变量(z)

//读取数据的函数 
void duqu(){
	printf("请输入要从“xunlian.txt”中获得的训练数据组数:"); 
	scanf("%d",&num);
	FILE *fp;	//打开文档
	fp=fopen("xunlian.txt","r"); 
	for(i=0;i<num;i++){
		fscanf(fp,"%lf",&x[i]);
		fscanf(fp,"%lf",&y[i]);
		fscanf(fp,"%lf",&z[i]);
	}
	fclose(fp);	//关闭文档
}

//求平均数的函数 
void jun(){
	for(i=0;i<num;i++){
		xx+=x[i];
		yy+=y[i];
		zz+=z[i];
	}
	xx/=num;
	yy/=num;
	zz/=num;
}

//对积的求和函数 
double two(double *q,double *qq){
	double qa=0;
	for(i=0;i<num;i++) qa+=q[i]*qq[i];
	return qa;
}

//最小二乘法求方程系数的函数(核心)
void xishu(){
	b=(two(x,z)*two(y,y)-two(y,z)*two(x,y))/(two(x,x)*two(y,y)-two(x,y)*two(x,y));
	c=(two(y,z)*two(x,x)-two(x,z)*two(x,y))/(two(x,x)*two(y,y)-two(x,y)*two(x,y));
	a=zz-b*xx-c*yy;
}

//开始计算 
void jisuan(){
	printf("\n系数分别为:\n\n%.16lf\n\n%.16lf\n\n",c,b);
	printf("%.16f\n\n请输入测试数据:",a);
	double ans,x1,y1;
		scanf("%lf %lf",&x1,&y1);
		ans=c*x1+b*y1+a;
		printf("\n答案近似为:%.16lf\n\n",ans);
} 

int main(){
	for(;;){

		duqu();	//读取数据 
	
		jun();	//求平均数 
	
		xishu();	 //求系数 
	
		jisuan();	//开始计算
		
	}
}

 

 

 

 

 

 

 

 

#include<bits/stdc++.h> 
using namespace std;
//一些全局变量  
int i;
int num;	//数据数 
double a,b,c,c11;	//系数
double x[10000],y[10000],z[10000];	//两个自变量和一个因变量(z)

//读取数据的函数 
void duqu(){
	printf("请输入要从“xunlian.txt”中获得的训练数据组数:"); 
	scanf("%d",&num);
	FILE *fp;	//打开文档
	fp=fopen("xunlian.txt","r"); 
	for(i=0;i<num;i++){
		fscanf(fp,"%lf",&x[i]);
		fscanf(fp,"%lf",&y[i]);
		fscanf(fp,"%lf",&z[i]);
	}
	fclose(fp);	//关闭文档
}

//不断优化的方法求方程系数的函数(核心)
void xishu(){
	srand(time(NULL)); 
	double wu,ans,nn=0;
	for(i=0;i<num;i++)
		wu=wu+z[i]*z[i];
	cout<<"初始误差:"<<wu<<endl;
	int m;
	for(;;){
		m=0;
		
		a=a+0.01;
		ans=0;
		for(i=0;i<num;i++)
			ans=ans+(z[i]-a*x[i]-b*y[i]-c)*(z[i]-a*x[i]-b*y[i]-c);
		if(ans>=wu) { a=a-0.01;m++;}
		else wu=ans;
		printf("%lf\n",wu); 
		
		a=a-0.01;
		ans=0;
		for(i=0;i<num;i++)
			ans=ans+(z[i]-a*x[i]-b*y[i]-c)*(z[i]-a*x[i]-b*y[i]-c); 
		if(ans>=wu) { a=a+0.01;m++;}
		else wu=ans;
		printf("%lf\n",wu); 
		
		b=b+0.01;
		ans=0;
		for(i=0;i<num;i++)
			ans=ans+(z[i]-a*x[i]-b*y[i]-c)*(z[i]-a*x[i]-b*y[i]-c); 
		if(ans>=wu) { b=b-0.01;m++;}
		else wu=ans;
		printf("%lf\n",wu); 
		
		b=b-0.01;
		ans=0;
		for(i=0;i<num;i++)
			ans=ans+(z[i]-a*x[i]-b*y[i]-c)*(z[i]-a*x[i]-b*y[i]-c); 
		if(ans>=wu) { b=b+0.01;m++;}
		else wu=ans;
		printf("%lf\n",wu); 
		
		c=c+0.01;
		ans=0;
		for(i=0;i<num;i++)
			ans=ans+(z[i]-a*x[i]-b*y[i]-c)*(z[i]-a*x[i]-b*y[i]-c);
		if(ans>=wu) { c=c-0.01;m++;}
		else { wu=ans;c11=c;}
		printf("%lf\n",wu); 
		
		c=c-0.01;
		ans=0;
		for(i=0;i<num;i++)
			ans=ans+(z[i]-a*x[i]-b*y[i]-c)*(z[i]-a*x[i]-b*y[i]-c); 
		if(ans>=wu) { c=c+0.01;m++;}
		else { wu=ans;c11=c;}
		printf("%lf\n",wu); 
		
		if(m==6) break;
	}
}

//开始计算 
void jisuan(){
	printf("\n系数分别为:\n\n%.16lf\n\n%.16lf\n\n",a,b);
	printf("%.16f\n\n请输入测试数据:",c11);
	double ans,x1,y1;
		scanf("%lf %lf",&x1,&y1);
		ans=a*x1+b*y1+c11;
		printf("\n答案近似为:%.16lf\n\n",ans);
} 

int main(){
	for(;;){

		duqu();	//读取数据
	
		xishu();	 //优化系数
	
		jisuan();	//开始计算
		
	}
}

/*
                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
             .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  ` - `.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            佛祖保佑       永无BUG
*/ 

 

 

 

 

 

 

#include<bits/stdc++.h> 
using namespace std;

//一些全局变量  
int i;
int num;	//数据数 
double a,b,a1,b1;	//系数
double x[10000],y[10000],z[10000];	//两个自变量和一个因变量(z)

//读取数据的函数 
void duqu(){
	printf("请输入要从“xunlian.txt”中获得的训练数据组数:"); 
	scanf("%d",&num);
	FILE *fp;	//打开文档
	fp=fopen("xunlian.txt","r"); 
	for(i=0;i<num;i++){
		fscanf(fp,"%lf",&x[i]);
		fscanf(fp,"%lf",&y[i]);
		fscanf(fp,"%lf",&z[i]);
	}
	fclose(fp);	//关闭文档
}

//不断优化的方法求方程系数的函数(核心)
void xishu(){
	double wu,ans,wu0;
	for(i=0;i<num;i++)
		wu=wu+z[i]*z[i];
	wu0=wu;
	cout<<"初始误差:"<<wu<<endl;
	for(a=0;a<5;a=a+0.001){
		for(b=0;b<5;b=b+0.001){
			ans=0;
			for(i=0;i<num;i++)
				ans=ans+(z[i]-a*x[i]-b*y[i])*(z[i]-a*x[i]-b*y[i]);
			if(ans<wu){
				wu=ans;
				a1=a;
				b1=b;
				printf("%.3lf	%.3lf\n",a,b);
			}
		}
	}
}

//开始计算 
void jisuan(){
	printf("\n系数分别为:\n\n%.3lf\n\n%.3lf\n\n",a1,b1);
	printf("请输入测试数据:");
	double ans,x1,y1;
		scanf("%lf %lf",&x1,&y1);
		ans=a1*x1+b1*y1;
		printf("\n答案近似为:%.16lf\n\n",ans);
} 

int main(){
	for(;;){

		duqu();	//读取数据
	
		xishu();	 //优化系数
	
		jisuan();	//开始计算
		
	}
}

/*
                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
             .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  ` - `.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            佛祖保佑       永无BUG
*/ 

 

 

 

 

 

 

// 梯度下降算法求一元凸函数的最优解(极值点)  
// 梯度下降算法 X(n+1) = X(n) - ηf'(X)  
// 设一元凸函数 y = ax^2 + bx + c (a > 0)  
  
// 1.构造一元凸函数  
float a = 1;        // a > 0  
float b = 2;  
float c = 3;  
  
// 2.设置下降起点和下降率(学习率)  
float Xn1, Xn0;     // X(n+1) 和 X(n)  
Xn0 = 10;           // 下降起点  
// 下降率yita,该值越小,下降越慢(训练过程越慢),结果越准确,该值越大,下降越快(训练过程越快),结果越不准确,  
// 当值超过一定的值时,结果无法收敛,将发散。  
float yita = 0.001;   
  
float det = 0.001;  // 用于利用极限求导数  
float thresh = 0.000001; // 判断收敛的阈值  
int times = 0;      // 迭代次数  
  
// 3.开始梯度迭代  
while (1)  
{  
    // 极限法求导数(不使用解析解,因为大部分情况下无法直接求得解析解)  
    //                  f(x+det) - f(x)  
    // lim      =   -----------------------  
    //(det->0)                det  
    //        
    float Xgap = Xn0 + det;  
    float Fdiv = (((a * Xgap * Xgap) + (b * Xgap) + c) - ((a * Xn0 * Xn0) + (b * Xn0) + c)) / det;  // 在Xn0处的导数  
    Xn1 = Xn0 - yita * Fdiv;  
  
    times++;  
    // 如果梯度下降趋于稳定(下降幅度基本不变),就认为下降已经收敛,找到最优解。  
    if (fabs(Xn1 - Xn0) < thresh){  
          
        cout << "yita = "             << yita   << endl;  
        cout << "Best value: "        << Xn1        << endl;  
        cout << "Iteration times: " << times    << endl;  
        break;  
    }  
    Xn0 = Xn1;  
}  

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/LittleWhiteLv/article/details/79830628

智能推荐

使用Dockerfile构建supervisor容器部署项目,CMD ["supervisord","-c","/etc/supervisord.conf"]执行失败_特仑苏纯酸奶的博客-程序员信息网

问题描述:在编写Dockerfile创建supervisor容器时,最后一条启动supervisor的命令不起作用 -&gt; CMD ["supervisord","-c","/etc/supervisord.conf"],但是进到容器内部执行supervisord -c/etc/supervisord.conf可以成功运行。先贴出来Dockerfile文件代码FROM python...

ES6 类(Class)基本用法_Mr.XiaoYang的博客-程序员信息网

查看更多资源1. 简介:ES6引入了Class(类)这个概念,作为对象的模板,通过class关键字,可以定义类。基本上ES6的class可以看作是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法让对象原型的写法更加清晰、更像面向对象编程的语法。本案例通过实现一个自由落体运动的小球,来阐述ES6 类(Class)基本用法。鼠标点击画布,点击处生成随机颜色大小的小球,并做...

Java 并发编程:Synchronized 及其实现原理_吧主的博客-程序员信息网

点击上方 "程序员小乐" ,关注公众号8点20分,第一时间与你相约每日英文Take risks. If you win; you will be happy. If ...

scratch作品导出html5,抓取scratch源码,使用二进制方式保存。_奥雷卡尔克斯的博客-程序员信息网

'''http://www.kidsXXX.cn/product/scratch/0为作品汇总地址,为动画,游戏音乐故事科学编程大作战,依次到5http://www.kidsXXX.cn/product/4285为信息页面,获取作品名称,作品说明,作品作者http://www.kidsXXX.cn/getkey/8981为下源二进制文件,数字为ID如果html源码中有canvas id="scra...

疯狂序列(水题) - 京东2018校招笔试_CheckChek的博客-程序员信息网

东东从京京那里了解到有一个无现长的数字序列:1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,…(数字k在该序列正好出现k次)。东东想知道这个数字序列的第n项是多少

AntD Tree右键菜单-react-contexify_云飞扬扬的博客-程序员信息网_antd tree 右键菜单

https://www.npmjs.com/package/react-contexifynpm ireact-contexify使用版本:5.0.0说明:5.0.0版本中没有MenuProvider,网上很多方案有MenuProvider是react-contexify老版本。比如参考:https://github.com/ant-design/ant-design/issues/5151简单Demoimport React from 'react';import...

随便推点

select多选框在移动端和PC端的不同表现_草鞋船的博客-程序员信息网_移动端多选框

select多选框的整体思路是:将被选中的值连成字符串后赋值给某标签(以input、div标签为例)即可,下面会进行详细说明。ps:PC端和移动端的js代码写的不太一样,但是原理是一样的(因为第一个是我写的,另一个是别人写的…)。整体效果图:一、select多选框在PC端的表现,类似于下拉框,可自己调整宽高,需要配合Ctrl键进行多选。为了宽高不规整影响页面样式,可对option进行定位并...

maven和gradle的比较与使用_cookieTo的博客-程序员信息网_maven与

在eclipse中配置maven环境,在android studio使用gradle导入第三方库。对maven和gradle两种构建工具进行介绍和比较

大前端–Vue前端体系、前后端分离_流浪所的博客-程序员信息网

大前端–Vue前端体系、前后端分离前言Soc:关注点分离原则HTML+CSS+JS(视图):给用户看,刷新后台给的数据网络通信:axios页面跳转:vue-router状态管理:vuexVue-UI:ICE1概述Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,V

Python之最简单爬虫_是黎白先生阿的博客-程序员信息网_python最简单的爬虫

爬虫前凑: (1)明确目的 (2)找到数据对应的网页 (3)分析网页的结构找到数据所在的标签位置 (4)模拟HTTP请求,向服务器发送请求获取到服务器返回给我们的HTML (5)用正则表达式提取我们要的数据 (6)分析、精炼、展示、保存数据

React Js 实现锚点定位的集中方法_churao5488的博客-程序员信息网

React Js 实现锚点定位的集中方法注:以水平锚点定位为例,垂直方向亦如此方法1. url hash值跳转到达页面可视位置,滚动区域的左/右边,无滚动的平滑效果,效果差。设置,用户点击并跳转&lt;a href="#anchorId"&gt;锚点1&lt;/a&gt;待跳转...

Jmeter 分布式配置_liujingqiu的博客-程序员信息网_jmeter分布式配置

在使用Jmeter进行性能测试时,如果并发数比较大(比如项目需要支持上万的并发量),单台PC的配置(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能。 根据目前PC的配置:4.00G内存,可以最多达到2000左右的并发数量。那么对于支持上万的并发量,一台PC是很难实现的。 Jmeter分布式执行原理 1 Jmeter分布式测试时,选择其中一台作为调度机(mast

推荐文章

热门文章

相关标签