機器學習 多變數線性回歸

2022-07-31 03:24:09 字數 3923 閱讀 9038

(1)說明:需要**房屋的**,除了房屋面積還有其他的特徵量,比如層數,年齡,臥室數目等等,如下圖。因為有多個特徵值,所以稱為多變數線性回歸。

(2)假設函式:單變數只有乙個特徵值,所以之前的假設函式將不再適用,下面是多變數的假設函式。其中x0設定為1

(3)特徵縮放:在所有特徵值中,size的範圍大概在0~2000,而臥室數目的範圍在0~5。如果多個引數之間範圍跨度相差太大,將導致梯度下降的速度很緩慢。下面是關於這兩個特徵值的等高線。如圖中左圖案,紅線表示梯度下降的大概路線,最理想的影象應該趨近於乙個圓,範圍跨度相差越大,圖形越扁,梯度下降越慢。所以要進行特徵縮放。特徵縮放的公式不僅有乙個,但目的都是將不同特徵值縮放到乙個相近的範圍。右圖是進行特徵縮放之後的等高線。他的縮放方式就是將每個特徵值除以該特徵值的範圍

下面是特徵縮放公式:u表示平均值,s表示該特徵值的範圍(max-min),s也可以替換為標準差。在根據特徵縮放之後的資料計算出公式之後,用該公式對資料進行**,資料不能直接適用,需要按照之前特徵縮放的方式就行下處理才可以進行**。或者根據特徵縮放的方式對引數就行化簡,之後資料可以直接拿來使用。就是下面的build函式

(4)代價函式:因為假設函式不同,代價函式變化如下圖:上面是代價函式,下面是求偏導之後。

(5)梯度下降**:

#

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)

(6)直接使用python函式庫

#

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)]

(7)正規方程:相比於梯度下降,正規方程是個更簡單的方法,直接套用公式就行。

(8)正規方程與梯度下降的優缺點:①正規方程不需要設定學習率

②正規方程不需要反覆迭代

③梯度下降可以在特徵量很多的情況下還可以正常工作,但正規方程不可以。大致邊界在10000個特徵量。

(9)正規方程**:

#

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)

(10)多元多變數線性回歸:比如**乙個房屋的**,有兩個特徵量為房屋的長和寬。如果假設函式選為y=p0 + p1*x1 + p2*x2就不是很合適。正確的假設函式應為y=p0 + p1 * x1 * x2,實現方式是和特徵縮放一樣的,根據一定的規則講原資料集處理下就好了,然後和多變數線性回歸是一樣的。根據場景不同也可以將x1的2次方或3次方當做新的特徵量,或者x1的平方*x2的3次方等等。。。。花式搭配。

機器學習 多變數線性回歸

注 本系列部落格是博主學習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...