作者:Burak Kanber
翻譯:王維強
原文:http://burakkanber.com/blog/machine-learning-in-other-languages-introduction/
我熱衷於機器學習算法,並在該領域教授過一些課程,也在一些研討會中做過報告,對該課題很着迷。但是像所有的技術一樣只學些皮毛是遠遠不夠的,想做好任何事情,都需深入實踐。
我自己恰巧是個PHP和Javascript開發者,在這兩個技術領域內也教授過一些課程,而且像所有的普通程序員一樣我在Ruby,Python,Perl和C方面也有些經驗,但是更偏愛PHP和JS。
每當我說起蒂達爾實驗室的機器學習算法是用PHP實現的,大家就會嘲諷地看着我說那怎么可能。簡單來說,機器學習算法可以用任何語言來實現,很多人並不介意通過草圖寫算法來了解基本原理,然后使用一些Python庫應付他們的工作,可是並沒有真正領悟黑箱中正在發生的過程。另外一些人只是學術性的了解機器算法,使用Octave或者Matlab解決問題。
通過本系列文章,我將會教會你機器學習算法的基礎原理並且使用Javascript作為算法實現的工具,而不是用Python或者Octave作為范例語言。原本我打算用多個語言(PHP,JS,Perl,C, Ruby)寫這些文章,但最終選擇Javascript是因為以下原因:
- 如果你是個web程序員,應該對JS已經有所了解。
- JSFiddle是一個很好的工具,能夠把可運行的代碼嵌入到我的文章中(C或Perl就很難這樣做了)。
- 有些人請求我着重在一個語言上講述。
在我於頭腦中用Javascript寫這些文章之時,也請你自己選擇一門語言預寫一些例子作為家庭作業!實踐決定你的掌握程度,用幾種語言數次編寫同樣的算法真的能幫你更好地了解這些范例。
使用像PHP或Javascript這樣的語言編寫機器學習算法是完全有可能獲得很好的執行表現的。我提倡用更多的其他語言實現機器學習算法是因為這樣做能更好地幫你從草圖中了解基本原理,並且能讓你統一自己的背景知識,不至於在PHP的應用程序中還要寫Python腳本處理任務,你完全可以用純PHP來實現,而不是被迫切換到其他語言。
好吧,很多時候,的確有很多事情不能用PHP或者Javascript來解決,比如很多高級算法中使用到的大型矩陣運算。實際上你也能用JS進行矩陣運算,只是差別在於“能做”還是“高效地做”,NumPy或者Matlab的優勢不在於他們能做矩陣運算,而是他們使用了優化的算法能高效地做矩陣運算,這些優化的運算方法我們不會親自去做,除非致力於計算機線性代數的研究。這也不是我的強項,所以我們只着重於機器學習,不要求高級的矩陣數學知識。你當然可以嘗試慘烈地直面矩陣操作,但是會止步於低效的系統。作為學習當然很好,只是我不鼓勵這樣做——我只在產品級的環境下才關注這方面的事。
我們將要關注的算法既可以用矩陣來解決,也可以不用矩陣。我們將會在這些算法中使用迭代的方法,當然大多數算法也可以用線性代數來描述。解決問題有多種途徑,我鼓勵大家去使用線性代數的方法,但是那不是我的強項,所以我會使用其他的方法。
我的這個系列文章將覆蓋: