摘要:在大量對(duì)象上應(yīng)用了回歸分析甚至包括人的身高。孩子的高度向著平均高度回退回歸。回歸的目的是預(yù)測(cè)數(shù)值型的目標(biāo)值。這就是監(jiān)督學(xué)習(xí)算法的一個(gè)例子。
@toc
1 預(yù)測(cè)數(shù)值型數(shù)據(jù):回歸 1.1 什么是回歸?大自然讓我們回歸到一定的區(qū)間范圍之內(nèi);反過(guò)來(lái)說(shuō)就是,有一個(gè)平均的水平,可以讓突出的事物能向他靠攏。
回歸是由達(dá)爾文(Charles Darwin)的表兄弟Francis Galton發(fā)明的。 Galton于1877年完成了第一次回歸預(yù)測(cè),目的是根據(jù)上一代豌豆種子(雙親)的尺寸來(lái)預(yù)測(cè)下一代豌豆種子(孩子)的尺寸。Galton在大量對(duì)象上應(yīng)用了回歸分析,甚至包括人的身高。他注意到,如果雙親的高度比平均高度高,他們的子女也傾向于比平均高度高,但尚不及雙親。孩子的高度向著平均高度回退(回歸)。Galton在多項(xiàng)研究上都注意到這個(gè)現(xiàn)象,所以盡管這個(gè)英文單詞跟數(shù)值預(yù)測(cè)沒(méi)有任何關(guān)系,但這種研究方法仍被稱作回歸 2 。
那些高個(gè)子的后代的身高,有種回歸到大眾身高的趨勢(shì)。 eg: 姚明身高2米26,葉莉身高1米90, 但是他們后代的身高是會(huì)逐漸回歸到正常的身高水平。
1.2 回歸的目的是預(yù)測(cè)數(shù)值型的目標(biāo)值。 1.3 回歸可以做什么事?回歸可以做任何事情。然而大多數(shù)公司常常使用回歸法做一些比較沉悶的事情,例如:
銷售量預(yù)測(cè)
制造缺陷預(yù)測(cè)。
當(dāng)然也可以做有新意的應(yīng)用,例如:
預(yù)測(cè)名人的離婚率。
預(yù)測(cè)所在地區(qū)的房?jī)r(jià)。
2 線性回歸模型表示 2.1 線性回歸的基本概念回歸,一般都是指線性回歸(linear regression).
從我們最熟悉的開始, 已知兩點(diǎn),求直線公式設(shè) y = ax+b, 帶入兩點(diǎn),求得解析解為 y = 3x-60
回歸方程 (regression equation): y = 3x-60
回歸系數(shù) (regression weights): 3和-60可以稱為回歸系數(shù)
回歸: 求這些回歸系數(shù)的過(guò)程
2.2 西安高新區(qū)房?jī)r(jià)預(yù)測(cè)這個(gè)例子是預(yù)測(cè)住房?jī)r(jià)格的,我們要使用一個(gè)數(shù)據(jù)集,數(shù)據(jù)集包含西安市的住房?jī)r(jià)格。在這里,我要根據(jù)不同房屋尺寸所售出的價(jià)格,畫出我的數(shù)據(jù)集。比方說(shuō),如果你朋友的房子是40平方米大小,你要告訴他們這房子能賣多少錢。那么,你可以做的一件事就是構(gòu)建一個(gè)模型,也許是條直線,從這個(gè)數(shù)據(jù)模型上來(lái)看,也許你可以告訴你的朋友,他能以大約78萬(wàn)(人民幣)左右的價(jià)格賣掉這個(gè)房子。這就是監(jiān)督學(xué)習(xí)算法的一個(gè)例子。
m:表示訓(xùn)練集數(shù)據(jù)的總量 x:表示輸入變量 y:表示輸出變量 (x,y): 表示一個(gè)訓(xùn)練樣本 (x(i),y(i)): 表示第i個(gè)訓(xùn)練樣本3 回歸的一般方法 3.1 線性回歸的一般步驟
對(duì)于一元線性回歸(單變量線性回歸)來(lái)說(shuō),學(xué)習(xí)算法為 y = ax + b
我們換一種寫法: hθ(x) = θ0 + θ1x1
實(shí)現(xiàn)步驟
1). 模擬數(shù)據(jù)
2). 調(diào)用sklearn擬合數(shù)據(jù), 把theta0 theta1求出來(lái)
3). 預(yù)測(cè)
from sklearn.linear_model import LinearRegression import numpy as np # 1).模擬數(shù)據(jù) X = np.random.rand(100, 1) Y = 4 + 2 * X + np.random.randn(100, 1) # 2). 調(diào)用sklearn擬合數(shù)據(jù), 把theta0 theta1求出來(lái) # 導(dǎo)入線性回歸類 lin_reg = LinearRegression() # 讓線性回歸類做訓(xùn)練 lin_reg.fit(X, Y) # 輸出theta0 theta1; intercept_是截距, coef_是斜率系數(shù); print(" theat0, theta1:", lin_reg.intercept_, lin_reg.coef_) # 3). 預(yù)測(cè) X_new = np.array([[0], [1]]) print(" x=0, x=1預(yù)測(cè)結(jié)果: ", lin_reg.predict(X_new))
測(cè)試結(jié)果:
3 損失/代價(jià)函數(shù) 3.1 擬合線性回歸實(shí)際上要做的事情就是: 選擇合適的參數(shù)(θ0, θ1),使得hθ(x)方程,很好的擬合訓(xùn)練集。實(shí)現(xiàn)如何把最有可能的直線與我們的數(shù)據(jù)相擬合。
擬合就是把平面上一系列的點(diǎn),用一條光滑的曲線連接起來(lái)。因?yàn)檫@條曲線有無(wú)數(shù)種可能,從而有各種擬合方法。擬合的曲線一般可以用函數(shù)表示.
下面的三張圖, 展示了擬合的三種狀態(tài):
圖一是部分?jǐn)M合
圖二是完全不擬合
圖三是完全擬合
3.2 損失函數(shù): 均方誤差MSE擬合過(guò)程中因?yàn)閠heta0和theta1的取值準(zhǔn)確度, 預(yù)測(cè)的結(jié)果與訓(xùn)練集中的實(shí)際值有差距。
我們選擇的參數(shù)決定了我們得到的直線相對(duì)于我們的訓(xùn)練集的準(zhǔn)確程度,模型所預(yù)測(cè)的值與訓(xùn)練集中實(shí)際值之間的差距(下圖中藍(lán)線所指)就是建模誤差(modeling error)。
我們的目標(biāo)便是選擇出可以使得建模誤差的平方和能夠最小的模型參數(shù)。 即使得損函數(shù)最小。
3.3 均方誤差MSE最小化二維空間求均方差
上圖是參考吳恩達(dá)視頻的圖片, 我們會(huì)發(fā)現(xiàn)隨著theta1的不斷變化, 均方誤差MSE會(huì)找到一個(gè)最小值。 如果從數(shù)學(xué)角度來(lái)看, 就是求解函數(shù)的導(dǎo)數(shù),計(jì)算函數(shù)的最小值。
三維空間求均方差
上圖是參考吳恩達(dá)視頻的圖片, 我們會(huì)發(fā)現(xiàn)隨著theta0和theta1的不斷變化, 均方誤差MSE會(huì)找到一個(gè)最小值。為了通過(guò)圖形化看到最小的均方差, 三維圖片并不直觀。 通常使用等高線實(shí)現(xiàn)。如下圖:
更高維空間
我們會(huì)遇到更復(fù)雜、更高維度、更多參數(shù)的情況,而這些情況是很難畫出圖的,因此更無(wú)法將其可視化,因此我們真正需要的是編寫程序來(lái)找出這些最小化代價(jià)函數(shù)的和的值,而梯度下降算法就是能夠自動(dòng)地找出能使代價(jià)函數(shù)最小化的參數(shù)和的值。
4 梯度下降 4.1 梯度下降的思想梯度下降是一個(gè)用來(lái)求函數(shù)最小值的算法,我們將使用梯度下降算法來(lái)求出代價(jià)函數(shù)的最小值。
梯度下降背后的思想是:開始時(shí)我們隨機(jī)選擇一個(gè)參數(shù)的組合,計(jì)算代價(jià)函數(shù),然后我們尋找下一個(gè)能讓代價(jià)函數(shù)值下降最多的參數(shù)組合。我們持續(xù)這么做直到到到一個(gè)局部最小值(local minimum),因?yàn)槲覀儾](méi)有嘗試完所有的參數(shù)組合,所以不能確定我們得到的局部最小值是否便是全局最小值(global minimum),選擇不同的初始參數(shù)組合,可能會(huì)找到不同的局部最小值。
4.2 梯度下降的分類想象一下你正站立在山的這一點(diǎn)上,站立在你想象的公園這座紅色山上,在梯度下降算法中,我們要做的就是旋轉(zhuǎn)360度,看看我們的周圍,并問(wèn)自己要在某個(gè)方向上,用小碎步盡快下山。這些小碎步需要朝什么方向?如果我們站在山坡上的這一點(diǎn),你看一下周圍,你會(huì)發(fā)現(xiàn)最佳的下山方向,你再看看周圍,然后再一次想想,我應(yīng)該從什么方向邁著小碎步下山?然后你按照自己的判斷又邁出一步,重復(fù)上面的步驟,從這個(gè)新的點(diǎn),你環(huán)顧四周,并決定從什么方向?qū)?huì)最快下山,然后又邁進(jìn)了一小步,并依此類推,直到你接近局部最低點(diǎn)的位置。
公式:
理解
a是學(xué)習(xí)率(learning rate),它決定了我們沿著能讓代價(jià)函數(shù)下降程度最大的方向向下邁出的步子有多大;
如果α太小的話,梯度下降會(huì)很慢
如果α太大的話,梯度下降越過(guò)最小值,不僅不會(huì)收斂,而且有可能發(fā)散
不論斜率正或負(fù),梯度下降都會(huì)逐漸趨向最小值
即使學(xué)習(xí)率α是固定不變的,梯度下降也會(huì)收斂到一個(gè)最低點(diǎn)
梯度下降的兩種更新方式:
4.2.1 “Batch” Gradient Descent 批梯度下降批梯度下降:指的是每下降一步,使用所有的訓(xùn)練集來(lái)計(jì)算梯度值
在梯度下降中,在計(jì)算微分求導(dǎo)項(xiàng)時(shí),我們需要進(jìn)行求和運(yùn)算,所以,在每一個(gè)多帶帶的梯度下降中,我們最終都要計(jì)算這樣一個(gè)東西,這個(gè)項(xiàng)需要對(duì)所有個(gè)訓(xùn)練樣本求和。因此,批量梯度下降法這個(gè)名字說(shuō)明了我們需要考慮所有這一"批"訓(xùn)練樣本,
代碼實(shí)現(xiàn)
""" 線性回歸實(shí)現(xiàn)梯度下降的批處理(batch_gradient_descent ) """ import numpy as np X = 2 * np.random.rand(100, 1) y = 4 + 3 * X + np.random.randn(100, 1) X_b = np.c_[np.ones((100, 1)), X] # print(X_b) learning_rate = 0.1 # 通常在做機(jī)器學(xué)習(xí)的時(shí)候,一般不會(huì)等到他收斂,因?yàn)樘速M(fèi)時(shí)間,所以會(huì)設(shè)置一個(gè)收斂次數(shù) n_iterations = 100000 m = 100 # 1.初始化theta, w0...wn theta = np.random.randn(2, 1) count = 0 # 4. 不會(huì)設(shè)置閾值,之間設(shè)置超參數(shù),迭代次數(shù),迭代次數(shù)到了,我們就認(rèn)為收斂了 for iteration in range(n_iterations): count += 1 # 2. 接著求梯度gradient gradients = 1/m * X_b.T.dot(X_b.dot(theta)-y) # 3. 應(yīng)用公式調(diào)整theta值, theta_t + 1 = theta_t - grad * learning_rate theta = theta - learning_rate * gradients print(count) print(theta)
執(zhí)行結(jié)果
4.2.2 “Stochastic” Gradient Descent 隨機(jī)梯度下降隨機(jī)梯度下降:指的是每下降一步,使用一條訓(xùn)練集來(lái)計(jì)算梯度值
4.2.3 “Mini-Batch” Gradient Descent “Mini-Batch”梯度下降“Mini-Batch”梯度下降:指的是每下降一步,使用一部分的訓(xùn)練集來(lái)計(jì)算梯度值
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/43597.html
摘要:在大量對(duì)象上應(yīng)用了回歸分析甚至包括人的身高。孩子的高度向著平均高度回退回歸。回歸的目的是預(yù)測(cè)數(shù)值型的目標(biāo)值。這就是監(jiān)督學(xué)習(xí)算法的一個(gè)例子。 @toc 1 預(yù)測(cè)數(shù)值型數(shù)據(jù):回歸 1.1 什么是回歸? 大自然讓我們回歸到一定的區(qū)間范圍之內(nèi);反過(guò)來(lái)說(shuō)就是,有一個(gè)平均的水平,可以讓突出的事物能向他靠攏。 回歸是由達(dá)爾文(Charles Darwin)的表兄弟Francis Galton發(fā)明的...
摘要:機(jī)器學(xué)習(xí)線性回歸原理介紹機(jī)器學(xué)習(xí)線性回歸實(shí)現(xiàn)機(jī)器學(xué)習(xí)線性回歸實(shí)現(xiàn)這里使用實(shí)現(xiàn)線性回歸,沒(méi)有使用等機(jī)器學(xué)習(xí)框架,目的是幫助理解算法的原理。單變量和雙變量的使用的自己模擬的一個(gè)簡(jiǎn)單的房?jī)r(jià)數(shù)據(jù)集,多變量的使用的房?jī)r(jià)數(shù)據(jù)集。 【機(jī)器學(xué)習(xí)】線性回歸原理介紹 【機(jī)器學(xué)習(xí)】線性回歸python實(shí)現(xiàn) 【機(jī)器學(xué)習(xí)】線性回歸sklearn實(shí)現(xiàn) 這里使用python實(shí)現(xiàn)線性回歸,沒(méi)有使用sklearn等...
閱讀 598·2021-11-15 11:38
閱讀 1181·2021-10-11 10:59
閱讀 3495·2021-09-07 09:58
閱讀 485·2019-08-30 15:44
閱讀 3525·2019-08-28 18:14
閱讀 2604·2019-08-26 13:32
閱讀 3517·2019-08-26 12:23
閱讀 2418·2019-08-26 10:59