1. 程式人生 > >機器學習_線性回歸

機器學習_線性回歸

ray 線性回歸 麻煩 小時 數據集 nal best lin rand()

線性回歸

人工智能是機器學習的父類;機器學習是深度學習的父類

1. 怎麽做線性回歸?

2. 理解回歸 -- 最大似然函數

3. 應用正態分布概率密度函數 -- 對數總似然

4. 推導出損失函數 -- 推導出解析解

5. 代碼實現解析解的方式求解 -- 梯度下降法的開始 -- sklearn模塊使用線性回歸

線性: y = a * x 一次方的變化

回歸:回歸到平均值

簡單線性回歸

算法 = 公式

一元一次方程組

一元:一個x 影響y的因素,維度

一次:x的變化 沒有非線性的變化

y = a * x + b

x1,y1 x2,y2 x3,y3 x4,y4 ...

誤差最小的 -- 最優解

做機器學習,沒有完美解,只有最優解

做機器學習就是要以最快的速度,找到誤差最小的最優解

一個樣本的誤差:

yi^ - yi

找到誤差最小的時刻;為了去找到誤差最小的時刻,需要反復嘗試,a,b

根據 最小二乘法 去求得誤差

反過來誤差最小時刻的a,b就是最終最優解模型!!!

===========================================================================

多元線性回歸

y = a*x+b

y = w0+w1*x1+w2*x2

向量轉置相乘x0=1

不止兩個特征

截距(w0),什麽都不做,本身就存在那裏(物體本身就漂亮,不加修飾也漂亮)

x1...xn:n個特征

本質上就是算法(公式)變換為了多元一次方程組

y = w1 * x1 + w2 * x2 + w3 * x3 + ... +wn * xn + w0 * x0 (x0恒為1時可不寫)

===========================================================================

最大似然估計:

是一種統計方法,用來求一個樣本集的相關概率密度函數的參數

‘似然’(likelihood):即‘可能性’,通俗易懂叫法:‘最大可能性估計’

likelihood 與 probability 同義詞

中心極限定理:

  • 是概率論中討論 隨機變量 序列部分和分步漸進於正態分布的一類定理

誤差(ε):

  • 第i個樣本實際的值 等於 預測的值 加 誤差

  • 假定所有的樣本都是獨立的,有上下的震蕩,震蕩認為是隨機變量,足夠多 的隨機變量疊加之後形成的分布,根據中心極限定理,它服從的就是正態分布,因為它是正常狀態下的分布

最小二乘法:

概率密度函數:

最簡單的概率密度函數:均勻分布的密度函數,

技術分享圖片

一維正態分布

若隨機變量X服從一個位置參數為μ、尺度參數為σ的概率分布,且其概率密度函數為

技術分享圖片

則這個隨機變量就稱為正態隨機變量,正態隨機變量服從的分布就稱為正態分布

標準正態分布

當μ=0,σ=1時,正態分布就成為標準正態分布:

技術分享圖片

求總似然:

技術分享圖片

因為連乘太麻煩,故想到用log函數使得連乘變成相加,log函數為單調遞增函數,故可以.

技術分享圖片

通過最大似然估計的思想,利用了正態分布的概率密度函數,推導出了損失函數

誤差函數的另一種表達:

技術分享圖片

找損失最小的過程就是求極值的過程(導數為0)

技術分享圖片

解析解:

技術分享圖片

總結:

(1) 為什麽求總似然的時候,要用正態分布?

中心極限定理,如果假設樣本之間是獨立事件,誤差變量隨即產生,那麽就服從正太分布.

(2) 總似然不是概率相乘嗎?為什麽用了概率密度函數的f(xi)進行了相乘?

因為概率不好求,所以當我們可以找到概率密度相乘最大的時候,就相當於找到了概率相乘最大的時候.

(3) 概率為什麽不好求?

因為求的是面積,需要積分,麻煩。不用去管數學上如何根據概率密度函數去求概率.

(4) 總似然最大和最優解有什麽關系?

當我們找到可以使得總似然最大的條件,也就是可以找到我們的DataSet數據集最吻合某個正態分布,即找到了最優解

通過最大似然估計的思想,利用了正態分布的概率密度函數,推導出了損失函數

(5) 什麽是損失函數?

一個函數最小,就對應了模型是最優解,預測歷史數據可以最準.

(6) 線性回歸的損失函數是什麽?

最小二乘法;MSE(mean squared error)[平方均值損失函數,均方誤差]

(6) 線性回歸的損失函數有哪些假設?

樣本獨立;隨機變量;服從正態分布

(7) ML學習特點:

不強調模型100%正確;

強調模型是有價值的,堪用的.

通過對損失函數求導,來找到最小值,求出θ的最優解;

代碼實現解析解的方式求解

import numpy as np
import matplotlib.pyplot as plt
 
#這裏相當於是隨機X維度X1,rand是隨機均勻分布
#rand():返回0-1之間的數
X=2*np.random.rand(100,1)#100行1列
 
#人為的設置真實的Y一列,np.random.randn(100,1)是設置error(方差),randn是標準正態分布
#np.random.randn(100,1)返回標準正態分布上的一個隨機值,取0的概率比較大一些
#(4+3*X)是預測值、np.random.randn(100,1)是誤差ε
#預測值==W的轉置*X
#4==W0;3==W1
y=4+3*X+np.random.randn(100,1)#100行1列
 
#整合X0和X1
#np.ones(100,1)輸出100行1列個1
X_b=np.c_[np.ones((100,1)),X]
print(X_b)
 
#常規等式求解θ(theta)
#inv:求逆、dot:點乘、.T:轉置
theta_best=np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
 技術分享圖片

print(theta_best)
 技術分享圖片

#創建測試集裏面的X1
X_new=np.array([[0],[2]])
X_new_b=np.c_[(np.ones((2,1))),X_new]
print(X_new_b)
y_predict=X_new_b.dot(theta_best)
print(y_predict)
‘‘‘
[[3.98173243]
[10.17046616]]
‘‘‘
 技術分享圖片


 
 
plt.plot(X_new,y_predict,r-)
plt.plot(X,y,b.)
plt.axis([0,2,0,15])#標註x軸的範圍是0-2,y的範圍是0-15
plt.show()
 技術分享圖片


 
 
實際上當數據特別多的時候,用上述方法求解特別慢
 

機器學習_線性回歸