聊聊傳統演算法系統與機器學習系統的一點不同

這裡就簡單聊聊傳統演算法系統與機器學習系統的一點不同。

傳統演算法系統,是已經給定了一個演算法處理邏輯,那麼你給我的輸入,我按照這個演算法處理邏輯進行處理,就能得到相應的輸出。如下圖:

而機器學習系統,是給定我們數據的輸入輸出(這裡先指監督學習),讓我們從這些數據中學習出演算法,以後,通過這個學習到的演算法進行輸入的判斷,得到輸出。如下圖:

例子:

在我們傳統的演算法系統中,我們的要求是,給定一個數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預測模型

TAG:机器学习 | 自然语言处理 | 数据挖掘 |