• 文章總列表
  • 統計分析
    • R SAS All
      R

      [R]散佈圖與相…

      2019-12-31

      R

      [R]Logis…

      2019-10-31

      R

      [SAS][R]…

      2019-09-27

      R

      [R]Chi-s…

      2019-09-19

      SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      SAS

      [SAS]迴歸分…

      2020-02-28

      統計分析

      [SAS] Ma…

      2026-01-21

      統計分析

      什麼是meta-…

      2024-11-05

      統計分析

      Test-ret…

      2024-06-07

      統計分析

      [SAS]傾向分…

      2020-10-28

  • SAS
    • SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      SAS

      [SAS]迴歸分…

      2020-02-28

      SAS

      [SAS]線性迴…

      2020-02-26

  • R
    • R

      [R]散佈圖與相…

      2019-12-31

      R

      [R]Logis…

      2019-10-31

      R

      [SAS][R]…

      2019-09-27

      R

      [R]Chi-s…

      2019-09-19

      R

      [SAS][R]…

      2019-07-08

  • 機器學習
    • 機器學習

      Unsuperv…

      2021-07-22

      機器學習

      Unsuperv…

      2021-07-12

      機器學習

      Unsuperv…

      2021-05-20

      機器學習

      Unsuperv…

      2021-05-12

      機器學習

      Matrix F…

      2021-04-30

  • 閱讀筆記
    • 閱讀筆記

      [閱讀心得 #2…

      2025-02-05

      閱讀筆記

      [閱讀心得#20…

      2024-10-25

      閱讀筆記

      [閱讀心得#19…

      2024-08-16

      閱讀筆記

      [閱讀心得#18…

      2024-05-10

      閱讀筆記

      [閱讀心得#17…

      2022-01-22

Wenwu's blog
wenwu's blog
  • 請我喝珍奶

Popular Posts

[R]散佈圖...

2019-12-31

[SAS]L...

2020-06-10

[SAS][...

2019-07-08

[R]Log...

2019-10-31

[SAS] ...

2020-01-22

[SAS]線...

2020-02-26

[SAS]存...

2019-12-18

[SAS]迴...

2020-02-28
機器學習

機器學習自學筆記05: Classification | Probabilistic Generative Model

by wenwu 2020-04-30

機器學習自學筆記05: Classification | Probabilistic Generative Model

今日的課程來自於: https://youtu.be/CXgbekl66jc
參考筆記:https://github.com/Sakura-gh/ML-notes/blob/master/1_Introduction.md

Classification 概念描述

分類的目標就是要找到一個function,當我們將數值輸入後,輸出可以分類。以寶可夢為例,我們已經知道寶可夢有18種屬性,我們期望可以找到一個function,當我們將某一支寶可夢輸入後,可以知道他的屬性。

如何將寶可夢輸入呢? 需要將每個寶可夢數值化。

特性數值化:用一組數字來描述一隻寶可夢的特性。比方說它有多強(total strong)、它的生命值(HP)、它的攻擊力(Attack)、它的防禦力(Defense)、它的特殊攻擊力(Special Attack)、它的特殊攻擊的防禦力(Special defend)、它的速度(Speed)。所以我們可以將每個寶可夢用以上七種特性來描述。


Classification as Regression?

我們可以使用迴歸分析分類嗎?

假設我們要使用regression 來做classification,在training 時可以假設class 1 的輸出是1;class 2 的輸出是2;當我們使用testing時,regression 的輸出是一個數值,當他接近1 的時候分類為class 1 ,接近-1時分類為class 2

但是這樣做會發生什麼問題?

先講解左圖的例子,假設我們資料的分布如左圖,regression train 出來的model (綠線)可以完美的幫我們分類資料屬性(這是最好的情況)

但是若遇到右圖的例子,在右下角有一群data會影響到model,從右圖中可以看出綠色的線是最好的model 分界線。但是!!! 因為使用綠線的model時,會將右下角的資料做regressiong時output會>1 ,而這些大於1 的點對綠線的model 來說都是error ! 
所以使用這組資料所training 的model 會是紫色的model ,因為它會”減少” 右下角data所帶來的error

而我們看圖就知道綠色的model是最好的,但是我們無法保證每次資料的性質都在分界線的兩端。所以不建議使用regression 使用在 classification 上面

另外,若是遇到多元分類的問題,我們將class 1 當作 1 ;class 2 當作 2 ;class 3當作 3 。這樣的標籤會使regression 以為 class 1 與 class 2 比較相近,而class 1 和 class 3 比較遠,但是這些組別之間並沒有這些關係,所以用regression 沒有辦法得到好的結果。


Ideal Alternatives ( 從新定義loss function)

理想的方法是這樣: 我們要找的 function f(x) 裡面會有另一個 function g(x) ,當我們的input x輸入之後,如果 g(x) > 0 ,那 f(x)的輸出就是 class 1 ;反之,若是g(x) < 0 ,則 f(x)的輸出就是 class 2 。

有發現其實跟regression的方法很像,只是用了不同的套術嗎?

針對 regression 的loss function 來說,因為regression 的loss function 是用output 與”真值” 的平方和 作為標準的,為了解決這個問題,我們只需要從新定義一個loss function 即可!

可以看到上圖的loss function ,新的loss 將加總model 在所有training data 上次預測的錯誤次數,(δ=1,若training data 預測出來與”真值”不同時;反之為0)

然而這個方法沒有辦法微分,所以無法用gradient descent 的方法解決。當然可以用SVM、perceptron來解決,但是今天介紹用別的方法來解決。


Solution: Generative model (生成模型)

假設今天我們有兩個class ,class1 and class2 。若是我們要計算 x 屬於 C1 的機率(=P(C1|x)),那我們就要知道下面四個紅色圈起來的機率,分別是 P(
C1)、P(C2)、P(x|C1)、P(x|C2) 。

要如何知道這四個機率,我們從training data 來估測這四個機率,這個想法叫做generative model 。為甚麼叫做generative model 呢? 因為有這個model 的話,就可以拿它來generate 生成x ;換句話說,如果我們可以計算出每一個x的機率,就可以用這個distribution分布來生成x,sample x 出來。

而P(C1)、P(C2) 這兩個機率比較好算的 (這兩個機率稱為Prior)。

假設我們有140隻寶可夢做training data ,79隻為水系,另外61隻為一般系。那training data中,出現水系(class 1)的機率=P(C1)=79/140=0.56,出現一般系(class 2)的機率=P(C2)=61/140=0.44

那要怎麼得到 P(x|C1)、P(x|C2) ?

假設今天來了一隻新的海龜,但是先前的水系寶可夢中並沒有海龜,所以我挑出一隻海龜的機率為0 。
可以想像,水系的神奇寶貝是從某個機率分布出來的,假設這個分布為gaussioan distribution(高斯分布)。而從gaussian sample出海龜的機率不會等於 0。


Gaussian Distribution

下圖中為gaussian distribution,他的input 就是x ,它的 output 就是這一隻寶可夢, 輸入x 從這一個 distribution 裡面被sample 出來的機率。

這個機率的分布由兩個東西決定,分別是mean μ 和 variance Σ 。
不同的mean μ 和 variance Σ,可以決定機率分布的樣子。下面的圖有不同的mean μ,但有相同的variance Σ。

估測μ 和 Σ 的方式,就是用最大概似估計法(maximum likelihood)
要解出μ 和 Σ,就是假設這個gaussian可以生出所有79個點,而生出這79個點的機率就是每一點出現的機率相乘,下圖中最下方有likelihood 的函數。我們要找到他的解,就要找到這個likelihood 的最佳解,就是極大值。
所以對likelihood分別偏微,解出微分是0的點,就可以找到最終的估測值。

其實最佳的μ 和 Σ ,其實就是這組data 的期望值和變異數。
最後我們可以求得 μ¹、 Σ¹、 μ²、Σ² 。

有了μ¹、 Σ¹、 μ²、Σ² 這四個值,我們就可以帶入gaussian ,並且可以求得 P(C1)、P(C2)、P(x|C1)、P(x|C2)。

接下來我們只要輸入一個x, 如果 P(C1|x) > 0.5 ,我們就將他歸類在 水系神奇寶貝了 (class 1 )


Result

左上圖中,橫軸是defense ,縱軸是SP Defense,藍色的點是水系的寶可夢的分佈,紅色的點是一般系的寶可夢的分佈,對圖中的每一個點都計算出它是class 1的機率,這個機率預測用顏色來表示,如果某點在紅色區域,表示它是水系寶可夢的機率比較大;如果該點在其他顏色的區域,表示它是一般系寶可夢的機率較大。

因為我們做的是分類問題,因此令機率> 0.5的點為class1 ,機率<0.5的點為class 2 ,也就是右上⻆的圖中的紅色和藍色兩塊區域
再把testting data上得到的結果視化出來,即右下⻆的圖,發現分的不是太好,正確率才是47%

我們之前用的只是Defense和SP Defense這兩個參數,在二維空間上得到的效果不太好,但實際上一開始就提到了寶可夢總共是有6個features的,也許在二維空間上它們是重疊在一起的,但是在六維空間上看它們也許會分得很好,每一個寶可夢都是六維空間中的一個點,於是我們的μ是個6-dim的 vector, 則是Σ個6*6的matrix,發現得到的準確率也才64%

這個分類器表現得很糟糕,是否有辦法將它改進的更好?


Modifying Model

之前使用的Model是不常見的,你不會看到每一個gaussian都有自己的mean 和variance 。比較常見的做法是不同的class 可以使用同一個 covariance matrix

variance 和輸入的 feature size 的平方是成正比的。
所以當feature 的數量很大時,Σ 大小的增長是可以非常快的

在這種情況下,若是給不同的covariance matrix , 會導致model的參數太多;參數多會導致 model 的 variance 過大,因而出現 overfitting ,因此對不同的class 使用同一個 covariance matrix,可以有效減少參數

共用同一個covariance matrix,要怎麼選呢 ? 
Σ 可以直接 使用原本 Σ¹ 和 Σ²的加權

可以看到使用同一個covariance matrix 之後,我們預測的boundary 是一條直線;這樣的model我們也可以稱之為linear model 。

考慮所有的feature,並共用相同的covariance matrix ,原本54%正確率提高為73% ,顯然是有分對東西。但是為什麼做到這樣子,我們很難分析,因為這是高維空間中發生的事情,我們很難知道boundary到底是怎麼切的,這就是machine learing 他fancy的地方,人沒有辦法知道怎麼做,但是machine 可以幫我們做出來。


Three steps of classification

現在來回顧一下classification的三個步驟,與machine learning 是一樣的

  1. define a function set (model) 
    這些req​​uired probability P(C) 和probability distribution P(x|C)就是model的參數,選擇不同的Probability distribution(比如不同的分佈函數,或者是不同參數的Gaussian distribution),就會得到不同的function,把這些不同參數的Gaussian distribution集合起來,就是一個model,如果不適用高斯函數而選擇其他分佈函數,又是一個新的model了
    當這個posterior Probability P(C|x)>0.5 的話,就 output class 1,反之就為 class 2
  2. goodness of function
    對於Gaussian distribution這個model來說,我們要評價的是決定這個高斯函數形狀的mean和variance 這兩個參數的好壞,而maximum likelihood L(μ,Σ)的輸出值,就評價了這組參數的好壞
  3. pick the best function
    找到的那個最好的function,就是使L(μ,Σ)值最大的那组參數,實際上就是所有樣本的mean和variance

找到一個 probability distribution 他可以最大化產生data 的 likelihood

2020-04-30 1 comment
0 FacebookTwitterPinterestEmail
機器學習

機器學習自學筆記04: Gradient Descent

by wenwu 2020-04-20

機器學習自學筆記04: Gradient Descent

今日的課程來自於: https://youtu.be/yKKNr-QKz2Q
參考筆記: https://github.com/Sakura-gh/ML-notes/blob/master/ML-notes-pdf/5_Gradient%20Descent.pdf

Tip 1 : Tuning your learning rates

gradient descent 過程中,影響结果的一個很關鍵的因素就是 learning rate的大小

  • 如果learning rate剛剛好,就可以像下圖中紅色線段一樣順利地到達到loss的最小值
  • 如果learning rate太小的话,像下圖中的藍色線段,雖然最後能夠走到local minimal的地方,但是它可能會走得非常慢,以至於你無法接受
  • 如果learning rate太大,像下圖中的綠色線段,它的步伐太快了,它永遠没有辦法走到特别低的地方,可能永遠在這個“山谷”的口上震盪而無法走下去
  • 如果learning rate非常大,就會像下圖中的黃色線段,一瞬間就飛出去了,结果會造成update参數以后,loss反而會越来越大(這一點在上次的demo中有體會到,當lr過大的時候,每次更新loss反而會變大)

當參數超過3個時,可以將loss function 隨著每個參數的變化視化出來。
可以將每次update 次數作為唯一的一個參數,將Loss 隨著update的增加而變化的趨勢給視化出來

把不同的 learning rate 下,loss每次 update 的變化線畫出來,這樣就可以提醒我們該如何調整learning rate 的大小,直到出現穩定的曲線。


Adaptive Learning rates

顯然每次都手動調整learning rate 很麻煩,因此我們需要有一些自動調整learning rate的方法 
最基本、最簡單的大原則是: learning rate 通常是隨著參數的update 越來越小的

因為在起始點的時候,通常是離最低點是比較遠的,這時候步伐就要跨大一點;而經過幾次更新以後,會比較靠近目標,這時候就應該減小learning rate ,讓它能夠收斂在最低點的地方

舉例:假設到了第t次更新,此時 formula 01
這種方法使所有參數以同樣的方式同樣的learning rate 進行更新,而最好的狀況是每個參數都給他不同的learning rate去更新


Adagrad ( adaptive的其中一種方法)

Divide the learning rate of each parameter by the root mean square of its previous derivatives ( 每個參數的learning rate 都把他除上,之前算出來的微分值得 root mean square)

Adagrad就是將不同參數的learning rate分開考慮的一種算法(adagrad算法update到後面速度會越來越慢,當然這只是adaptive算法中最簡單的一種)

  • 每個參數都分開討論
  • w是function 的某個參數
  • t 代表為第t次的update
  • g^t 為Loss對w偏微分的值
  • σ^t 過去所有微分值得root mean square

Adagrad 他的參數update 其實整體而言是越來越慢的(因為她有加上time depend)


Adagrad 的 contradiction 解釋

Adagrad 的表達式裡面有一件很矛盾的事情:

我們在做gradient descent 的時候,希望的是當梯度值及微分值 g^t 越大的時候(此時斜率越大,還沒有接近最低點)更新的步伐要更大一些,但是Adagrad 的表達式中,分母表示梯度越大步伐越大,分子卻表示梯度越大步伐越小,兩者似乎相互矛盾。

在一些paper 是這樣解釋的: Adagrad 要考慮的是,這個gradient 的反差有多大,假設t=4時,g⁴ 與前面的gradient 反差特別大,那麼g^t 與 下面那像的反差就會比較大,他們的商會將反差的效果體現出來。

造成反差效果,就是gradient 。
gradient 越大,離最低點越遠。在多個參數的情況下是不一定成立的。

做 gradient descent 時,參數update取決於兩件事: 
1. Learning rate 2. Gradient


Tip 2 : Stochastic Gradient Descent

隨機梯度下降的方法可以讓訓練更快速(看一個example 就update 一個參數)。
只考慮一個example 對這個example 的 y 的估計值再減掉他正確答案,再平方,不summation 所有的example 。
Loss function 只考慮一個example。

Gradient Descent vs Stochastic Gradient Descent

  • 傳統的gradient descent 的思路是看完所有的樣本點之後再設立loss function ,然後去update 參數 。
  • stochastic gradient descent 的作法是,看到一個樣本點就update一次,因此他的Loss function 不適所有樣本點的error平方和,而是這個隨機樣本點的error平方。

Stochastic Gradient Descent 與傳統的Gradient Descent 的效果對比如下:

Tip 3 : Feature Scaling (特徵縮放)

特徵縮放,當多個特徵的分布範圍很不一樣時,最好將這些不同的feature的範圍縮放成一樣

可以看到上圖的公式,假設X1 的值都很小,但是X2的時都很大。此時去化Loss 的error surface ,如果對w1和w2 都做一個同樣的變動Δw ,那麼w1的變化對y的影響是比較小的,而w2的變化對y的影響是比較大。

左邊的error surface表示,w1對y的影響比較小,所以w1對loss是有比較小的偏微分的,因此在w1的方向上圖像是比較平滑的; w2對y的影響比較大,所以w2對loss的影響比較大,因此在w2的方向上圖像是比較sharp的

如果x1和x2的值,它們的比例是接近的,那麼w1和w2對loss就會有差不多的影響力,loss的圖像接近於圓形,那由此對gradient descent有什麼好處呢?

對gradient decent的幫助

之前我們做的demo已經表明了,對於這種長橢圓形的錯誤表面,如果不使用Adagrad之類的方法,是很難搞定它的,因為在像w1和w2這樣不同的參數方向上,會需要不同的learning rate ,用相同的lr很難達到最低點。

如果有scale的話,loss在參數w1,w2平面上的投影就是一個正圓形,更新參數會比較容易

而且gradient descent的每次更新並不都是向著最低點走的,每次update的方向是順著等高線的方向(梯度 gradient 下降的方向),而不是徑直走向最低點;但是當經過對input的scale使損耗的投影是一個正圓的話,不管在這個區域的哪一個點,它都會向著圓心走。因此功能縮放對參數更新的效率是有幫助的。

如何做feature scaling

假設有R 個example (上標 i 表示第 i 個樣本點) , x¹ ,x² , x³….. x^r ….. x ^R ,每一筆example 它裡面都有一組feature (下標 j 表示該樣本點的第j個特徵)
對每一個demension i ,都去算出他的平均值以及標準差
對第r個 example 的第 i 個 component ,減掉均值,除以標準差

事實上就是將每一個參數都歸一化成標準常態分布。


Gradient descent 的理論基礎

Taylor Series :
Let h(x) be any function infinitely differentiable around x=x0

從泰勒展開式推導出gradient descent

對於loss 圖像上的某一個點 (a,b) ,如果我們想要找這個點附近loss最小的點,就可以用泰勒展開式思考

假設用一個 red circle 設定點的範圍,這個圓足夠小以滿足泰勒展開的精度,那麼此時我們的loss function 就可以化簡為 :

觀察圖形可知,當向量(θ1-a ,θ2-b) 與向量(u,v)反向 ,且剛好達到red circle 的邊緣時 ( 用 η 去控制向量的長度) ,L(θ) 最小

這就是gradient descent在數學上的推導,注意它的重要前提是,給定的那個紅色圈圈的範圍要足夠小,這樣泰勒展開給我們的近似才會更精確,而η的值是與圓的半徑成正比的,因此理論上learning rate要無窮小才能夠保證每次gradient descent在update參數之後的loss會越來越小,於是當learning
rate沒有設置好,泰勒近似不成立,就有可能使gradient descent過程中的loss沒有越來越小

當然泰勒展開可以使用二階、三階乃至更高階的展開,但這樣會使得運算量大大增加,反而降低了運行效率


Gradient descent 的限制

之前已經討論過,gradient descent有一個問題是它會停在local minima的地方就停止update了
事實上還有一個問題是,微分值是0的地方並不是只有local minima,settle point的微分值也是0
以上都是理論上的探討,到了實踐的時候,其實當gradient的值接近於0的時候,我們就已經把它停下
來了,但是微分值很小,不見得就是很接近local minima,也有可能像下圖一樣在一個高原的地方

總和以上,gradient descent的限制是,它在gradient即微分值接近於0的地方就會停下來,而這個地方不一定是global minima,它可能是local minima,可能是saddle point鞍點,甚至可能是一個loss很高的plateau平緩高原

2020-04-20 0 comment
0 FacebookTwitterPinterestEmail
機器學習

機器學習自學筆記03: Where does the error come from? 認識error 的來源,並且知道如何調整model

by wenwu 2020-03-31

機器學習自學筆記03: Where does the error come from? 認識error 的來源,並且知道如何調整model

今日的課程來自於: https://youtu.be/D_S6y0Jm6dQ

當我們在做機器學習時,使用不同的function set(model) 會得到不同的error,而且越複雜的model不一定在testing會有比較低的error

今天要探討這些error 來自什麼地方,並且如何判斷是哪一種error,並且知道error的來源,就能夠挑選適當的方法來improve model

兩個 Error 的主要來源 : bias & variance


Estimator

理論上,在預測寶可夢CP值中,會有一個最佳的function: f̂(基本上就是寶可夢公司設定的函數)而我們的目標就是從training data 中訓練資料,並且找到最佳的函數 f* (希望他可以很靠近 f̂)

所以f* 就是 f̂的估計量 ( f* is an estimator of f̂ ) 
我們在求f*當然會希望越接近f̂越好,而兩者的差距就是error 
而這error 因兩者導致 1. bias 2.variance

bias and variance of estimator

假設今天我們有一組data X ,data X 的 平均數是: μ,變異數是: σ² 
(E(x)=μ , Var(x)=σ²)

要如何估算μ & σ²
我們生一組 sample 有 N 筆 data ,m為這組sample的平均,但是他不等於μ,但是如果取很多個m,並且取他的期望值就等於μ 。因為我們用m來估計μ ,且m這個估計值是不偏的 (E(m)= μ) 。

在計算而 variance 是 bias 的 ( Var(m)=σ²/N ) ,並且會因為sample size 的大小決定m的變異數。如果今天N比較少,m就會比較分散 ; 如果今天的N比較多,m 就會比較集中。

而估算變異數,先用前面的辦法估算m, 在計算(x^n-m)²的平均值(=S²),但是E(S²)≠σ² ,因為他是biased。 如果N越大的話,σ² 跟 s² 估測之間的差距就會變小。


bias vs variance:

假設我們的靶心是 f̂ ,就是我們目標要找到的函數。
而f*是我們求出來的解;f bar 是所有解的期望值(E(f*)=f bar)。

從右下角的圖可以看到,f̂和 f bar 的距離是bias ,f*和 f bar 的距離是variance。


Parallel Universes

假設在不同的宇宙中,我都去抓十隻寶可夢,抓到的都是不一樣的寶可夢
假設我們用同樣的model ,但是你給他的data 不一樣,那每個function 的f* 就是不一樣。

我們將100個不同宇宙的 f* 都找出來,使用不同的model 來比較

model 較簡單,這一百個model 印出來也會比較集中,也就是variance 較小
model 較複雜,可以發現model印出來已經散開了,也就是variance 比較大

比較簡單的model,他受到不同data 的影像是比較小的
當你給的這個model他的複雜度越來越高的時候,它的variance就會越來越大


Bias

如果是一個大的bias ,我們將所有的 f*平均起來,得到的 f bar 與 f̂ 是有距離的
如果是一個小的bias,將所有的f*平均起來,它的平均值與靶心是接近的

怎麼量bias ?
黑色的曲線: 真實的function f̂
紅色是曲線: 5000次實驗的f* 
藍色是曲線: 5000次實驗f* 的平均(f bar)

黑色線與紅色線之間就是bias 。

可以看到下面的圖比較,左邊是一次式(較簡單的函數),右邊是五次式(複雜的函數)。
如果是簡單的model,它就有比較大的bias 
如果是一個複雜的model,雖然每次找出來的f* 都不一樣,它就有比較小的bias

Why ? 怎麼解釋呢 ? 

如果是簡單的model,它的space 是比較小的。在這個小的範圍裡,它可能根本不包含你的target,所以怎麼樣sample 平均起來都與target 有一段距離。
如果是複雜的model,它的space是比較大的,它比較有可能包含我們的target。但是可能因為給的training data 不夠,所以每次的f*都不一樣,但是平均起來得到的 f bar會在 target 附近,雖然他的variance比較大,但是平均起來的bias會比較小。


Underfitting vs Overfitting

當error 來自 bias 很大,則稱為Underfitting
當error 來自 variance 很大,則稱為Overfitting


怎麼判斷發生Underfitting or Overfitting

Underfitting

如果你的model 沒有辦法fit 你的training 的example ,那麼代表bias 是大的。
假設如果只有幾筆data,而model連這幾筆都沒有fit到,代表bias是大的,這就是underfitting。

Overfitting

如果在training data上得到小的error,但是在testing data 上卻得到一個大的error,代表你的model 的variance比較大,也就是overfitting。

Bias 大 的解決方法

重新設計model , 因為bias 大,表示現在使用的model根本沒有包含你的target。(可以加入更多的feature)

Variance 大的解決方法

  1. More data
    增加收集的data,是有效控制variance的方法,並且不會增加bias。 
    如果不能收到其他資料,可以generate 假的data。
  2. Regularization
    在loss function裡面新增一個term(或增加weight),希望我們的曲線越平滑越好。但是可能增加bias,因為我們調整了function space ,變成只包含比較平滑的曲線,就無法包含f̂,就會使bias 增加。
    所以做regularization的時候,要調整regularization的weight,在variance與bias 之間取得平衡。

Model Selection

在挑選Model時,會在bias 和 variance 之間作一些取捨,我們當然希望bias 小,variance 也小,這樣會使testing data 的error 最小

而在挑選model時,我們當然會挑選testing data 的error 最小的那一項。但是真實的 (private) testing error 通常會比 (problic) testing error 大。testing set 的 error 無法反映到真實的狀況中。

Cross validation

有一個方法可以解決,就是cross validation,我們將training data 分成兩個部分,training set & validation set 。 同樣先用training data 找出最好的function f*,再用validation set 的結果來選擇model。這樣public testing error 就能真實反映在 private error 。

如果覺得資料太少,可以選好模型之後,就將所有的training data 使用在training data ,之後public testing 的 error 一樣能真實反映在 private error 。
通常我們看到testing 後的結果都會想要回去動手腳,但是不建議。因為這樣就會將public testing set 的 bias 考慮進去了,所以會導致在public testing set 上所看到的 error 無法反映在真實狀況中。

N-fold Cross validation

如果在分training set 時分的不好,validation set 出現bias 時怎麼辦? 這時候可以用 N-fold cross validation。

基本上N-fold cross validation,就是將training data 分成 n 組,再輪流當validation set 。最後將每一個model 計算 average error ,就能夠選擇model ,並將training data 合併,使用選好的model 從新training ,在去test 在你的testing set 中。

那原則上就是,如果你少去在意你在 public (testing)set得到的error,就是少去根據它調整你的 model 的話,你往往會在 private set上面得到的差距和 testing set 是比較小的。

2020-03-31 0 comment
0 FacebookTwitterPinterestEmail
機器學習

機器學習自學筆記02: Regression: Case Study for ML

by wenwu 2020-03-27
今日的課程來自於: https://youtu.be/CXgbekl66jc
參考筆記:https://github.com/Sakura-gh/ML-notes/blob/master/1_Introduction.md

這堂課老師用現有數據預測寶可夢的進化後CP值

Scenario: 根據已有的 data 來確定 scenario,我們的 data是 labeled,使用Supervised Learning

Task: 根據我們想要 function 的輸出類型決定 task ,我們預期得到是寶可夢進化後的 cp值,是一個 scalar ,因此使用的是 Regression

Model: 模型的選擇很多,這邊使用 Linear model


回顧一下machine learning 的三個步驟

  1. define a set of function
    定義一個function set (A set of function=Model)
  2. goodness of function
    讓machine可以衡量這個function 好不好
  3. pick the best function
    有一個好的演算法可以挑出最好的function

machine learning 的三個步驟

Step1: Model (function set )

如何挑選一個function 的模型呢? 基本上沒有明確的思路,只能憑經驗嘗試,而這邊使用linear model 。

Linear Model 線性模型

y 代表進化後的cp 值,Xcp 為進化前的cp值,w和b代表未知的參數。
y=b+w * Xcp 這個抽象的是式子就叫做model,是以上這些具體化的function 的集合,即function set 。
實際上這是一種 Linear Model ,但只考慮了寶可夢進化前的cp值,因而我們可以將其擴展為:

Xi: an attribute of input X (Xi is also called feature ,即特徵值)
Wi: weight of xi 
b: bias


Step2: Goodness of Function

參數說明:
x^i: 用上標表示一個完整的object的編號,i表示第i隻可夢(下標表示該object中的component)
y^i: 用 y 表示一個實際觀察到object輸出,上標 i 表示第 i 個 object
(因為打字的關係無法表示清楚,可以參考筆記)

Loss function 損失函數

Loss function 是 一個評估函數,就是一個function 的function,Loss function 實際上就是在衡量一組參數的好壞。

前面的model是自主挑選的,這裡的loss function 也是,最常用的方法就是採用方差和的形式來衡量model的好壞。

input : a function 
output: how bad/good it is

如果 L(f) 越大,說明該function表現得越不好;L(f)越小,說明該function 表現得越好。


Loss function 可視化

下圖是loss function 的可視化,圖中每一個點都代表一組(w,b),也就是對應著一個function;而該點的顏色對應著loss function的結果 L(w,b),顏色越紅表示loss function的值越大,表現的效果越不好 ; 越藍表示loss function 的值越大,表現的效果越好。


Step3: Pick the Best Function

我们已經確定了loss function,他可以衡量我們的model裡面每一個function的好壞,接下来我们要做的事情就是,從這個function set裡面,挑選一個最好的function

將 formulation/equation 寫下的樣子如下:

也就是那個使L(f)=L(w,b)=Loss 最小的 f 或(w,b),就是我們要找的f * 或(w*,b*)

利用線性代數的知識,可以解得這個 closed-form solution,但這裡採用的是一種更為普遍的方法 — — gradient descent(梯度下降法)


Gradient Descent 梯度下降

上面的例子比較簡單,用線性代數的方法可以解;而gradient descent 的方法應用更廣,只要 L(f) 是可微分的,gradient descent 都可以拿來處理這個 f ,找到表現最好的parameters 。

  • 單個參數的問題

假設現在的Loss function 為 L(w) 並且是可微的,我們的目標就是找到能讓 L(w) 最小的 w* ,實際上就是尋找切線L斜率為0的 global minima 最小值發生的點(需要小心local minima 斜率也是0)

  1. 首先隨機選取初始值 w0
  2. 計算 L 在 w=w0 的微分值 dL/dw,就是該點的切線斜率
  3. 如果微分的值為正,就往左找;如果微分的值為負,就往右邊找解。
    w的變化量step size 的大小取決於兩件事
    1. 微分值有多大,如果微分值(斜率)越大表示現在在一個月陡峭的地方,那要移動的距離就越大,反之越小
    2. learning rate(學習率) : η 。 每次踏出的step size 不只取決於現在的斜率,還取決於這個事前就設定好的 η (learning rate)。如果η (learning rate) 比較大,那每踏出一步的時候,參數w更新的幅度就大。
    如果η (learning rate) 設置的大,機器學習的速度也會比較快,但是如果太大,可能就會跳過最合適的global minima 的點。
  4. 每次參數更新的大小是 η * dL/dw ,每次更新的式子如下:

當我們找到微分為0的時候,就會停止了,所以通過gredient descent 找出來的solution 其實並不是最佳解 global minima

幸運的是, 在Linear regression上,是沒有local minima的,因此可以使用gradient descent 。

  • 兩個參數的問題

兩個參數的gradient descent 和一個參數的gradient descent 的步驟一樣。

  1. 首先設定兩個參數的初始值 w0 & b0
  2. 然後分別計算 ( w0,b0 ) 這個點上 L( w0,b0) 對 w 和b 的偏微分
    ∂L/∂w & ∂L/∂b
  3. 更新參數,當迭代跳出時,( wi,bi ) 應為極小值點

實際上,L 的gradient 就是微積分中的那個梯度的概念,即

注意 : 兩個的η (learning rate) 必須保持一致,這樣每次更新座標的step size 是等比例縮放的,保證座標前進的方向始終和梯度下降的方向一致,否則座標前進的方向會發生偏移。


gradient descent 的缺點 :

gradient descent 有一個令人擔心的地方,就是gradient descent 找到 微分等於零的地方,只是local minima ,並不是global minima。
如果今天我們的 Loss function 是坑坑巴巴的,那麼就很難找到global minima,而我們初始值得設立,也會影響到是否能夠找到global minima。

但是在Linear regression 裡,loss function 基本上是convex 的,他是一個凸函數。所以不管初始值在哪裡,根據gradient descent都能夠找到同一組參數。


Overfitting

現在具體對L作w&b的偏微分

根據gradient descent ,我們得到 b=-188.4, w=2.7

我們需要有一套評估系統來評價我們得到的預測值與實際值得誤差,將training data的誤差相加=31.9 , testing data 的誤差相加=35.0

training data 的誤差比 testing data 的誤差較小,也符合常識。

上圖可以發現,有些點不完全適用於我們找得function ,我們該如何重新設計model ,是否有更好的function呢?

以下嘗試不同微度的 function : 分別有二次式到五次式(圖片只放了三次式到五次式)

在gradient descent可以找到best function的前提下(多次式为Non-linear model,存在local optimal局部最佳解,gradient descent不一定能找到global minima),function所包含的項的次數越高,越複雜,error在training data上的表現就會越來越小;但是,我们關心的不是model在 training data上的error 表現,而是model在testing data上的error表現。

可以發現在二次式&三次式 training data 和testing data 的error 越來越小,但是到了四次式&五次式時,training data的error 越來越小 ,但是testing data 的error 卻爆掉了,通常被稱為overfitting。

因此Model 不是越複雜越好,而是選擇一個最合適的model,在本例中,三次式是最適合的model。


物種Xs的影響

之前我們的model只考量了寶可夢進化前的cp值。顯然這是不對的,除了cp值外,還受到物種Xs的影響,因此我們重新設計model

並且將model 寫成一式。


HP值Xhp\height Xh\ weight Xw的影響

考量所有可能有影響的參數,設計出這個最複雜的model

算出來的training error=1.9,但是 testing data=102.3 ! 
這麼複雜的model 很大的機率會發生overfitting


Regularization 解決 overfitting

regularization可以使曲線變得更加smooth,training data上的error變大,但是 testing data上的error變小。

其實regularization就是重新定義step2的時候,重新redesign loss function

原來的loss function 只考慮的prediction的error;而regularization則是在原來的loss function加上了一項λ Σ(wi)² , 這就是法這個model裡面所有的wi 的平方和用 λ 加權。(原先的Loss function是考慮 error,而λ Σ(wi)² 則是考慮smooth )

我們當然希望Loss function可以越小越好。同時,我們也期待參數wi越小 甚至接近於0,就能使function較平滑。如果我們有一個較平滑的function,那當今天我們輸入(input)有變化時,output的變化就不會太大。
也就是說,當wi 越接近0時,輸出對輸入就不會這麼敏感。

那位甚麼剛剛沒有提到bias 這項呢? bias 的大小對function的平滑程度是沒有關係的,因為調整bias只會使function上下移動而已,所以並沒有加入bias 。


如何選擇 λ 值,以取得最好的值

λ值越大,在loss function 中 考慮smooth那一項(λ Σ(wi)²) 的影響力就越大,而我們的function 就越平滑。
從下圖可知,當λ 越大時,training data 上得到的error 就會越大, 因為當λ 越大的時候,我們就越傾向於考慮w的值,而越少考慮error的大小。
但是有趣的是,雖然在training data 上得到的error越大,但是testing data 的error 可能會比較小。

下圖中,当λ从0到100變大的时候,training error不段變大,testing error反而不段變小;但是當λ太大的时候(>100),在testing data上的error就會越來越大

我們喜歡比叫平滑的function,因為它對noise不那麼sensitive;但是我們又不喜歡太平滑的function,因為它就失去了對data擬合的能力;而function的平滑程度,就需要通過调整λ來決定。就像下圖中,當λ=100时,在testing data上的error最小,因此我们選擇 λ=100 。

2020-03-27 0 comment
0 FacebookTwitterPinterestEmail
機器學習

機器學習的情境 Scenario

by wenwu 2020-03-20

機器學習的情境 Scenario
李宏毅老師開放式課程 機器學習01

最近開始聽了李宏毅老師的線上課程 機器學習,為了督促自己能夠好好的學習,開始認真寫筆記。
所以這份筆記並沒有適合的族群,只是督促自己可以好好學習吸收到東西,不要看完線上課程之後,就全部忘光光(笑)。
如果不嫌棄的話,歡迎觀看,如果有任何寫錯的地方,也歡迎指教。
今日的課程來自於: https://youtu.be/CXgbekl66jc
參考筆記:https://github.com/Sakura-gh/ML-notes/blob/master/1_Introduction.md

人工智慧 vs 機器學習

人工智慧 Artificial Intelligence 早在1950年代就有了。人工智慧就是希望電腦和人類一樣聰明。但是在當時並沒有辦法做到。1980 年代以後,有了機器學習的方法。就是讓機器有學習的能力。

人工智慧是我們想要達到的目標
機器學習是想要達成目標的手段
其中,深度學習是機器學習的一種方法。

Hand-crafted rules vs Machine Learning

生物的本能: 假設河狸天生會築水壩。若使用程式語言來描述的話就是 :

if  ”聽到流水聲”  then  "河狸就會開始築堤防" until "聽不到水流聲"

而機器的本能和生物的本能很像,假設今天有一個chat-bot 不用learning or ML ,只能設定規則。

if  "聽到turn off"  then  "關掉音樂"

如果你對機器說: ”Please turn off the music” 或是 ”Can you turn off the music, please? ” 機器就會自動關掉音樂。
但是聽到” Please don’t turn off the music” ,他還是會把音樂關掉。

hand-crafted rules 的弱點:

  • 沒有辦法考慮到所有的可能性,非常的僵化。
  • 無法超越創造者

我們可以用血汗的方式,寫出數以萬計的規則,但只是讓機器看起來"好像"很聰明,但是只要手上有data ,就能夠發展機器學習。(AI不是成千成萬的 if)

Machine Learning = Looking for a Function from Data 
根據我們提供給機器的資料,他能夠尋找出我們要的function

  • speech Recognition
  • Image Recognition
  • Playing Go
  • Dialogue System

機器學習的三個步驟

  1. define a set of function
    訂出一個function set (A set of function=Model)
  2. goodness of function
    讓machine可以衡量這個function 好不好
    訓練資料(讓機器知道好的資料的輸入和輸出長怎麼樣?)
  3. pick the best function
    有一個好的演算法可以挑出最好的function

Learning Map

下圖中,同樣的顏色指的是同一個類型的事情

  • Scenario : 藍色方塊指的是scenario,即學習的情境。通常學習的情境是我們沒有辦法控制的,比如做reinforcement Learning是因為我們沒有data、沒有辦法來做supervised Learning的情況下才去做的。如果有data,supervised Learning當然比reinforcement Learning要好;因此手上有什麼樣的data,就決定你使用什麼樣的scenario。
  • Task : 紅色方塊指的是task,即要解決的問題。你要解的問題,隨著你要找的function的output的不同,有輸出scalar的regression、有輸出options的classification、有輸出structured object的structured Learning…
  • Method : 綠色的方塊指的是model,即用來解決問題的模型(function set)。在這些task裡面有不同的model,也就是說,同樣的task,我們可以用不同的方法來解它,比如linear model、Non-linear model(deep Learning、SVM、decision tree、K-NN…)

以下會在針對這三個部分解釋


機器學習的情境 Scenario

  1. Supervised Learning (監督式學習)
    通常最常用到的方法就是Supervised Learning (監督式學習),但是監督式學習需要大量的資料,使用training data 來找到一個合適的function,讓我們知道輸出和輸入的關係是什麼。
    通常使用監督式學習時,我們會告訴機器所有的正確答案,所以需要大量的標記(label),而缺點是需要大量的人工。
  2. Semi-supervised Learning (半監督式學習)
    當我們手上只有少量的已經標記(labeled)的data,同時又有大量的未標機(unlabeled)data,而這些資料僅限於已標記的種類之內(如要區別貓跟狗的function,未標記的照片僅限於貓和狗的照片)。
    在Semi-supervised Learning (半監督式學習)的技術中,沒有標記的data,對機器學習也是有幫助的。
  3. Transfer Learning(遷移學習)
    與Semi-supervised Learning (半監督式學習)相同,但是我們的未標記(labeled)data不限於已標記的種類。
    Transfer Learning(遷移學習)要解決的問題是,與一堆不相關的data可以帶來甚麼樣的幫助。
  4. Unsupervised Learning(無監督式學習)
    Unsupervised Learning(無監督式學習)顧名思義就是在不提供任何label的情況下,希望機器學習能夠無師自通。也就是說我們給機器大量的輸入,卻不提供輸出,看看在這種情況下機器能夠學到什麼。
  5. Reinforcement Learning(增強式學習)
    在監督式學習中,我們會告訴機器所有的正確答案,並且手把手的教機器也就是Learning from teacher。但是在Reinforcement Learning(增強式學習)中,我們沒有告訴機器正確的答案是什麼,機器只會得到最終的結果是好或不好,這較符合人類真正學習的情境,有別於監督式學習,增強式學習是Learning from critics。
    舉例 : 監督式學習會手把手教導,如果有人說”Hello”,就要回”Hi”,聽到”Bye bye”就回答 “Good bye”。
    而增強式學習會讓機器直接和客人對話,如果客人生氣把電話掛掉的話,機器只能知道這樣做錯了,他並不知道自己錯在哪裡。利用評價來學習。

機器要解決的問題 Task

  1. Regression(迴歸)
    regression 輸出是一個連續數值(scalar)。比如我們想要預測PM2.5,我們現有的資料為前一天的PM2.5,而輸出的則是隔日的PM2.5的數值。
  2. Classification(分類)
    Classification 有分成兩類,一種是Binary Classification(二元分類),另一種Multi-class classification(多元分類)。
  3. Structured Learning(結構化學習)
    Structured Learning(結構化學習)不同於前面兩者,指輸出的是有結構性的東西。像是語音辨識,對機器來說輸入的是一段聲音信號,而輸出的是一個句子。

機器用來解決問題的模型 Model

機器學習的第一個步驟,就是挑選一個function set ,也就是Model 。而在不同的情境&要解決的問題下,可以使用相同的Model。Model又分成很多種 :

  • Linear Model(線性模型)
  • Non-linear Model(非線性模型)
    (deep learning\SVM model\decision tree\K-NN)

2020-03-20 0 comment
0 FacebookTwitterPinterestEmail
SAS

[SAS]迴歸分析 — 模型挑選 Regression feature selection

by wenwu 2020-02-28

[SAS]迴歸分析 — 模型挑選 Regression feature selection

逐步挑選 stepwise \ 向前選取 foreward\ 向後選取 backward

前一篇的 [SAS]線性迴歸 linear regression 介紹了線性迴歸的 基本統計假設 和會需要用到的統計檢定,並且用一個簡單的例子來示範這些基礎概念。

但是當我們有多個自變項(X)的時候,該如何挑選適合的自變項呢?
本篇要介紹三種挑選自變項的方法,分別為 逐步挑選 stepwise \ 向前選取 foreward\ 向後選取 backward

  • 向前選取 (foreward) : 向前選取基本上就是自變項一個一個挑選至模型中。從所有的自變項中,挑選最顯著的優先進入模型中,直到所有顯著的自變項都在模型裡面。(不顯著的自變項不挑選)
  • 向後選取 (backward) : 向後選取和向前選取相反。首先是將所有的自變項都選至模型中,再一步一步篩選最不顯著的變數,一個一個從模型中挑選出來,直到所有在模型中的自變項都是顯著的。
  • 逐步挑選 (stepwise) : 前面的兩種方法都是無法逆回的,就是挑選(or 挑出來)到模型中,確定整體模型顯著之後,就不會再移除了。
    而逐步挑選的方法比較像前兩者的總合體。一開始像向前選取一樣,但是當A自變項選到模型中,若之後再挑選B自變項,可能所有的自變項中 A是最不顯著的,那就會將A 離開模型(這部分像向後選取)。來來回回,一直挑選直到沒有自變項加入(or移除)會使整體模型更好。

逐步挑選 (stepwise) :

最常使用的方法就是stepwise,可能相較於其他兩種方法,stepwise是可逆的,如果選到不好的自變項,可以再刪除。而為什麼有些自變項一開始的顯著的效果較佳,但在後面反而被刪除呢? 
原因是不同的自變項之間可能有相關,而加入其他的自變項之後,第一個自變項反而不適合現在這個模型了,所以就把他刪除。

現在就用SAS 來示範 stepwise ,資料使用上一篇提到的成績 (在這裡) 。
程式加上 selection=stepwise

proc reg data=reg;
model y=x1 x2 x3 x4 x5 /CLB selection=stepwise; 
run;

Step 1 第一步挑選的自變項為X4,X4加入的 R² = 0.6810 , 現在只有一個自變項, 迴歸模型的顯著性檢定 p-value <0.0001 ,表示效果不錯。

Step 2 再來挑選的自變項為X5,X5加入的 R² = 0.7620 ,相較上一步的R² 多了 0.081 ,解釋的變異有增加,代表加了X5至模型中效果更好
迴歸模型的顯著性檢定 p-value <0.0001 ,看到個別迴歸係數的邊際檢定 X4/X5 的 p-value = 0.0080/0.0555 , 雖然 X5 的沒有小於0.05 ,但是值很靠近,並且 R² 有增加,所以保留X5在模型中。

這時所有留在模型中的變數滿足停留允許水準0.15,並且模型外的所有變數不滿足進入允許水準,因此篩選過程結束。

可以寫出模型為 : 
Y= -19.947+0.475* X4+0.452* X5

最後會有一張總結的table (Summary of Stepwise Selection),可以看到每個自變項加入(or刪除)的順序/R²/Partial R²(就是R²的差距)/F value / p-value 等等。

最後附上output的圖,如果不知道怎麼解讀的話,可以回顧上一篇。

比較可惜的是這組資料剛好沒有刪除任何的自變項(不然我也是很樂意講解的),接下來會介紹 foreward\ backward 。


向前選取 (foreward) :

我們使用相同的資料跑 foreward

proc reg data=reg;
model y=x1 x2 x3 x4 x5 /CLB  selection=foreward; 
run;

Step 1 第一步挑選的自變項為X4,和stepwise 的第一步相同。X4加入的 R² = 0.6810 , 現在只有一個自變項, 迴歸模型的顯著性檢定 p-value <0.0001 ,表示效果不錯。

Step 2 再來挑選的自變項為X5,X5加入的 R² = 0.7620 ,相較上一部的R² 多了 0.081 ,解釋的變異有增加,代表加了X5至模型中效果更好
迴歸模型的顯著性檢定 p-value <0.0001 ,看到個別迴歸係數的邊際檢定 X4/X5 的 p-value = 0.0080/0.0555 , 雖然 X5 的沒有小於0.05 ,但是值很靠近,並且 R² 有增加,所以保留X5在模型中。

Step 3 前面兩個步驟都與stepwise一樣,而在第三步中foreward再挑選了一個自變項X1 。X1加入的R² = 0.7893 ,相較上一步的R² 多了 0.0273 ,解釋的變異有增加,但是比之前少一點。
迴歸模型的顯著性檢定 p-value =0.0002,看到個別迴歸係數的邊際檢定 X1/X4/X5 的 p-value = 0.2367/0.0130/0.0455。

沒有其他自變項符合進入模型的0.5顯著水準,所以在foreward 選了 X1/X4/X5 進入模型。

可以寫出模型為 : 
Y= -25.72+0.403*X1+0.441* X4+0.471* X5


向後選取 (backward) :

最後示範的是backward

proc reg data=reg;
model y=x1 x2 x3 x4 x5 /CLB  selection=backward; 
run;

在篩選前,需要觀查每個自變項的顯著性如何? SAS 很貼心幫我們印出了step0

Step 0 可以看到假設所有的變項都進入模型的話 R²=0.8005 , 迴歸模型的顯著性=0.0028。個別迴歸係數的邊際檢定X1~X5=0.2363/0.6092/0.7141
/0.0236/0.0613 。效果最差的是X3,所以第一步會刪掉X3。

Step 1 當X3移除了之後, R² = 0.7976 ,迴歸模型的顯著性=0.0008 (比前一個好)。個別迴歸係數的邊際檢定最差的是X2 , p-value = 0.5138,下一步會移除X2。

Step 2 當X2移除了之後, R² = 0.7893 ,迴歸模型的顯著性=0.0002 (比前一個好)。個別迴歸係數的邊際檢定最差的是X1 , p-value = 0.2367,下一步會移除X1。

Step 3 當X1移除了之後, R² = 0.7620 ,迴歸模型的顯著性<0.0001 (比前一個好),X4 & X5 個別迴歸係數的邊際檢定為0.0080/0.0555。
其實就模型的效果 R² = 0.7620 並且 p-value<0.0001,已經很不錯了。

模型中所剩下的所有自變項都有達到0.1000顯著水準,所以在backward 挑選結束。將X1/X2/X3挑出模型,只剩下X4/X5。

可以寫出模型為 : 
Y= -19.95+0.475* X4+0.452* X5

最後一張表為沒有挑進模型的變數(Summary of Backward Elimination)


該選哪個模型好呢?

三種挑選模型的方法都講完了,但是逐步挑選 stepwise \ 向前選取 foreward\ 向後選取 backward 挑選出代表的自變項不盡相同,我們又該怎麼選呢?

其中stepwise 和 backward 都選了X4/X5 ,而foreward 選了X1/X4/X5。而三種模型挑選的變數,其實就只是在”統計上”具有意義,”實際上”我們可以觀察變數的關係,找出重要的因子加入。

在選擇模型時沒有絕對的對錯,若是 X3 (文法成績)對於 Y (閱讀測驗成績)非常的重要,而整體模型的效果也不差,最後也可以挑選X3進入模型。

沒有最好的模型,只有最適合的模型

希望大家都找到最適合資料的模型。

2020-02-28 0 comment
0 FacebookTwitterPinterestEmail
Load More Posts

近期文章

  • [SAS] Macro Language 基礎內容
  • ccClub 讀書會推薦,免費學python
  • [閱讀心得 #21]你願意,人生就會值得
  • 理想生活,該長怎麼樣子?
  • 多益330 → 多益785 多益成績棕色到藍色證書

近期留言

  • 「peter」於〈多益330 → 多益785 多益成績棕色到藍色證書〉發佈留言
  • 「wenwu」於〈[SAS]存活分析(2) COX regression model〉發佈留言
  • 「joey53111」於〈Statistical Programmer在CRO工作一年的心得〉發佈留言
  • 「丁柏仁」於〈Statistical Programmer在CRO工作一年的心得〉發佈留言
  • 「peter」於〈Statistical Programmer在CRO工作一年的心得〉發佈留言

免費訂閱

不定期更新文章,點一下追蹤就能夠收到最新文章!

一起加入其他 19 位訂閱者的行列

Statistics

  • 10,842
  • 592,929
  • 73
R 線上課程參考

@2019 - All Right Reserved. Designed and Developed by PenciDesign

Wenwu's blog
  • 文章總列表
  • 統計分析
    • R SAS All
      R

      [R]散佈圖與相…

      2019-12-31

      R

      [R]Logis…

      2019-10-31

      R

      [SAS][R]…

      2019-09-27

      R

      [R]Chi-s…

      2019-09-19

      SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      SAS

      [SAS]迴歸分…

      2020-02-28

      統計分析

      [SAS] Ma…

      2026-01-21

      統計分析

      什麼是meta-…

      2024-11-05

      統計分析

      Test-ret…

      2024-06-07

      統計分析

      [SAS]傾向分…

      2020-10-28

  • SAS
    • SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      SAS

      [SAS]迴歸分…

      2020-02-28

      SAS

      [SAS]線性迴…

      2020-02-26

  • R
    • R

      [R]散佈圖與相…

      2019-12-31

      R

      [R]Logis…

      2019-10-31

      R

      [SAS][R]…

      2019-09-27

      R

      [R]Chi-s…

      2019-09-19

      R

      [SAS][R]…

      2019-07-08

  • 機器學習
    • 機器學習

      Unsuperv…

      2021-07-22

      機器學習

      Unsuperv…

      2021-07-12

      機器學習

      Unsuperv…

      2021-05-20

      機器學習

      Unsuperv…

      2021-05-12

      機器學習

      Matrix F…

      2021-04-30

  • 閱讀筆記
    • 閱讀筆記

      [閱讀心得 #2…

      2025-02-05

      閱讀筆記

      [閱讀心得#20…

      2024-10-25

      閱讀筆記

      [閱讀心得#19…

      2024-08-16

      閱讀筆記

      [閱讀心得#18…

      2024-05-10

      閱讀筆記

      [閱讀心得#17…

      2022-01-22