国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

機器學(xué)習(xí)(三)-單變量線性回歸算法

CoderDock / 1092人閱讀

摘要:在大量對象上應(yīng)用了回歸分析甚至包括人的身高。孩子的高度向著平均高度回退回歸。回歸的目的是預(yù)測數(shù)值型的目標(biāo)值。這就是監(jiān)督學(xué)習(xí)算法的一個例子。

@toc

1 預(yù)測數(shù)值型數(shù)據(jù):回歸 1.1 什么是回歸?

大自然讓我們回歸到一定的區(qū)間范圍之內(nèi);反過來說就是,有一個平均的水平,可以讓突出的事物能向他靠攏。

回歸是由達爾文(Charles Darwin)的表兄弟Francis Galton發(fā)明的。 Galton于1877年完成了第一次回歸預(yù)測,目的是根據(jù)上一代豌豆種子(雙親)的尺寸來預(yù)測下一代豌豆種子(孩子)的尺寸。Galton在大量對象上應(yīng)用了回歸分析,甚至包括人的身高。他注意到,如果雙親的高度比平均高度高,他們的子女也傾向于比平均高度高,但尚不及雙親。孩子的高度向著平均高度回退(回歸)。Galton在多項研究上都注意到這個現(xiàn)象,所以盡管這個英文單詞跟數(shù)值預(yù)測沒有任何關(guān)系,但這種研究方法仍被稱作回歸 2 。

那些高個子的后代的身高,有種回歸到大眾身高的趨勢。 eg: 姚明身高2米26,葉莉身高1米90, 但是他們后代的身高是會逐漸回歸到正常的身高水平。

1.2 回歸的目的是預(yù)測數(shù)值型的目標(biāo)值。 1.3 回歸可以做什么事?

回歸可以做任何事情。然而大多數(shù)公司常常使用回歸法做一些比較沉悶的事情,例如:

銷售量預(yù)測

制造缺陷預(yù)測。

當(dāng)然也可以做有新意的應(yīng)用,例如:

預(yù)測名人的離婚率。

預(yù)測所在地區(qū)的房價。

2 線性回歸模型表示 2.1 線性回歸的基本概念

回歸,一般都是指線性回歸(linear regression).

從我們最熟悉的開始, 已知兩點,求直線公式設(shè) y = ax+b, 帶入兩點,求得解析解為 y = 3x-60

回歸方程 (regression equation): y = 3x-60

回歸系數(shù) (regression weights): 3和-60可以稱為回歸系數(shù)

回歸: 求這些回歸系數(shù)的過程

2.2 西安高新區(qū)房價預(yù)測

這個例子是預(yù)測住房價格的,我們要使用一個數(shù)據(jù)集,數(shù)據(jù)集包含西安市的住房價格。在這里,我要根據(jù)不同房屋尺寸所售出的價格,畫出我的數(shù)據(jù)集。比方說,如果你朋友的房子是40平方米大小,你要告訴他們這房子能賣多少錢。那么,你可以做的一件事就是構(gòu)建一個模型,也許是條直線,從這個數(shù)據(jù)模型上來看,也許你可以告訴你的朋友,他能以大約78萬(人民幣)左右的價格賣掉這個房子。這就是監(jiān)督學(xué)習(xí)算法的一個例子。

    m:表示訓(xùn)練集數(shù)據(jù)的總量
    x:表示輸入變量
    y:表示輸出變量
    (x,y): 表示一個訓(xùn)練樣本
    (x(i),y(i)): 表示第i個訓(xùn)練樣本

3 回歸的一般方法 3.1 線性回歸的一般步驟


對于一元線性回歸(單變量線性回歸)來說,學(xué)習(xí)算法為 y = ax + b
我們換一種寫法: hθ(x) = θ0 + θ1x1

3.2 利用Sklearn做線性回歸的預(yù)測

