線性回歸
線性回歸包括一元線性回歸和多元線性回歸,一元的是只有乙個x和乙個y。多元的是指有多個x和乙個y。 下面我只講下一元的,多元只是將y=mx+b 變成了y=
一元線性回歸其實就是去找到一條直線,這條直線能以最小的誤差(loss)來擬合資料。
怎麼來表示誤差呢?
如上圖所示,橫座標表示x,縱座標表示y。我們要找的就是圖中的這條直線。我們要去找到這條直線,大家可以想象,我們肯定希望找到的那條線,距離每個點都很近,最好所有的點上都在這條線上,但是一條直線去擬合所有的點都在這條直線上肯定不現實,所以我們希望這些點盡量離這條直線近一點。即去找每個點和直線的距離 最小的那條線,為了簡單起見,將絕對值轉化為平方,那麼誤差可以表示為
,這裡i表示第i個資料,n表示總的樣本個數。一般我們還會把loss求和平均,來當作最終的損失,
即.怎麼去最小化誤差?
我們要怎麼去找到最能擬合資料的直線?即最小化誤差呢?
一般有兩個方法:
最小二乘法
上面我們講了我們定義的損失
,其中的x,y,i,n都是已知的,那麼我們就可以把這個方程看作是m和b的方程。作為乙個m和b的二次方程。那麼求loss最小值的問題就轉變成了求極值問題,這個高數學過的都應該知道點。
怎麼求極值呢?
令每個變數的偏導數為零,求方程組的解唄,這個是很基礎的高數問題了。
我們可以得到下面的方程組
然後就是巴拉巴拉巴拉把m和b求出來,這樣就得到我們要的線性方程了。
梯度下降法
沒有梯度下降就沒有現在的深度學習,這是乙個神奇的演算法。
最小二乘法可以一步到位,直接算出m和b,但他是有前提的,具體我有點記不清了,好像是需要滿秩什麼的。梯度下降法和最小二乘不一樣,它通過一步一步的迭代,慢慢的去靠近到那條最優直線。
最小二乘法裡面我們提到了兩個偏導數,分別為
我們要去找loss這個方程的最小值,最小值怎麼求?按數學的求法就是最小二乘法唄,但是大家可以直觀的想一下,很多地方都會用乙個碗來形容,那我也找個碗來解釋吧。
大家把這個loss函式想象成這個碗,而我們要求的最小值就是碗底。假設我們現在不能用最小二乘法求極小值,但是我們的計算機的計算能量很強,我們可以用計算量換結果,不管我們位於這個碗的什麼位置,只要我們想去碗底,就要往下走。
往下走???
這個下不就是往梯度方向走嗎,那我們沿著梯度一點一點滑下去唄,反正計算機不嫌累。梯度不就是上面那兩個公式唄。現在梯度有了,那每次滑多遠呢,一滑劃過頭了不久白算半天了嗎,所以還得定義步長,用來表示每次滑多長。這樣我們就能每次向下走一點點,再定義乙個迭代值用來表示滑多少次,這樣我們就能慢慢的一點點的靠近最小值了,不出意外還是能距離最優值很近的。
線性回歸的一般形式
線性回歸中可能遇到的問題
求解損失函式的最小值有兩種方法:梯度下降法以及正規方程,兩者的對比在附加筆記中有列出。
特徵縮放:即對特徵資料進行歸一化操作,進行特徵縮放的好處有兩點,一是能夠提公升模型的收斂速度,因為如果特徵間的資料相差級別較大的話,以兩個特徵為例,以這兩個特徵為橫縱座標繪製等高線圖,繪製出來是扁平狀的橢圓,這時候通過梯度下降法尋找梯度方向最終將走垂直於等高線的之字形路線,迭代速度變慢。但是如果對特徵進行歸一化操作之後,整個等高線圖將呈現圓形,梯度的方向是指向圓心的,迭代速度遠遠大於前者。二是能夠提公升模型精度。
學習率α的選取:如果學習率α選取過小,會導致迭代次數變多,收斂速度變慢;學習率α選取過大,有可能會跳過最優解,最終導致根本無法收斂。
過擬合問題及其解決方法
問題:以下面一張展示過擬合問題
解決方法:(1):丟棄一些對我們最終**結果影響不大的特徵,具體哪些特徵需要丟棄可以通過pca演算法來實現;(2):使用正則化技術,保留所有特徵,但是減少特徵前面的引數θ的大小,具體就是修改線性回歸中的損失函式形式即可,嶺回歸以及lasso回歸就是這麼做的。
嶺回歸與lasso回歸
嶺回歸與lasso回歸的出現是為了解決線性回歸出現的過擬合以及在通過正規方程方法求解θ的過程**現的x轉置乘以x不可逆這兩類問題的,這兩種回歸均通過在損失函式中引入正則化項來達到目的,具體三者的損失函式對比見下圖:
其中λ稱為正則化引數,如果λ選取過大,會把所有引數θ均最小化,造成欠擬合,如果λ選取過小,會導致對過擬合問題解決不當,因此λ的選取是乙個技術活。
嶺回歸與lasso回歸最大的區別在於嶺回歸引入的是l2範數懲罰項,lasso回歸引入的是l1範數懲罰項,lasso回歸能夠使得損失函式中的許多θ均變成0,這點要優於嶺回歸,因為嶺回歸是要所有的θ均存在的,這樣計算量lasso回歸將遠遠小於嶺回歸。
可以看到,lasso回歸最終會趨於一條直線,原因就在於好多θ值已經均為0,而嶺回歸卻有一定平滑度,因為所有的θ值均存在。
Django之初學習
由於工作原因接觸第乙個web框架,故在這裡簡記!django 是乙個由 python 編寫的乙個開放源 的 web 應用框架。使用 django,只要很少的 python 的程式開發人員就可以輕鬆地完成乙個正式 所需要的大部分內容,並進一步開發出全功能的 web 服務 django 本身基於 mvc...
LINUX學習之初學GCC
本來昨天打算學會在ubuntu中使用gcc進行程式設計,可是直到今天才明白過來怎樣使用gcc進行程式設計。include int main printf hello,world n 我按照我能理解的一段話中所言,在終端中輸入gcc hello.c o hello,執行顯示 沒有那個檔案或目錄 這和昨...
python機器學習 線性回歸
要理解線性回歸,首先得對線性和回歸的基本概念進行回顧。線性 兩個變數之間存在一次方函式關係即一階導數為常數的函式。回歸 確定兩種或兩種以上變數間相互依賴的定量關係的一種統計分析方法。回歸分析按照涉及的變數的多少,分為一元回歸和多元回歸分析。分類與回歸的區別 分類 輸出為離散資料 目的 尋找決策邊界 ...