2016年7月8日 星期五

Machine Learning 筆記


這篇文章參考 這篇blog, 其中javascript implement的部份也可以 參考原文章。
內容涵蓋:
1. K-Nearest-Neibor (KNN) Algorithm
2. K-means clustering
3. Genetic algorithm (GA)



1. KNN: K-Nearest-Neibor Algorithm

feature map中最 靠近指定點的K點中,某個分類最多的話,猜測該指定點屬於該分類。

比如說,若你想知道你的所在地是德國還是奧地利的領域,則先選定一個數字K,假設K是5,則你找出離你最近的5個人,若其中有3個德國人,2個奧地利人,因為德國人比較多,所以可以猜測你身在德國。

在這個例子中,因為我們己經知道所有鄰居的國籍,所以這種方法是屬於supervised 方法。

這個方法的限制:

不同分類的data應該要彼此分開,越分開則分類的效果越好。比如說如果今天社區內德國人跟奧地利人很平均的居住在區域內,那這個方法推測的效果很不準;但如 果社區內有明 顯的德國圈、奧地利圈,那這個方法推測的分類就會很好。

另一個限制是當data很多的時候,計算量會非常的大,因為必須一個個去計算距離。可以透過資料的快篩來減少需要計算距離的資料量。


2. k-means clustering

通當我們不會知道取得的data有哪些分類,我們可能只能嘗試從data中擷取出一些feature,並將這些資料作分 群 。

演算法:

1、將資料畫在feature map中,新增k個"分類中心"(cluster centroid)任意分佈在feature map內
2、每筆資料將之分類,取決於這 筆資料離哪一個分類中心最近。
3、屬於同類的資料算出其中心,並將分類中心移到新的這個中心。
4、若中心有位移,回到步驟二

檢視演算法的結果

首先我們會面對到演算法的結果可能落在local optima,意思是演算法可能收 斂在一個相對穩定的結果,但並不是最好的結果,因為k-means clustering這個方法是data-driven的演算法,根據資料 群們本身的資料而有的結果,演算法給我們一個還不錯的答案,但未必是我們要的標準答案。要解決這個問題,其一是在每次穩定的時候,給予一個微調讓演算法再收斂一次看是否得到相同的結果。

第二個方法是組成一個"委員會",檢視若這個演算法重覆執行很多次時,是否可以得到一致的結果。但這個方法需要演算法可以快速的執行完一次收 斂才合適。

其他應用:

想像你剛開了一個電子商務的網站,你想要分析作用者的行為,作為改善網站的 依據,於是你開始收集每個使用者造網這個網站的行為,每個使用者會有每次觀看的網頁數,買的物品的價格,購買的數量等等feature, 之後就透過k-means 去作分 群,可以得到其中一個族群他的觀看網頁數很少,3-5頁(估且稱之為 window shopper),另一個族群是瀏覽了大量的分頁,但是每次下手都是單價高的產品(這個 族群叫作…估且稱作功課作足一次攻頂的消費者),有了這些資料,商家就具體的知道自己的客群是什麼了,就可以在網站上針對這不同的客群去作加強的行銷。

3. Genetic Algorithm

這個演算法是受生物演化論的啟發, 這個演 算法的概念是要給machine 一個演進的方法,朝我們希望的方向。

直接用例子來說明:
我們想要讓電腦印出 Hello,World,但是我們不告訴電腦要確切的打出哪些字,所以我們要給電腦一些限制以及提示。 限制是電腦印出的字要 5個字元,然後逗號,然後再5個字元。而提示是我們會 訂一個標準(cost function)去檢示電腦提出的字串得到幾分,如果字母越接 近,cost function就越接近零,越靠近標準答案。比如說,Hello, Worlf 會得到 2分,因為worlf的最後一個字f 跟標準答案 d 在字母表上差了 2個位置。

演化與淘汰 (物競天澤)

Genetic Algorithm 每一次的iteration都叫作一個世代(Generation),而這個世代中的成員會被淘汰(取cost function表現最差的)。而其他成員會"交配"(Mate),並產生下一個世代。比如說以下兩個成員若進行交配,估且將交配這個行為定義為前 5個字元與後5個字元作交換
  • Parent
    • Hello, wprld (cost function = 1)
    • Iello, world (1)
  • Child
    • Hello, world (0)
    • Iello, wprld (2)
可以得到演化的結果,可能會產生cost function較好或較差的下一世代。

變異(Mutex)

跟自然界的演化一樣,會有變異/突變產生,而變異的產生在演化中的角色非常的重要,因為變異很可能產生有能力適應自然的下一代。在程式中的實現,就是每幾個世代中隨機產生突變。比如說aellp, wprld (9)的下一個世代突變為 Hello, wprld(1)。變異的產生有機會將世代脫離local optima的情況。