實現(xiàn)步驟
1). 模擬數(shù)據(jù)
2). 調(diào)用sklearn擬合數(shù)據(jù), 把theta0 theta1求出來
3). 預(yù)測

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求出來
# 導(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ù)測
X_new = np.array([[0], [1]])
print("
x=0, x=1預(yù)測結(jié)果:
", lin_reg.predict(X_new))

測試結(jié)果:

3 損失/代價函數(shù) 3.1 擬合

線性回歸實際上要做的事情就是: 選擇合適的參數(shù)(θ0, θ1),使得hθ(x)方程,很好的擬合訓(xùn)練集。實現(xiàn)如何把最有可能的直線與我們的數(shù)據(jù)相擬合。

擬合就是把平面上一系列的點,用一條光滑的曲線連接起來。因為這條曲線有無數(shù)種可能,從而有各種擬合方法。擬合的曲線一般可以用函數(shù)表示.

下面的三張圖, 展示了擬合的三種狀態(tài):

圖一是部分擬合

圖二是完全不擬合

圖三是完全擬合

3.2 損失函數(shù): 均方誤差MSE

擬合過程中因為theta0和theta1的取值準(zhǔn)確度, 預(yù)測的結(jié)果與訓(xùn)練集中的實際值有差距。

我們選擇的參數(shù)決定了我們得到的直線相對于我們的訓(xùn)練集的準(zhǔn)確程度,模型所預(yù)測的值與訓(xùn)練集中實際值之間的差距(下圖中藍線所指)就是建模誤差(modeling error)。

我們的目標(biāo)便是選擇出可以使得建模誤差的平方和能夠最小的模型參數(shù)。 即使得損函數(shù)最小。

3.3 均方誤差MSE最小化

二維空間求均方差


上圖是參考吳恩達視頻的圖片, 我們會發(fā)現(xiàn)隨著theta1的不斷變化, 均方誤差MSE會找到一個最小值。 如果從數(shù)學(xué)角度來看, 就是求解函數(shù)的導(dǎo)數(shù),計算函數(shù)的最小值。

三維空間求均方差

上圖是參考吳恩達視頻的圖片, 我們會發(fā)現(xiàn)隨著theta0和theta1的不斷變化, 均方誤差MSE會找到一個最小值。為了通過圖形化看到最小的均方差, 三維圖片并不直觀。 通常使用等高線實現(xiàn)。如下圖:

更高維空間

我們會遇到更復(fù)雜、更高維度、更多參數(shù)的情況,而這些情況是很難畫出圖的,因此更無法將其可視化,因此我們真正需要的是編寫程序來找出這些最小化代價函數(shù)的和的值,而梯度下降算法就是能夠自動地找出能使代價函數(shù)最小化的參數(shù)和的值。

4 梯度下降 4.1 梯度下降的思想

梯度下降是一個用來求函數(shù)最小值的算法,我們將使用梯度下降算法來求出代價函數(shù)的最小值。

梯度下降背后的思想是:開始時我們隨機選擇一個參數(shù)的組合,計算代價函數(shù),然后我們尋找下一個能讓代價函數(shù)值下降最多的參數(shù)組合。我們持續(xù)這么做直到到到一個局部最小值(local minimum),因為我們并沒有嘗試完所有的參數(shù)組合,所以不能確定我們得到的局部最小值是否便是全局最小值(global minimum),選擇不同的初始參數(shù)組合,可能會找到不同的局部最小值。

4.2 梯度下降的分類

想象一下你正站立在山的這一點上,站立在你想象的公園這座紅色山上,在梯度下降算法中,我們要做的就是旋轉(zhuǎn)360度,看看我們的周圍,并問自己要在某個方向上,用小碎步盡快下山。這些小碎步需要朝什么方向?如果我們站在山坡上的這一點,你看一下周圍,你會發(fā)現(xiàn)最佳的下山方向,你再看看周圍,然后再一次想想,我應(yīng)該從什么方向邁著小碎步下山?然后你按照自己的判斷又邁出一步,重復(fù)上面的步驟,從這個新的點,你環(huán)顧四周,并決定從什么方向?qū)羁煜律剑缓笥诌~進了一小步,并依此類推,直到你接近局部最低點的位置。

公式:

理解

a是學(xué)習(xí)率(learning rate),它決定了我們沿著能讓代價函數(shù)下降程度最大的方向向下邁出的步子有多大;

如果α太小的話,梯度下降會很慢

如果α太大的話,梯度下降越過最小值,不僅不會收斂,而且有可能發(fā)散

不論斜率正或負,梯度下降都會逐漸趨向最小值

即使學(xué)習(xí)率α是固定不變的,梯度下降也會收斂到一個最低點

梯度下降的兩種更新方式:

4.2.1 “Batch” Gradient Descent 批梯度下降

批梯度下降:指的是每下降一步,使用所有的訓(xùn)練集來計算梯度值

在梯度下降中,在計算微分求導(dǎo)項時,我們需要進行求和運算,所以,在每一個多帶帶的梯度下降中,我們最終都要計算這樣一個東西,這個項需要對所有個訓(xùn)練樣本求和。因此,批量梯度下降法這個名字說明了我們需要考慮所有這一"批"訓(xùn)練樣本,

代碼實現(xiàn)

"""
線性回歸實現(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
# 通常在做機器學(xué)習(xí)的時候,一般不會等到他收斂,因為太浪費時間,所以會設(shè)置一個收斂次數(shù)
n_iterations = 100000
m = 100

# 1.初始化theta, w0...wn
theta = np.random.randn(2, 1)
count = 0

# 4. 不會設(shè)置閾值,之間設(shè)置超參數(shù),迭代次數(shù),迭代次數(shù)到了,我們就認為收斂了
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 隨機梯度下降

隨機梯度下降:指的是每下降一步,使用一條訓(xùn)練集來計算梯度值

4.2.3 “Mini-Batch” Gradient Descent “Mini-Batch”梯度下降

“Mini-Batch”梯度下降:指的是每下降一步,使用一部分的訓(xùn)練集來計算梯度值

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/43597.html

相關(guān)文章

  • 機器學(xué)習(xí)()-變量線性回歸算法

    摘要:在大量對象上應(yīng)用了回歸分析甚至包括人的身高。孩子的高度向著平均高度回退回歸。回歸的目的是預(yù)測數(shù)值型的目標(biāo)值。這就是監(jiān)督學(xué)習(xí)算法的一個例子。 @toc 1 預(yù)測數(shù)值型數(shù)據(jù):回歸 1.1 什么是回歸? 大自然讓我們回歸到一定的區(qū)間范圍之內(nèi);反過來說就是,有一個平均的水平,可以讓突出的事物能向他靠攏。 回歸是由達爾文(Charles Darwin)的表兄弟Francis Galton發(fā)明的...

    ZHAO_ 評論0 收藏0
  • 機器學(xué)習(xí)線性回歸python實現(xiàn)

    摘要:機器學(xué)習(xí)線性回歸原理介紹機器學(xué)習(xí)線性回歸實現(xiàn)機器學(xué)習(xí)線性回歸實現(xiàn)這里使用實現(xiàn)線性回歸,沒有使用等機器學(xué)習(xí)框架,目的是幫助理解算法的原理。單變量和雙變量的使用的自己模擬的一個簡單的房價數(shù)據(jù)集,多變量的使用的房價數(shù)據(jù)集。 【機器學(xué)習(xí)】線性回歸原理介紹 【機器學(xué)習(xí)】線性回歸python實現(xiàn) 【機器學(xué)習(xí)】線性回歸sklearn實現(xiàn) 這里使用python實現(xiàn)線性回歸,沒有使用sklearn等...

    qujian 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<