KNN演算法 (更正篇)

Posted By Mr. Thursday

上回和各位分享了KNN演算法。不過在演算法的歸類上,我錯把KNN歸類成非監督式學習,英文稱為unsupervised learning。在這邊我重新定義監督式/非監督式學習:監督式學習是說,我們把資料給機器學習的時候,資料會有label,也就是說,每一個資料對應的正確答案,都會給機器看。機器學完以後,會產生一個模型 (model),也就是他學習完的成果,之後遇到新的資料,他就用學習出來的模型來判斷新的東西,輸出新東西該有的正確答案。用之前判斷大頭照是男生或女生的例子,每一張照片給機器學習的時候,除了照片本身,還會讓機器知道每張照片的正確答案 (男生還是女生)。之後機器用他學出來的模型 (model) 來判斷新的照片,接著輸出答案 (男生或女生)。

非監督式學習就有些不同了。在非監督式學習的情況下,機器只能看到資料,但是不知道資料的label,也就是說,資料是甚麼東西並不曉得。機器學出來的模型,是這些資料的pattern,之後遇到新的資料,機器是根據學出來的模型,判斷新的資料比較像以前看過的哪一種資料(比較像以前看過的照片裡面的某幾張照片),而不是說這個資料對應的答案 (男生還是女生)。

KNN演算法因為輸入的資料有正確答案 (每張照片是男生或是女生),而不是沒有答案的資料 (一堆照片)。學習之後也是判斷新資料的正確答案 (男生或女生),而不是僅僅告訴我們這張照片和以前看過的哪幾張照片比較像。所以KNN演算法是一種監督式演算法 (supervised learning)。

另一種學習法的分類是parametric learninginstance-based learning。parametric learning中文稱作參數式的學習,主要是假設觀察到的資料,是由幾個關鍵的參數所決定,機器要做的就是從觀察到的資料中去學到這些參數應該是多少,之後用學到的參數當作模型 (model)來判斷新的資料。instance-based learning則是把所有觀察到的資料都列入考慮,成為學習到的模型,當遇到新的資料的時候,過去所有觀察到的資料或多或少都發揮一些判斷力,讓機器作為根據來判斷新的資料。KNN演算法因為會計算每一個點和新資料點的距離,因此是一種instance-based學習法。其他演算法,譬如說迴歸分析,假設有一條線可以分出男生和女生的資料點,我們要學出這條線 (這條線的斜率和截距),就是根據觀察到的資料點來求出這條直線的斜率以及和座標軸相交的截距,此時斜率截距,就是要學習的參數,也因此稱為parametric learning,和把所有資料點都當成判斷依據的instance-based學習法 (例如KNN) 有所不同了。

最後再提一下reinforcement learning (加強學習法),是先定義每一種情況的好或壞,也就是給機器一套價值觀,之後讓機器自行去學習。機器觀察很多資料以後,作出不同的反應 (「反應」可以是輸出正確答案,或是機器人開車等等),但是不同的反應可能會有不同的結果,結果的好壞就成為回饋 (feedback) 的資料,讓機器學會下次遇到類似的情形如何反應。reinforcement learning、supervised learning、以及unsupervised learning分別是機器學習的三大類別了!

喜歡這篇文章嗎? 分享出去給作者一點鼓勵吧!