聊聊傳統演算法系統與機器學習系統的一點不同
傳統演算法系統,是已經給定了一個演算法處理邏輯,那麼你給我的輸入,我按照這個演算法處理邏輯進行處理,就能得到相應的輸出。如下圖:
而機器學習系統,是給定我們數據的輸入輸出(這裡先指監督學習),讓我們從這些數據中學習出演算法,以後,通過這個學習到的演算法進行輸入的判斷,得到輸出。如下圖:例子:
在我們傳統的演算法系統中,我們的要求是,給定一個數n,讓我們輸出1+2...+n的結果。
我們很容易由等差數列求和公式得到演算法程序如下:
# include <stdio.h>double get_sum(int n){ double ans; ans = n(1+n)/2.0; //等差數列求和公式 return ans;}int main(void){ double res; int n; printf("please input an integer:
"); scanf("%d",&n); res = get_sum(n); printf("%lf
",res);}
根據上面演算法流程,我們來了一個數n,直接用程序跑一下,就能得到結果!
那我們的機器學習系統是否也能夠直接編寫判斷邏輯演算法呢?
用一個機器學習最經典的入門例子來解釋,手寫數字識別。
比如我們要判斷一個手寫數字是幾。按照我們的思維邏輯,我們需要寫10個if else來分別判斷是不是0,是不是1,....是不是9
比如我們判斷是不是2,就會有下面判斷
if(滿足是2的條件){ printf(這個手寫數字是2);}else{ printf(這個手寫數字不是2);}
恩,看起來我們好像完成任務了,但是,if(滿足是2的條件)
這個滿足是2的條件怎麼寫呢?
我們先看看2是什麼樣子,如下:
我們可以根據這個標準的2和其它數字的特徵不同來寫嘛,比如2最下面是一行橫線,2的中間有個彎弧,等等。
哈哈,看似解決問題了,其它的數字類似,我只要找到和其它數字的不同,就能找到if()中的滿足是數字幾的條件。
那麼豈不是也就滿足要求了,為什麼還需要機器學習演算法呢?
問題沒有這麼簡單。我們真正碰到的手寫數字2,根本就不會有上圖2這麼標準,各種各樣的都有,比如下圖:
上圖這些數字,我們人眼觀察還是能夠大部分認識是2,但是它跟我們剛剛說的滿足2的特徵嗎?上面好幾個都沒有最下面一行是橫線,等等那麼就需要我們的機器學習演算法,自動的學習到裡面的特徵,從而構建出一個機器學習模型,進而幫助我們判斷一個手寫數字是否為2.和判斷一個手寫數字是幾。
推薦閱讀:
※formatR代碼自動化排版
※【機器學習】Bootstrap詳解
※Kaggle比賽的終極武器: 模型融合(Model Ensemble)
※一篇文章看懂數據挖掘,大數據,機器學習
※【機器學習】如何做出一個更好的Machine Learning預測模型