線性回歸
解決問題
先上一個例子
人們去某一家銀行貸款,貸款額度與工資和年齡的關系如下:
工資 | 年齡 | 額度 |
---|---|---|
4000 | 25 | 20000 |
8000 | 30 | 70000 |
5000 | 28 | 35000 |
7500 | 33 | 50000 |
12000 | 40 | 85000 |
預測,下一個人去銀行貸款的額度是多少?
工資和年齡對貸款額度的影響有多大?
思路推理
工資和年齡是我們的兩個特征,額度是我們想預測的結果,這個結果是一個具體的數值。
對于每一個樣本,都存在誤差,記做:
我們應該要讓誤差越小,那我們的參數就越好,我們的目的還是要求參數 \theta。
這時,我們作出一個假設,所有樣本數據的誤差是獨立且具有相同分布,服從高斯分布的。
高斯分布的y坐標是概率值,x坐標是各個樣本的誤差。這里可以看出我們的假設就是誤差越大的概率會比較小,大部分的誤差都接近于0,這樣的分布才是我們所希望的分布情況。
下面是高斯分布的公式:
中間的公式就是高斯分布的公式。
這時我們想,由于誤差是服從高斯分布的,是不是只有當每次誤差的概率越大,那誤差就越接近于0啊,也是我們想要的情況。
所以我們把所有誤差的概率相乘,以便讓此結果最大,這樣就它的似然函數:
乘法想求最大值難解,我們轉換為對數似然以便就加法最大值。
化簡過程略過若干步驟,最后上面試子,要想讓最上面那個式子最大,由于它前半部分是個常數,后面是減去一個數,這樣我們讓最后那個數最小就行了。 就是讓這個最小二乘法的式子最小。
這個式子是一個方程,在數學中,我們想求一個函數的的最低點,我們是不是需要求這個函數的偏導等于0的情況就是啊? 是的:
上面的化簡需要注意的是,無論X還是theta還是y,都是矩陣,需要用矩陣的算法來化簡。
這樣我們就求得theta的一個具體值。哇???
是的,特殊情況(線性回歸)就是能求出來。
結果
不過我們一般都不是這樣去直接求得一個theta,而是用梯度下降的方法去慢慢找一個最優的theta。
梯度下降
當我們得到最小二乘法的目標函數之后,我們需要去求什么樣的theta可以讓這個函數的值是最小的。
首先,我們可以隨意定義一個theta矩陣,比如{1,1,1,1 … ,1} 里面的元素都是1。
然后我們求出現在的目標函數的值是多少。
然后我們更新theta的值,在次求出目標函數的值。這樣兩次求出的值看誰最小。
當我們更新n次之后,我們可以從這n次里面挑一個能使目標函數的值最小的theta矩陣。
怎么更新theta參數
我們可以先求得在原theta點上,目標函數的導數,數學中,函數在某點的導數就是,函數在這個點上,往下一個方向移動的方向。這樣的話我們可以讓theta往這個方向上移動一定的距離,得到theta更新后的值。
這個更新一定的距離,我們稱為學習率(步長)。
導數需要我們去求,上面的函數中,導數為。
學習率(步長)我們自己定義, 一般很小,不行就更小。
alpha為學習率(步長)
梯度下降的常用方式
- 批量梯度下降: 就是考慮所有的樣本,上式中的m為全部樣本個數(這樣容易得到最優解,但是樣本非常多速度非常慢)
- 隨機梯度下降: 就是每次就考慮1個樣本,m=1(這樣速度快,但是不一定每次都朝著收斂方向移動)
- 小批量梯度下降: 每次考慮一部分樣本,m=10(實用)
邏輯回歸
解決問題
邏輯回歸解決的是分類問題。
另一個例子,某次考試的成績出來了,學生們考了2個科目,每個科目的分數為x1和x2,是否通過的結果為y,y的取值為0或1。
預測,下一個人的成績出來后,能否通過考試?
科目1和科目2對考試結果的影響有多大?
y的取值為0或者1。
思路推理
這里我們引入Sigmoid函數
- Sigmoid函數
將y帶入函數有:
我們假設(y==1時)通過考試的概率服從Sigmoid函數的分布,那么沒有通過考試(y==0時)的概率就是1減去通過考試的概率。
推理有:
我們將式子進行整合,當y=0時,只有右邊的式子;當y=1時,只有左邊的式子,恰好是左邊分類任務的情況。這樣得一個式子可以表達前面的分類任務的兩個式子,這兩部分是等價的。
這樣,就得到了事件發生的概率函數。
回到了概率問題,我們希望當x的取某個值時,通過和未通過的概率都越大越好(就是概率越接近100%最好),這樣才最接近我們現實的情況。
這樣就得到似然函數:
轉換為梯度下降任務后求導:
結果
這樣,我們使用梯度下降的方法,先定義一個theta矩陣,
求對數似然函數變換的(損失函數)的值。
然后定義步長,更新theta矩陣,繼續求損失函數的值。
從這n次迭代中挑選使損失函數最小的theta矩陣。