《模式识别-线性拟合实验报告-黄志强》由会员分享,可在线阅读,更多相关《模式识别-线性拟合实验报告-黄志强(8页珍藏版)》请在金锄头文库上搜索。
1、 线性拟合-实验报告 内蒙古大学 计算机学院 31209003 黄志强一实验方法: 1最小二乘法 2梯度下降法二公式推导1 最小二乘用线性函数h a(x)=a0+a1*x来拟合y=f(x);构造代价函数J(a): 代价函数分别对a0和a1求偏导,连个偏导数都等于0成为两个方程,两个方程联合求解得到a0和a1;2 梯度下降 构造代价函数J(a),J(a)对a0,a1分别求偏导得到梯度,J(a)/a0=n*a0+a1*sumx-sumy;J(a)/a1=a1*sumx*sumx+a0*sumx-sumx*sumy; tidu_a0=n*a0+a1*sumx-sumy; tidu_a1=a1*sum
2、xx+a0*sumx-sumxy;设置步长为l,迭代m次 delta_r=sqrt(tidu_a0*tidu_a0+tidu_a1*tidu_a1); a0=a0-l*(tidu_a0/tidu_r); a1=a1-l*(tidu_a1/tidu_r);每次迭代显示得到的直线和mse,并修订学习率%显示直线 x2=-0.1,1.1; y2=x2.*a1+a0; plot(x2,y2,color,1-i/m,1-i/m,1-i/m); %显示错误 error=0; for j=1:n error=error+(y(j)-(a1*x(j)+a0)*(y(j)-(a1*x(j)+a0); end m
3、se=error/n; l=mse; mse三 matlab代码1 最小二乘法代码:%in是一个100行2列的矩阵,两列分别为x和y。用一条直线y=x*a+b拟合x和y的关系;%用最小二乘法计算a和b。x=in(1:100,1);y=in(1:100,2);sumx=0;sumy=0;sumxx=0;sumyy=0;sumxy=0;for i=1:1:100 sumx=sumx+x(i); sumy=sumy+y(i); sumxx=sumxx+x(i)*x(i); sumyy=sumyy+y(i)*y(i); sumxy=sumxy+x(i)*y(i);endplot(in(:,1),in(
4、:,2),r.); %用红色的点画出100个样本点hold on; %保留当前绘图,不被下次绘图遮盖n=100;b,a=solve(n*a0+a1*sumx=sumy,a0*sumx+a1*sumxx=sumxy,a0,a1); %解二元一次方程组,未知数为a0,a1,结果返回给b和a。a=eval(a); %eval(str),把str当做一条语句执行b=eval(b);x2=0,1; %知道解析式y=a*x+b,画直线的方法y2=x2.*a+b; % 因为x2是一个向量,所以用x2.表示plot(x2,y2); %制动化一条以x2为x,以y2为y的直线 mse=0;error=0;for
5、i=1:n error=error+(y(i)-(a*x(i)+b)*(y(i)-(a*x(i)+b);endmse=error/n;mse2 梯度下降法代码:x=in(1:100,1);y=in(1:100,2);sumx=0;sumy=0;sumxx=0;sumyy=0;sumxy=0;for i=1:1:100 sumx=sumx+x(i); sumy=sumy+y(i); sumxx=sumxx+x(i)*x(i); sumyy=sumyy+y(i)*y(i); sumxy=sumxy+x(i)*y(i);endplot(in(:,1),in(:,2),r.); hold on;a0=
6、2;a1=1;l=0.5;n=100;m=50;for i=0:1:m tidu_a0=n*a0+a1*sumx-sumy; tidu_a1=a1*sumxx+a0*sumx-sumxy; tidu_r=sqrt(tidu_a0*tidu_a0+tidu_a1*tidu_a1); a0=a0-l*(tidu_a0/tidu_r); a1=a1-l*(tidu_a1/tidu_r); x2=-0.1,1.1; y2=x2.*a1+a0; plot(x2,y2,color,1-i/m,1-i/m,1-i/m); error=0; for j=1:n error=error+(y(j)-(a1*x(
7、j)+a0)*(y(j)-(a1*x(j)+a0); end mse=error/n; l=mse; mseend四 运行结果1 最小二乘法结果:2梯度下降法结果五误差1 最小二乘法A1=3.679365985769617A0=-1.030876273676726均方误差mse=0.04292梯度下降法(起点为a0=2,a1=1;迭代次数为50次)A1=3.67860477725630A0=-1.00565713447357均方误差mse =0.0436六 附数据 in.txt0.9005 1.91130.4480 0.92180.2689 -0.46540.5538 1.46670.1788
8、 -0.23930.8597 1.70480.2320 -0.21350.1681 -0.25490.0267 -1.09280.3224 0.29850.5552 0.79310.8245 2.01720.8042 2.22730.0244 -0.88880.3715 0.56870.4919 0.77950.4661 0.53480.0417 -0.79690.6170 1.24030.5780 1.51130.2988 -0.11200.4357 0.57820.1366 -0.84070.2997 0.38070.7614 1.89590.0353 -0.63990.2695 -0.1
9、0720.9963 2.72330.4469 0.86040.1528 -0.54720.8862 2.33980.0314 -1.21900.1160 -0.68320.2509 -0.14950.7597 1.61760.8983 1.95520.2234 -0.16960.6733 1.48590.8188 2.10080.9489 2.65170.8743 2.00690.3937 0.45570.9370 2.44270.4369 0.80250.1625 -0.26760.3098 -0.06410.6811 1.10380.9341 2.24060.9474 2.65010.59
10、91 1.16170.9489 2.41700.4040 0.30190.0410 -1.02710.2938 0.12610.0319 -0.78420.8645 2.24680.4325 0.58290.0928 -0.47670.1378 -0.58010.2420 -0.16170.2230 -0.42450.8677 2.19760.7642 1.74470.3447 0.01780.3848 0.48110.5949 1.20160.5351 1.33880.3336 0.28380.8547 2.21270.2656 -0.10610.9339 2.18400.3898 0.15
11、150.6831 1.54170.2750 0.27060.0280 -0.87500.9406 2.61790.5340 0.82420.6712 1.49270.6075 1.14170.7509 1.56650.9813 2.72670.7277 1.58300.8573 1.47560.9918 3.00380.7595 1.69700.1460 -0.43690.3263 0.06280.0288 -0.91620.6946 1.46430.9588 2.48210.7290 1.55720.7368 1.45200.1746 -0.49950.3554 0.32020.5746 1.03380.4599 0.96780.8337 2.65070.8154 1.81280.3240 -0.02950.4617 0.4441