機器學習是計算機科學的一個領域,它探索「學習」與演算法的建構,從資料中學習,並依此做預測。機器學習涵蓋了模式辨認(pattern recognition)以及人工智慧中的計算式學習理論。它被用在許多應用中,像是自動駕駛車,有效率網頁搜尋,語音辨識…等。
原文連結http://opensourceforu.efytimes.com/2016/02/an-introduction-to-machine-learning/
機器學習介紹
機器學習是計算機科學的一個領域,它探索「學習」與演算法的建構,從資料中學習,並依此做預測。機器學習涵蓋了模式辨認(pattern recognition)以及人工智慧中的計算式學習理論。它被用在許多應用中,像是自動駕駛車,有效率網頁搜尋,語音辨識…等。
編程(programming)基本上是告訴電腦要做什麼。傳統的編程習會假設寫程式的人已經理解問題,而且用這個理解,寫出一串清楚的指令來解決 某特定問題或完成特定任務。這類的例子非常多,事實上,絕大多數的程式都是這樣寫的,有著清楚可預期的輸入、輸出,與優美的演算法處理。例如,排序數字, 在文檔中移除某個字串,複製檔案…等等。
然而,有某些種類的問題,傳統編程或問題解決定方法不是這麼好使。例好,假設你有 50,000 個文件,必須分類成運動、商業、娛樂,又不能人工一個個處理。又例如,在上千個圖片裡找到特定的物件。在後面這個例子,物件可能是不同角度的相片,或是在 不同光線的條件下。你要如何分辨哪些相片有這個物件?另一個非常有用的例子是建立一個線上付款通道(online payment gateway)且希望防止詐欺交易。其中一個方法是辨認出潛在詐欺交易的跡象,在交易完成前啟動警報。這樣,你要如何準確預測而避免不必要的警報?
你可以簡單地說,這是不可能寫出非常準確的演算法來對付上述每個問題。我們能做的是,建立一個系統像人類專家一樣地工作。一個醫生可以檢驗報告看出病人生了什麼病。醫生的準確率不會是 100%,他多數時間會是正確的。沒人用程式寫出一個醫生,他這些知識來自學習與經驗。
我們需要的是一個系統能從經驗中學習,就算我們無法編程它叫它做特定的任務。我們做的是,給它看大量的範例,電腦是被編程為從大量的資訊中學習。在 它完成學習之後,就可以預測或做一些任務。這就是機器學習。醫生的例子有一點點與真正的機器學習不一樣,機器學習的核心思想是機器學習會有大量資料中學 習,而且會從經驗中改進。
機器學習與數學
許多機器學習演算法基本上企圖逼近一個未知的數學函數,而且絕大多數這些演算法本質上就是數學。因為資料有隨機性與不確定性,我們必須應用來自機率 與統計的概念。事實上,機器學習演算法非常依賴統計的概念,以致許多人認為機器學習該叫統計學習。離開統計,另一個被用到重要的數學分支是線性代數。矩陣 的概念,系統方程組的解,演算法的優化,都在機器學習中佔有重要地位。
機器學習與大數據
近來,機器學習與大數據走得很近。大數據指的是巨量的已存資料,而且是有意義地被使用。看一些例子來了解我說的。假設你已在交易平台上收集顧客交易 資料,這資料的量可以輕易地到達被認為是大數據的量,還有一些其他你存下的資料。現在,這些資料的用途是檢查顧客定單的狀態,計算商務會計上的盈虧,以及 其他技術或操作上的日常業務。除了這些,商業上也常想以獨特的方式利用這些資料。有些人對這分析使用特定的字。雖然直接地計算可以得到盈虧、總支出、總庫 存等答案,但稍進一步的資料操作會切片與切塊讓訊息顯現。我們依然會追求基本報表的背後訊息,辨認出不顯見的模式。我們也會想要建立預測模型。
不同的機器學習演算法
現在有兩種不同種類的演算法,受監督學習與無監督學習。受監督學習指的是,資料給序標籤,如下例所示:
天 | 中午12點時溫度 | 風速 | 風向 | 下午是否下雨 |
---|---|---|---|---|
1 | 30度C | 3 m/s | 東 | 是 |
2 | 35度C | 10 m/s | 西 | 否 |
3 | 37度C | 7 m/s | 東北 | 否 |
4 | 34度C | 8 m/s | 北 | 否 |
假設我們必須預測下午是否下雨,使用溫度及風的資料。是否下雨記錄在「下午是否下雨」那一行,那就是標籤。這裡的溫度,風速、風向是預測子(predictor)或說是輸入變數,下午是否下雨則是輸出變數。
演算法從這樣的資料學習,叫做受監督學習演算法。有些資料是自動萃取/自動產生的,例如機器的日誌,多數需要人工加標籤,這樣增加資料獲得的成本。
受監督學習演算法的例子有「線性回歸演算法 linear regression algorithms」、「貝氏演算法 Naïve-Bayesan algorithms」「K近鄰演算法 k-nearest neighbour」…等等。
如果資料沒有標籤,它變成一個無監督學習演算法。例如:「K平均分群 k-means clustering」、「主成份分析 principal component analysis」…等等。
我們也可以用另一個邏輯來分類機器學習演算法,分成回歸演算法或是分類演算法。回歸演算法是指演算法真的預測一個數字,像是接下來幾天的溫度,股市收盤指數…等等。
分類演算法則是把輸入分類,例如是否下雨、股市漲還是跌、它是疾病 x、疾病 y 還是疾病 z……等等。
機器學習的工作
要理解與讚嘆的是,機器學習演算法基本上是數學演算法,我們可以用任何喜歡的電腦語言來實作。例如 C、PHP、Java、Python 甚至是 JavaScript。但我個人喜歡的是統計語言 R。在不同的語言有許多熱門的機器學習模組或函式庫,Weka 是強大的機器學習與資料採礦的軟體,它用 Java 寫的,而且很熱門。Scikit-learn 在 python 開發者中很熱門。Orange Machine Learning Toolbox 也是 pyhon 可用的工具。R 語言有許多非常基本的統計套件與模組,也有很多不同的套件像 e1071、Randomforest、Ann、…等依賴在不同的機器學習演算法上。Apache Mahout 是可拓展的機器學習演算法,通常用在大數據習統。Weka 非常強大,但它在商業使用上有授權問題,你可以用 Java-ML (Java machine learning algorithm)。雖然開發活動看起來停子了,它的函式庫仍值得一試,它擁有足夠的文件與教學讓人易於上手。我會建議有進一步需要的人可探索「深度學 習演算法 deep learning algorithm」
原文作者
Mahesha Hiremath
The author is an independent data analytics consultant from Bengaluru. He is building a platform for electric vehicles-Project Vidyut. Project Vidyut is a not-for-profit initiative for promoting electric vehicles, and also to build open source electric vehicles. He can be reached at mahesha-at-projectvidyut-dot-org and tweets with handle@MaheshaHiremath.
Connect with him: Website
超譯系列是練習翻譯的技巧,順便分享給大家參考的資訊相關的資訊。
Exercise to translation. Give advise to me if something wrong.
譯者/translator: Ricky Teng
聯絡/contact: ricky-dot-teng-at-gmail-dot-com