本文共 960 字,大约阅读时间需要 3 分钟。
close all,clear,clc%load datax = load('ex5Linx.dat');y = load('ex5Liny.dat');%plot raw dataplot(x,y,'o','MarkerEdgeColor','b','MarkerFaceColor','r');m = length(y);x=[ones(m,1),x,x.^2,x.^3,x.^4,x.^5]lambda=[0,1,10];d=eye(6);d(1,1)=0;theta=zeros(size(x,2),size(lambda,2));H=[];plotstyle = {'b', 'r', 'g'}xrange=linspace(min(x(:,2)),max(x(:,2)))';xtest=[ones(size(xrange)),xrange,xrange.^2,xrange.^3,xrange.^4,xrange.^5];%normal equation的求解for i=1:3 theta(:,i) =(x'*x+lambda(i)*d)^(-1)*x'*y J(i)=1/(2*m)*(x*theta(:,i)-y)'*(x*theta(:,i)-y)+lambda(i)*(theta(:,i)'*theta(:,i)) H= [H xtest*theta(:,i)]; hold on %plot(x(:,2),H(:,i),char(plotstyle(i)),'LineWidth',2) plot(xrange,H(:,i),char(plotstyle(i)))endlegend('training data','\lambda=0','\lambda=1','\lambda=10')%注意转义字符的使用方法;xlabel('x')ylabel('y')
运行结果:
图1 通过正规化拟合出来的3条直线,对应不同lambda的值
图2 在不同的lambda下,得到的theta的不同值,以及代价函数的不同值(lambda=0,1,10)
当lambda=0,1,3,5,7,9的时候, 结果如下:
图3 在lambda为不同值得时候的拟合曲线