大工20秋《人工智能》大作业答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学习中心:

专业:

年级:

学号:

学生:

题目:人工智能课程设计(回归算法)

1.谈谈你对本课程学习过程中的心得体会与建议?

经过一学期的网上学习,我对《人工智能》这门课程有了初步的认识,人工智能这门课程内容新颖,涉及计算机知识非常广,学习起来极富挑战性,学到的知识在未来我们的工作中用处也非常大,当然,这门课也比较深奥,单单《人工智能》只是一个入门,后面我也会在课后继续深入学习有关人工智能这方面的知识。在学习过程中我始终跟随老师视频讲解,严格要求自己,收获很大。老师的讲解深入浅出,在学识知识的同时,也激发了我的学习兴趣。我由衷的感谢老师的教导,感谢老师们不辞辛苦录制课件,感谢自己能获得这次宝贵的学习机会。

2.《人工智能》课程设计,从以下5个题目中任选其一作答。

《人工智能》课程设计

题目二:回归算法

要求:(1)撰写一份word文档,里面包括(常见的回归算法、基于实例的算法具体细节)章节。

(2)常见的回归算法包括:最小二乘法(Ordinary Least

Square),逻辑回归(Logistic Regression),逐步式回归

(Stepwise Regression),多元自适应回归样条

(Multivariate Adaptive Regression Splines)以及本地散点

平滑估计(Locally Estimated Scatterplot Smoothing),请

选择一个算法描述下算法核心思想

(3)随意选用一个实例实现你所选择的回归算法。

答:

(1)最小二乘法算法核心思想

最小二乘法原理如下:

根据一组给定的实验数据,求出自变量x与因变量y的函数关系,只要求在给定点上的误差的平方和最小.当时,即

(1)

这里是线性无关的函数族,假定在上给出一组数据,以及对应的一组权,这里为权系数,要求使最小,其中

(2)

(2)中实际上是关于的多元函数,求I的最小值就是求多元函数I的极值,由极值必要条件,可得

(3)

根据内积定义引入相应带权内积记号

(4)

则(3)可改写为

这是关于参数的线性方程组,用矩阵表示为

(5) (5)称为法方程.当线性无关,且在点集

上至多只有n个不同零点,则称在X上满足Haar条件,此时(5)的解存在唯一。记(5)的解为

从而得到最小二乘拟合曲线

(6)

可以证明对,有

故(6)得到的即为所求的最小二乘解.它的平方误差为

(7)

均方误差为

在最小二乘逼近中,若取,则,表示为

(8)

此时关于系数的法方程(5)是病态方程,通常当n≥3时都不直接取作为基。

(2)最小二乘法C语言实例实现

输入:已知点的数目以及各点坐标。

输出:根据最小二乘法原理以及各点坐标求出拟合曲线。

程序流程:

程序:

#include

#include

#include

#include

float average(int n,float *x) {int i;

float av;

av=0;

for(i=0;i

av+=*(x+i);

av=av/n;

return(av);

}

//平方和

float spfh(int n,float *x)

{int i;

float a,b;

a=0;

for(i=0;i

a+=(*(x+i))*(*(x+i));

return(a);

}

//和平方

float shpf(int n,float *x)

{int i;

float a,b;

a=0;

for(i=0;i

a=a+*(x+i);

b=a*a/n;

return(b);

}

//两数先相乘,再相加

float dcj(int n,float *x,float *y) {int i;

float a;

a=0;

for(i=0;i

a+=(*(x+i))*(*(y+i));

return(a);

}

//两数先相加,再相乘

float djc(int n,float *x,float *y) {int i;

float a=0,b=0;

for(i=0;i

{a=a+*(x+i);

b=b+*(y+i);

}

a=a*b/n;

return(a);

}

//系数a

float xsa(int n,float *x,float *y) {float a,b,c,d,e;

a=spfh(n,x);

b=shpf(n,x);

c=dcj(n,x,y);

d=djc(n,x,y);

e=(c-d)/(a-b);

//printf("%f %f %f %f",a,b,c,d);

return(e);

}

float he(int n,float *y)

{int i;

float a;

a=0;

for(i=0;i

a=a+*(y+i);

return(a);

}

float xsb(int n,float *x,float *y,float a)

{ float b,c,d;

b=he(n,y);

c=he(n,x);

d=(b-a*c)/n;

return(d);

}

void main()

{ int n,i;

float *x,*y,a,b;

printf("请输入将要输入的有效数值组数n的值:"); scanf("%d",&n);

x=(float*)calloc(n,sizeof(float));

if(x==NULL)

{printf("内存分配失败");

exit(1);

}

y=(float*)calloc(n,sizeof(float));

if(y==NULL)

{printf("内存分配失败");

exit(1);

}

printf("请输入x的值\n");

for(i=0;i

相关文档
最新文档