過擬合實驗
clear; clc; N = 10;%產生數據點的個數 M = 10;%擬合多項式的最高次數 %繪制隨機產生的點,目標f是sin(2_pi_x),產生的點要加上高斯噪聲 x = rand(10, 1);%產生10個服從(0,1)均勻分布的點 是一個列向量 這10個產生的點服從U(0,1) noise_sigma = 0.08;%噪聲方差noise_sigma ^ 2 y = sin(2*pi*x)+randn(10,1)*noise_sigma;%randn產生服從N(0,1)的數據點 figure(1); axis([0 1 -2 2]);%橫坐標[0,1],縱坐標[-2,2] plot(x,y,'b.'); %繪制[0,1]上的f(x) = sin(2_pi_x) x_r = (0:0.01:1); y_r = sin(2*pi*x_r); hold on; plot(x_r,y_r,'b'); %p_x 第i個元素表示x.^i p_x = []; for m=0:M p_x = [p_x, x.^m];%連接p_x與x.^m end %將p_x轉置,這樣i行表示x'的i次冪 p_x = p_x';%10x10 p_x %線性回歸w的參數估計 w = pinv(p_x*p_x')*p_x*y;%10x1 figure(1) hold on x_cur = [0:0.01:1] y_cur = zeros(size(x_cur)) %注意w的下標從1開始 for m=0:M y_cur = y_cur + w(m+1)*(x_cur.^m); end axis([0,1,-2,2]) plot(x_cur,y_cur,'r')
反復執行,觀察產生的函數圖形分布,以及擬合的效果發現
當M很大的時候,擬合的很好但是,函數方差很大,直接亂飄
當M很小的時候,擬合不一定很精準,但是函數分布基本比較集中
也就是說,當模型復雜時候,函數方差很大,但是在訓練集上函數偏差很小
當模型簡單時候,函數方差小,但是在訓練集合上偏差大

浙公網安備 33010602011771號