機器學習小白修煉之路 多項式回歸 回歸問題

2021-10-01 02:03:48 字數 3149 閱讀 6152

引用自史丹福大學吳老師機器學習課程中講解的例子。估計房價的時候,倘若有房子的長度(length)和寬度(width)兩個特徵,即占地面積的寬度和占地面積的長度,我們完全可以把這兩個特徵乘起來生成乙個新的特徵即占地面積(area)。

area = length x width那麼就可以只用area這乙個變數作為模型的特徵。

通過選擇合適的特徵構建簡單多項式作為假設函式hθ(a) = θ0 + θ1xa。a即面積area。

假如有部分住房**資料集點是以下點:

為了擬合資料,會有多種解決問題的模型。顯然線性的函式是擬合不出這樣的效果,它只能擬合線性區分度高的資料集。

可以選用二次函式模型(用於房價**不合理),但是二次函式影象的都知道,開口朝下,頂點是最高的,之後便會下來,這明顯和我們現實生活中的房價背道而馳(房價不會高到一定程度後下降趴)。

因此我們會轉而使用另一種模型,比如三次函式模型使用多元線性回歸的方法,可以將我們的模型進行簡單的修改。

這裡根據資料分布特徵,我們使用三次函式。即下面**的假設函式形式為hθ(x) = θ0 +θ1xx1 +θ2xx2 +θ3xx3,自定義 θ0、θ1、和θ2。

特徵值乘方之後值會很大,因此要一定要特徵縮放!!!

上述文字和基本都是課程裡面所講述的。

梯度下降函式和計算損失值函式的m檔案就是上個部落格寫的,不再贅述。

自己生成滿足正態分佈的乙個列向量,之後計算出適合多項式回歸演算法的y值。為了避免重,每個值再加上隨機雜訊(資料集沒找到,所以自己生成了)。下面是多項式回歸演算法實現的m檔案:

function =

polynomial_regression()

x=randn

(100,1

);%隨機生成乙個滿足正態分佈的100

*1的列向量

y=0.5*x+x.^2

+randn

(100,1

);%加上隨機雜訊

plot

(x,y,

'ko');

x=[ones

(100,1

),x]

; d_x=

sort

(x);

l_x=d_x;

i=1;

j=2;

while i<=1,

%i表示往矩陣第二列後面加的列數

x(:,i+2)=

x(:,i+1)

.*x(

:,2)

;%後面的每一列都乘上第一列的數

i=i+1;

end;

while j<=3,

x(:,j)=(

x(:,j)

-mean(x

(:,j))).

/std(x

(:,j))

;%因為特徵值乘方之後值會很大,因此要特徵縮放

j=j+1;

end;

theta=[0

00];

theta_new=

gradient_decline

(x,y,theta)

;%因為是隨機種子生成的特徵矩陣,所以每次loss達到的最低值都會不一樣

hold on;

d_y=

theta_new(1

)+theta_new(2

)*d_x+

theta_new(3

)*d_x.

*d_x;

l_y=

theta_new(1

)+theta_new(2

)*d_x+

theta_new(3

)*d_x;

plot

(d_x,d_y)

;title

('fitted curve');

legend

('data point'

,'polynomial regression');

end

結果:

損失函式(因為是隨機種子,所以每次執行得到的最低loss值都會不一樣,迭代次數也會變化):

matlab最後一條豎線暫時不知道那裡出來的,知道的大佬告訴我一聲哈。

指令碼**:

d_x=

sort

(x);

l_x=d_x;

d_y=

theta_new(1

)+theta_new(2

)*d_x+

theta_new(3

)*d_x.

*d_x;

l_y=

theta_new(1

)+theta_new(2

)*d_x+

theta_new(3

)*d_x;

plot

(d_x,d_y)

;plot

(l_x,l_y)

;title

('fitted curve');

legend

('data point'

,'polynomial regression'

,'line regression'

);

結果:

結論:較準確,快速!希望大家多多支援、推廣,感謝大家!!!

機器學習筆記 多項式回歸

比如你的資料分布,是符合y 0.5 x 2 x 2的.那你用y ax b去擬合,無論如何都沒法取的很好的效果.通過上面的分析,我們可以看出,我們想做的事情是對樣本做公升維 即增加樣本的特徵數目 sklean中完成這一功能的類叫做polynomialfeatures.classsklearn.prep...

python 機器學習多項式回歸

現實世界的曲線關係都是通過增加多項式實現的,現在解決多項式回歸問題 住房 樣本 樣本影象 import matplotlib.font manager as fm import matplotlib.pyplot as plt myfont fm.fontproperties fname c win...

多項式回歸

import numpy as np import matplotlib.pyplot as plt x np.random.uniform 3,3,size 100 x x.reshape 1,1 y 0.5 x 2 x 2 np.random.normal 0,1,100 plt.scatter...