(1)說明:需要**房屋的**,除了房屋面積還有其他的特徵量,比如層數,年齡,臥室數目等等,如下圖。因為有多個特徵值,所以稱為多變數線性回歸。
(2)假設函式:單變數只有乙個特徵值,所以之前的假設函式將不再適用,下面是多變數的假設函式。其中x0設定為1
(3)特徵縮放:在所有特徵值中,size的範圍大概在0~2000,而臥室數目的範圍在0~5。如果多個引數之間範圍跨度相差太大,將導致梯度下降的速度很緩慢。下面是關於這兩個特徵值的等高線。如圖中左圖案,紅線表示梯度下降的大概路線,最理想的影象應該趨近於乙個圓,範圍跨度相差越大,圖形越扁,梯度下降越慢。所以要進行特徵縮放。特徵縮放的公式不僅有乙個,但目的都是將不同特徵值縮放到乙個相近的範圍。右圖是進行特徵縮放之後的等高線。他的縮放方式就是將每個特徵值除以該特徵值的範圍
下面是特徵縮放公式:u表示平均值,s表示該特徵值的範圍(max-min),s也可以替換為標準差。在根據特徵縮放之後的資料計算出公式之後,用該公式對資料進行**,資料不能直接適用,需要按照之前特徵縮放的方式就行下處理才可以進行**。或者根據特徵縮放的方式對引數就行化簡,之後資料可以直接拿來使用。就是下面的build函式
(4)代價函式:因為假設函式不同,代價函式變化如下圖:上面是代價函式,下面是求偏導之後。
(5)梯度下降**:
#(6)直接使用python函式庫coding=utf-8
import
numpy as np
np.set_printoptions(suppress=true)
#特徵縮放
defscale(arr):
param =
for i in range(0, arr.shape[1]):
col =arr[:,i]
mean =np.mean(col)
std =np.std(col)
param.insert(i, )
for j in
range(0, len(col)):
arr[j][i] = (col[j] - mean) /std
return
arr, param
#代價函式
defj():
global
p, x_data, y_data, m, a
deviation = np.dot(x_data, p).t -y_data
return (np.dot(deviation, x_data) / m *a)
#整理函式 demo:[(x1 - 10250) / 3269.17] * 13274.7755 + [(x2 - 69.5) / 14.22] * 10568.71 + 55438.25
defbuild(p, param):
f = 0 #
常數項for i in range(1, len(p)):
f -= param[i - 1]['
mean
'] / param[i - 1]['
std'] *p[i][0]
p[i] = format(p[i][0] / param[i - 1]['
std'], '
0.2f')
p[0] = format(f + p[0][0], '
0.2f')
return
px_data =np.array([
[6000, 58],
[9000, 77],
[11000, 89],
[15000, 54],
])y_data = np.array([[30000, 55010, 73542, 63201]])
x_data =x_data.astype(np.float)
x_data, param =scale(x_data)
#學習率
a = 0.1
#x新增一列全為1
m =len(x_data)
x_data =np.c_[np.ones(m), x_data]
p = np.ones([3, 1])
#梯度下降
step = 300
for i in range(1, step):
j =j()
p -=j.t
p = build(p, param)
#(7)正規方程:相比於梯度下降,正規方程是個更簡單的方法,直接套用公式就行。coding=utf-8
from sklearn.linear_model import
linearregression
x_data =[
[6000, 58],
[9000, 77],
[11000, 89],
[15000, 54]
]y_data =[
30000, 55010, 73542, 63201]
lr =linearregression()
lr.fit(x_data, y_data)
p = [round(lr.intercept_, 2), round(lr.coef_[0], 2), round(lr.coef_[1], 2)]
(8)正規方程與梯度下降的優缺點:①正規方程不需要設定學習率
②正規方程不需要反覆迭代
③梯度下降可以在特徵量很多的情況下還可以正常工作,但正規方程不可以。大致邊界在10000個特徵量。
(9)正規方程**:
#(10)多元多變數線性回歸:比如**乙個房屋的**,有兩個特徵量為房屋的長和寬。如果假設函式選為y=p0 + p1*x1 + p2*x2就不是很合適。正確的假設函式應為y=p0 + p1 * x1 * x2,實現方式是和特徵縮放一樣的,根據一定的規則講原資料集處理下就好了,然後和多變數線性回歸是一樣的。根據場景不同也可以將x1的2次方或3次方當做新的特徵量,或者x1的平方*x2的3次方等等。。。。花式搭配。coding=utf-8
import
numpy as np
np.set_printoptions(suppress=true)
x_data =np.array([
[6000, 58],
[9000, 77],
[11000, 89],
[15000, 54],
])y_data = np.array([[30000, 55010, 73542, 63201]])
m =len(x_data)
x_data =np.c_[np.ones(m), x_data]
x_data =x_data.astype(np.float)
#p =np.linalg.pinv(np.dot(x_data.t, x_data))
p =np.dot(p, x_data.t)
p = np.dot(p, y_data.t)
機器學習 多變數線性回歸
注 本系列部落格是博主學習stanford大學 andrew ng 教授的 機器學習 課程筆記。博主深感學過課程後,不進行總結非常easy遺忘,依據課程加上自己對不明確問題的補充遂有此系列部落格。本系列部落格包含線性回歸 邏輯回歸 神經網路 機器學習的應用和系統設計 支援向量機 聚類 將維 異常檢測...
機器學習(三) 多變數線性回歸
目錄 一 前言 二 模型描述 1.hypothesis 2.cost function 三 多元梯度下降法 1.特徵放縮 2.學習率 的選擇 四 特徵與多項式回歸 五 正規方程 區別於梯度下降法 六 梯度下降法與正規方程法的比較 在所有公式中,n為特徵個數,m為樣本數量 與前面單變數線性回歸類似,只...
Python學習(機器學習 多變數線性回歸)
通過scale feature利用梯度下降法求theta 直接代入推導出來的theta公式 通過驗算測試引數,可以得知兩個方法 結果相同 part1 load data print loading data.n f open c python27 machinelearning ex1data2.t...