入门lr
1.我們定義線性回歸函數(linear regression)為:?
然后用h(x) 來預測y
最簡單的例子,一個特征size,y是Price,把訓練數據畫在圖上,如下圖。(舉最簡單的例子只是幫助理解,當特征只有一維的時候,畫出來是一條直線,多維的時候就是超平面了)
這里有一個問題,如果真實模型不是線性的怎么辦?所以套用線性回歸的時候是需要預判的,不然訓練出來的效果肯定不行。這里不必過于深究,后面也會介紹怎么通過預處理數據處理非線性的情況。
2.目標就是畫一條直線盡量靠近這些點,用數學語言來描述就是cost function盡量小。
為什么是平方和? 直接相減取一下絕對值不行么, | h(x)-y | ???(后面的Probabilistic interpretation會解釋,這樣求出來的是likelihood最大。另外一個問題, | h(x)-y |大的時候 (?h(x)-y )^2 不也是一樣增大,看上去好像也一樣?! 除了后者是凸函數,好求解,所以就用平方和? 不是的,單獨一個樣本縱向比較確實一樣,但別漏了式子前面還有一個求和符號,這兩者的差異體現在樣本橫向比較的時候,比如現在有兩組差值,每組兩個樣本,第一組絕對值差是1,3,第二組是2,2,絕對值差求和是一樣,4=4, 算平方差就不一樣了,10 > 8。其實,x^2求導是2x,這里的意思就是懲罰隨偏差值線性增大,最終的效果從圖上看就是盡可能讓直線靠近所有點)
3 然后就是怎么求解了。如果h(x)=y那就是初中時候的多元一次方程組了,現在不是,所以要用高端一點的方法。以前初中、高中課本也有提到怎么求解回歸方程,都是按計算器,難怪我一點印象都沒有,囧。。還以為失憶了 notes 1里面介紹3種方法 1.gradient descent (梯度下降) a.batch?gradient descent b.stochastic gradient descent (上面的變形) 2.the normal equations 3.Newton method(Fisher scoring)
只有一個訓練數據的例子:
這個式子直觀上也很好理解,假設xj是正數,y比預測值h(x)大的話,我們要加大θ,所以α前面是+號(當xj是負數同理)
舉一個數據的例子只是幫助我們理解,實際中是會有多個數據的,你會體會到矩陣的便利性的。
上面的式子在具體更新的時候有小的不同 方法 a.batch?gradient descent 注意,要同時進行更新。因為更新θ(j+1)的時候要用hθ(x),這里的hθ(x)用的還是老的θ1 到 θj。
直觀上看,等高線代表cost function的值,橫縱坐標是θ1 θ2兩個參數,梯度下降就是每次一小步沿著垂直等高線的方向往等高線低(圖的中心)的地方走。顯然步子不能太大,不然容易扯著蛋(跨一大步之后反而到了更高的點)
方法 b.stochastic gradient descent (also incremental?gradient descent)? 這兩種方法看公式可能不好理解,看后面的代碼實現就容易區分。
這樣迭代就行,f′(θ)是斜率,從圖上看,就是“用三角形去擬合曲線,找0點”
因為我們是要求導數等于0,把上面的式子替換一下f(θ) = ?′(θ) θ是多維的,有
where? When Newton’s method is applied to maximize the logistic regression log likelihood function ?(θ), the resulting method is also called?Fisher?scoring.
coursera的課件提到其他方法,估計初學者沒空深究,了解一下有這些東西就好。
離群點會對結果影響很大,比如上圖(我們以h(x)>0.5時預測y=1,一個離群點讓直線大旋轉,一下子把不少點誤分類了)(coursera的課程只提到這個原因,但貌似不止),而且還有一個問題,Intuitively, it also doesn’t make sense for h(x) to take values larger than 1 or smaller than 0 when we know that y ∈ {0, 1}. (那h(x)在[0,1]又代表什么呢?呵呵) 換成這個曲線就好多了,這個函數是sigmoid function g(z) 值域 (0,1)
把線性回歸套進去g(z)就是
為什么是sigmoid函數?換個形狀類似的函數不行么?這個后面一樣有概率解釋的。注意,這個函數輸出值代表“y為1的概率”,再回過頭看看,前面y用1和0來表示正反也是有講究的(講svn的時候又換成+1,-1),直觀上看sigmoid越接近1表示1的概率大,接近0表示0的概率大,還有一個好處就是下面算likelihood的時候用式子好表示。
建模好,還缺一個cost function,是不是跟linear regression一樣求平方差就行? 呵呵,不是,coursera課程給出的原因是套入sigmoid后,這個函數不是凸函數,不好求解了。但其實h(x) -y 算出來是一個概率,多個訓練數據的概率相加是沒意義的,得相乘。p(x,y) = p(x)* p(y)。
先講一個useful property 推導公式時可以用,習題也會用到的
把兩個概率公式合到一起 =>? likelihood of the parameters: log likelihood: 一個訓練數據的時候(代入前面的結論) 注意,前面linear regression,我們求cost function的最小值,所以是減號 對于logistic regression,我們要求的是likelihood最大(附錄提到,是等價的),所以要換成加號。這樣θ最終的迭代式子才跟前面linear regression一樣,這是巧合么?隱隱約約感覺這其中有一腿。for?iter?=?1:num_iters?? ?A?=?(?X?*?theta?-?y?)';?? ?theta?=?theta?-?1/m?*?alpha?*?(?A?*?X?)';?? end?? for iter = 1:num_itersA = ( X * theta - y )';theta = theta - 1/m * alpha * ( A * X )';
end
stochastic gradient descent [python] view plaincopyprint?for?iter?=?1:num_iters?? ?A?=?(?X?*?theta?-?y?)';?? ?for?j?=?1:m?? ???theta?=?theta?-?alpha?*?(?A(1,?j)?*?X(j,?:)?)';?????? ?end?? end?? for iter = 1:num_itersA = ( X * theta - y )';for j = 1:mtheta = theta - alpha * ( A(1, j) * X(j, :) )'; end
end
用ex1_multi.m改改,生成兩個cost下降圖,可以發現stochastic gradient descent挺犀利的。。
xj變大,h(x) 也變大,粗略迭代步長要擴大10倍(那就起到抑制θ的作用)但最終的θ要變為1/10,想想略蛋疼,比如現在100每次減少1,減99次后變為1,現在每次要減少10,卻要讓最終的結果到0.1,得改α才行啊,看來feature scaling能起到歸一化α的作用。 把ex1.m改一下,做做實驗。會發現縮放一個feature后,收斂很困難啊,我只乘以2,原來的代碼就輸出NaN了。。我把alpha平方一下 alpha^2。
可以發現等高線變密集了,橢圓形變得很扁,所以步長不能很大,收斂很困難,一直在一個類似直線的橢圓跳來跳去慢慢挪。至于結果會不會變,用normal equation來驗證,因為梯度下降有困難。改下ex1_muliti.m [python] view plaincopyprint?X2?=?X;?? X2(:,2)?=?X2(:,?2)*?2;?? theta2?=?pinv(X2'?*?X2)?*?X2'?*?y;?? theta2?? theta?? X2 = X;
X2(:,2) = X2(:, 2)* 2;
theta2 = pinv(X2' * X2) * X2' * y;
theta2
theta
theta2(2)就是神奇地變1/2了。。 [plain] view plaincopyprint?theta2?=?? ??8.9598e+004?? ??6.9605e+001?? ??-8.7380e+003?? theta?=?? ??8.9598e+004?? ??1.3921e+002?? ??-8.7380e+003?? theta2 =8.9598e+0046.9605e+001-8.7380e+003
theta =8.9598e+0041.3921e+002-8.7380e+003
前面是linear regression,對logistic regression可以改ex2.m也驗證下
[python] view plaincopyprint?X2(:,2)=?X2(:,2)*2;?? [theta2,?cost]?=?fminunc(@(t)(costFunction(t,?X2,?y)),?initial_theta,?options);?? theta2?? X2(:,2)= X2(:,2)*2;
[theta2, cost] = fminunc(@(t)(costFunction(t, X2, y)), initial_theta, options);
theta2 [plain] view plaincopyprint? theta:?? ?-25.161272?? ?0.206233?? ?0.201470?? theta2?=?? ??-25.16127?? ????0.10312?? ????0.20147?? theta:-25.1612720.2062330.201470
theta2 =-25.161270.103120.20147
假設ε是iid(獨立同分布)的,符合高斯分布(通常高斯分布是合理的,具體不解釋),聯想到高斯分布的式子,有平方就不奇怪了。
得到 likelihood function:
求解技巧,轉成 log likelihood ?(θ)(這個是個非常基礎的技巧,后面會大量用到):
To summarize: Under the previous probabilistic assumptions on the data, least-squares regression?corresponds to finding the?maximum likelihood estimate of θ.
Next《cs229 斯坦福機器學習筆記(二)-- LR回顧與svm算法idea理解》
前言
說到機器學習,很多人推薦的學習資料就是斯坦福Andrew Ng的cs229,有相關的視頻和講義。不過好的資料 != 好入門的資料,Andrew Ng在coursera有另外一個機器學習課程,更適合入門。課程有video,review questions和programing exercises,視頻雖然沒有中文字幕,不過看演示的講義還是很好理解的(如果當初大學里的課有這么好,我也不至于畢業后成為文盲。。)。最重要的就是里面的programing exercises,得理解透才完成得來的,畢竟不是簡單點點鼠標的選擇題。不過coursera的課程屏蔽很一些比較難的內容,如果覺得課程不夠過癮,可以再看看cs229的。這篇筆記主要是參照cs229的課程,但也會穿插coursera的一些內容。 接觸完機器學習,會發現有兩門課很重要,一個是概率統計,另外一個是線性代數。因為機器學習使用的數據,可以看成概率統計里的樣本,而機器學習建模之后,你會發現剩下的就是線性代數求解問題。 至于學習資料,周志華最新的《機器學習》西瓜書已經出了,肯定是首選!以前的話我推薦《機器學習實戰》,能解決你對機器學習怎么落地的困惑。李航的《統計學習方法》可以當提綱參考。cs229除了lecture notes,還有session notes(簡直是雪中送炭,夏天送風扇,lecture notes里那些讓你覺得有必要再深入了解的點這里可以找到),和problem sets,如果仔細讀,資料也夠多了。線性回歸 linear regression
通過現實生活中的例子,可以幫助理解和體會線性回歸。比如某日,某屌絲同事說買了房子,那一般大家關心的就是房子在哪,哪個小區,多少錢一平方這些信息,因為我們知道,這些信息是"關鍵信息”(機器學習里的黑話叫“feature”)。那假設現在要你來評估一套二手房的價格(或者更直接點,你就是一個賣房子的黑中介,嘿嘿),如果你對房價一無所知(比如說房子是在非洲),那你肯定估算不準,最好就能提供同小區其他房子的報價;沒有的話,旁邊小區也行;再沒有的話,所在區的房子均價也行;還是沒有的話,所在城市房子均價也行(在北京有套房和在余杭有套房能一樣么),因為你知道,這些信息是有“參考價值”的。其次,估算的時候我們肯定希望提供的信息能盡量詳細,因為我們知道房子的朝向,裝修好壞,位置(靠近馬路還是小區中心)是會影響房子價格的。 其實我們人腦在估算的過程,就類似一個“機器學習”的過程。 a)首先我們需要“訓練數據”,也就是相關的房價數據,當然,數據太少肯定不行,要盡量豐富。有了這些數據,人腦可以“學習”出房價的一個大體情況。因為我們知道同一小區的同一戶型,一般價格是差不多的(特征相近,目標值-房價也是相近的,不然就沒法預測了);房價我們一般按平方算,平方數和房價有“近似”線性的關系。 b)而“訓練數據”里面要有啥信息?只給你房子照片肯定不行,肯定是要小區地點,房子大小等等這些關鍵“特征” c)一般我們人肉估算的時候,比較隨意,也就估個大概,不會算到小數點后幾位;而估算的時候,我們會參照現有數據,不會讓估算跟“訓練數據”差得離譜(也就是下面要講的讓損失函數盡量小),不然還要“訓練數據”干嘛。 計算機擅長處理數值計算,把房價估算問題完全可以用數學方法來做。把這里的“人肉估算”數學形式化,也就是“線性回歸”。1.我們定義線性回歸函數(linear regression)為:?
然后用h(x) 來預測y
最簡單的例子,一個特征size,y是Price,把訓練數據畫在圖上,如下圖。(舉最簡單的例子只是幫助理解,當特征只有一維的時候,畫出來是一條直線,多維的時候就是超平面了)
這里有一個問題,如果真實模型不是線性的怎么辦?所以套用線性回歸的時候是需要預判的,不然訓練出來的效果肯定不行。這里不必過于深究,后面也會介紹怎么通過預處理數據處理非線性的情況。
2.目標就是畫一條直線盡量靠近這些點,用數學語言來描述就是cost function盡量小。
為什么是平方和? 直接相減取一下絕對值不行么, | h(x)-y | ???(后面的Probabilistic interpretation會解釋,這樣求出來的是likelihood最大。另外一個問題, | h(x)-y |大的時候 (?h(x)-y )^2 不也是一樣增大,看上去好像也一樣?! 除了后者是凸函數,好求解,所以就用平方和? 不是的,單獨一個樣本縱向比較確實一樣,但別漏了式子前面還有一個求和符號,這兩者的差異體現在樣本橫向比較的時候,比如現在有兩組差值,每組兩個樣本,第一組絕對值差是1,3,第二組是2,2,絕對值差求和是一樣,4=4, 算平方差就不一樣了,10 > 8。其實,x^2求導是2x,這里的意思就是懲罰隨偏差值線性增大,最終的效果從圖上看就是盡可能讓直線靠近所有點)
3 然后就是怎么求解了。如果h(x)=y那就是初中時候的多元一次方程組了,現在不是,所以要用高端一點的方法。以前初中、高中課本也有提到怎么求解回歸方程,都是按計算器,難怪我一點印象都沒有,囧。。還以為失憶了 notes 1里面介紹3種方法 1.gradient descent (梯度下降) a.batch?gradient descent b.stochastic gradient descent (上面的變形) 2.the normal equations 3.Newton method(Fisher scoring)
1.gradient descent?algorithm
α is called the learning rate.只有一個訓練數據的例子:
這個式子直觀上也很好理解,假設xj是正數,y比預測值h(x)大的話,我們要加大θ,所以α前面是+號(當xj是負數同理)
舉一個數據的例子只是幫助我們理解,實際中是會有多個數據的,你會體會到矩陣的便利性的。
上面的式子在具體更新的時候有小的不同 方法 a.batch?gradient descent 注意,要同時進行更新。因為更新θ(j+1)的時候要用hθ(x),這里的hθ(x)用的還是老的θ1 到 θj。
直觀上看,等高線代表cost function的值,橫縱坐標是θ1 θ2兩個參數,梯度下降就是每次一小步沿著垂直等高線的方向往等高線低(圖的中心)的地方走。顯然步子不能太大,不然容易扯著蛋(跨一大步之后反而到了更高的點)
方法 b.stochastic gradient descent (also incremental?gradient descent)? 這兩種方法看公式可能不好理解,看后面的代碼實現就容易區分。
2.the normal equations。
初學者可以先跳過推導過程(不是鼓勵不看。),直接先記住結論。(在線性代數的復習課件cs229-linalg會說明,這個式子其實是把y投影到X)3.牛頓法
Another algorithm for maximizing ?(θ) Returning to logistic regression with g(z) being the sigmoid function, lets?now talk about a different algorithm for minimizing -?(θ)。(感覺notes1里面少了個負號) 牛頓法求函數0點,即 f (Θ) = 0這樣迭代就行,f′(θ)是斜率,從圖上看,就是“用三角形去擬合曲線,找0點”
因為我們是要求導數等于0,把上面的式子替換一下f(θ) = ?′(θ) θ是多維的,有
where? When Newton’s method is applied to maximize the logistic regression log likelihood function ?(θ), the resulting method is also called?Fisher?scoring.
coursera的課件提到其他方法,估計初學者沒空深究,了解一下有這些東西就好。
邏輯回歸logistic regression
現在如果有一個0和1的2分類問題的,套進去線性回歸去解,如下圖離群點會對結果影響很大,比如上圖(我們以h(x)>0.5時預測y=1,一個離群點讓直線大旋轉,一下子把不少點誤分類了)(coursera的課程只提到這個原因,但貌似不止),而且還有一個問題,Intuitively, it also doesn’t make sense for h(x) to take values larger than 1 or smaller than 0 when we know that y ∈ {0, 1}. (那h(x)在[0,1]又代表什么呢?呵呵) 換成這個曲線就好多了,這個函數是sigmoid function g(z) 值域 (0,1)
把線性回歸套進去g(z)就是
為什么是sigmoid函數?換個形狀類似的函數不行么?這個后面一樣有概率解釋的。注意,這個函數輸出值代表“y為1的概率”,再回過頭看看,前面y用1和0來表示正反也是有講究的(講svn的時候又換成+1,-1),直觀上看sigmoid越接近1表示1的概率大,接近0表示0的概率大,還有一個好處就是下面算likelihood的時候用式子好表示。
建模好,還缺一個cost function,是不是跟linear regression一樣求平方差就行? 呵呵,不是,coursera課程給出的原因是套入sigmoid后,這個函數不是凸函數,不好求解了。但其實h(x) -y 算出來是一個概率,多個訓練數據的概率相加是沒意義的,得相乘。p(x,y) = p(x)* p(y)。
先講一個useful property 推導公式時可以用,習題也會用到的
把兩個概率公式合到一起 =>? likelihood of the parameters: log likelihood: 一個訓練數據的時候(代入前面的結論) 注意,前面linear regression,我們求cost function的最小值,所以是減號 對于logistic regression,我們要求的是likelihood最大(附錄提到,是等價的),所以要換成加號。這樣θ最終的迭代式子才跟前面linear regression一樣,這是巧合么?隱隱約約感覺這其中有一腿。
machine learning in practice
我總覺得計算機科學動手實踐很重要,紙上談兵不接地氣。coursera有programing exercise,必須完成下。octave用起來挺爽的。這里記錄一下關鍵點。1.coursera的cost function多除了一個m
其實起到一個歸一化的作用,讓迭代步長α與訓練樣本數無關(你可以當作α=α'/m)2.batch?gradient descent和stochastic gradient descent的差別
batch?gradient descent [python] view plaincopyprint?stochastic gradient descent [python] view plaincopyprint?
用ex1_multi.m改改,生成兩個cost下降圖,可以發現stochastic gradient descent挺犀利的。。
3.feature scaling的作用是啥?
(具體模型具體分析,這里只針對LR模型,不要把結論隨意推廣)coursera提到的作用是加速收斂,那會影響結果么?直覺上,把一個feature擴大10倍,那算cost function的時候豈不是很占便宜,算出來的權重會偏向這個feature么? 對這種問題,數學家會理論證明,工程師做實驗驗證,我習慣粗略證明,然后實驗驗證自己對不對。 (下面都是粗略的想法,不是嚴謹證明!!)假設每個樣本的feature j 乘以10,那算出來的θj除以10不就結果跟原來一樣了?我猜不會影響。看一下我們迭代時候的式子xj變大,h(x) 也變大,粗略迭代步長要擴大10倍(那就起到抑制θ的作用)但最終的θ要變為1/10,想想略蛋疼,比如現在100每次減少1,減99次后變為1,現在每次要減少10,卻要讓最終的結果到0.1,得改α才行啊,看來feature scaling能起到歸一化α的作用。 把ex1.m改一下,做做實驗。會發現縮放一個feature后,收斂很困難啊,我只乘以2,原來的代碼就輸出NaN了。。我把alpha平方一下 alpha^2。
可以發現等高線變密集了,橢圓形變得很扁,所以步長不能很大,收斂很困難,一直在一個類似直線的橢圓跳來跳去慢慢挪。至于結果會不會變,用normal equation來驗證,因為梯度下降有困難。改下ex1_muliti.m [python] view plaincopyprint?
theta2(2)就是神奇地變1/2了。。 [plain] view plaincopyprint?
前面是linear regression,對logistic regression可以改ex2.m也驗證下
[python] view plaincopyprint?
附錄
cost function的概率解釋
我們知道h(x)和真實的y是有偏差的,設偏差是ε假設ε是iid(獨立同分布)的,符合高斯分布(通常高斯分布是合理的,具體不解釋),聯想到高斯分布的式子,有平方就不奇怪了。
得到 likelihood function:
求解技巧,轉成 log likelihood ?(θ)(這個是個非常基礎的技巧,后面會大量用到):
To summarize: Under the previous probabilistic assumptions on the data, least-squares regression?corresponds to finding the?maximum likelihood estimate of θ.
Next《cs229 斯坦福機器學習筆記(二)-- LR回顧與svm算法idea理解》
總結
- 上一篇: Lr
- 下一篇: LR模型常见问题小议