普通碼農(nóng)入門機(jī)器學(xué)習(xí),必須掌握這些數(shù)據(jù)技能

其實,機(jī)器學(xué)習(xí)一直在解決著各種重要的問題。比如說90年代中期,人們已經(jīng)開始用神經(jīng)網(wǎng)絡(luò)來掃描信用卡交易記錄,從中找到欺詐行為;90年代末,Google把這項技術(shù)用到了網(wǎng)絡(luò)搜索上。

但在那個時候,機(jī)器學(xué)習(xí)還和普通的工程師無緣。開發(fā)一個機(jī)器學(xué)習(xí)系統(tǒng),需要讀個PhD,還得找到一群想法類似、志同道合的朋友。

現(xiàn)在,機(jī)器學(xué)習(xí)終于更強(qiáng)大也更親民了。

一個普通的軟件工程師,不需要去專門回爐重造讀個研究生,就能運用機(jī)器學(xué)習(xí)開發(fā)出非常不錯的系統(tǒng)。

當(dāng)然,普通的碼農(nóng)要用好機(jī)器學(xué)習(xí),還得補(bǔ)一些課,學(xué)一些數(shù)據(jù)技能。InforWorld的這篇文章就講述了一些技巧和策略,能夠幫助開發(fā)者們更有效地使用機(jī)器學(xué)習(xí)。

讓數(shù)據(jù)說話

在良好的軟件工程實踐過程中,你經(jīng)常能通過推理得到所需的設(shè)計,寫好軟件部分,然后直接且獨立地對這個解決方案進(jìn)行檢驗。

有時候,你甚至能從數(shù)學(xué)上證明你軟件是正確的。但這在實際問題中往往較難實現(xiàn),尤其是要考慮人類參與的時候,但如果你有良好的規(guī)范,你仍可以執(zhí)行一個正確的解決方案。

但機(jī)器學(xué)習(xí)不一樣。大體上,你不需要一個嚴(yán)格的規(guī)范。你有了能表示系統(tǒng)以往經(jīng)驗的數(shù)據(jù),然后需要的是建立一個能夠在未來奏效的系統(tǒng)。

為了測試系統(tǒng)是否真的奏效,你需要在真實情況中評估它的表現(xiàn)。切換到這種“重數(shù)據(jù),輕闡述”的開發(fā)模式會有很大阻力,但這是你構(gòu)建機(jī)器學(xué)習(xí)系統(tǒng)的關(guān)鍵一步。

學(xué)會辨識更優(yōu)的模型

比較兩個數(shù)字的大小是很簡單的事情。假設(shè)它們都是有效的值(不是非數(shù)字類型),你只需要判斷哪個值更大,就結(jié)束了。

而在比較機(jī)器學(xué)習(xí)的準(zhǔn)確性時,問題就不這么簡單了。

你要比較的模型有大量的輸出結(jié)果,而沒有一個明確的答案。構(gòu)建機(jī)器學(xué)習(xí)系統(tǒng)所需的一項非常基本的能力,就是通過觀察兩個模型之前制定的決策,決定哪個模型更符合你的問題情境。

做出這個判斷,你需要將這些數(shù)據(jù)做整體考慮而不是某個單一的值。這通常也需要你能夠很好地進(jìn)行數(shù)據(jù)可視化,比如說使用柱狀圖,散點圖和許多其他相關(guān)的數(shù)據(jù)表示方式。

對你的結(jié)論保持懷疑

與判斷哪個模型更好一樣,對你自己的結(jié)論保持懷疑同樣很重要。

你的結(jié)果是否只是統(tǒng)計上的偶然,數(shù)據(jù)變多后就不再成立?在你評估后情況是否發(fā)生了變化,因此之前的決策是否仍有效?

搭建一個內(nèi)嵌機(jī)器學(xué)習(xí)的系統(tǒng)意味著你需要時刻確認(rèn)系統(tǒng)依然在做你一開始布置的任務(wù)。這種懷疑精神是在變化的現(xiàn)實情況中進(jìn)行模糊比較所必須的品質(zhì)。

搭建多個模型以便篩選

在軟件行業(yè)有一句老話,你構(gòu)建的第一版系統(tǒng)是注定要扔掉的。這句話的含義是,直到你實實在在搭建了一個有效的系統(tǒng)之后,你才能充分理解問題從而更好地搭建系統(tǒng)。所以你可以先通過構(gòu)建一個版本來積累經(jīng)驗,隨后把學(xué)到的經(jīng)驗應(yīng)用到設(shè)計中,構(gòu)建出實際的系統(tǒng)。

對于機(jī)器學(xué)習(xí)來說,情形相同乃至更甚。搭建一個系統(tǒng)來練手還不夠,你要做好搭建數(shù)十上百個版本的準(zhǔn)備。有些版本可能用的是不同的學(xué)習(xí)方式,或者只是不同的參數(shù)設(shè)置;另外一些版本則是對問題或者訓(xùn)練數(shù)據(jù)完全不同的重述。

舉例來說,你可能會發(fā)現(xiàn)在你想預(yù)測的信號之外,還可以用其它的替代信號來訓(xùn)練模型。這樣,你可能會有十倍于原始的數(shù)據(jù)來訓(xùn)練。或者你可以去嘗試用另一種方式來重述問題,使其變得更易解決。

這個世界瞬息萬變。比如說你搭建模型檢測欺詐行為的時候,即便你已經(jīng)搭建了一個成功的系統(tǒng),仍需要在未來適時做出改變。因為騙子會識別出你的漏洞,從而改變它們的行為。你將會被迫采取新的對策。

所以為了取得成功,你需要搭建一系列用來丟棄的機(jī)器學(xué)習(xí)模型。不要寄希望于有一個永久適用的萬能模型。

無畏于改變

開始你想用機(jī)器學(xué)習(xí)解決的問題情景通常是不對的,甚至可能大錯特錯。因此,可能會遇到根本無法訓(xùn)練的模型,或是收集不到用于訓(xùn)練的數(shù)據(jù),又或者模型訓(xùn)練出的最優(yōu)結(jié)果卻價值有限。

重新審視這個問題,可能會使得一個簡單的模型就具有很高的價值。

我曾經(jīng)遇到過一個有關(guān)推薦商品的問題,哪怕用上一些高大上的技能,想獲得一點微博的收益也很難。

但實際上,我們應(yīng)該關(guān)注的高價值問題是優(yōu)秀的商品何時上市。只要你知道了這個時間點,就有很多好商品可供選擇,“推薦什么產(chǎn)品”這個問題就迎刃而解了。

重新定義問題,讓整個項目更容易解決了。

“從小處做起”

將你的原始系統(tǒng)應(yīng)用到一些簡單情形或者是一個子問題上,是有很價值的。這會讓你集中精力獲得該問題領(lǐng)域的專業(yè)知識,并在搭建模型的過程中得到同伴的支持。

“從大處落筆”

確認(rèn)你擁有足夠多的訓(xùn)練數(shù)據(jù)。事實上,如果可能的話,你要收集10倍于本來預(yù)想中所需的數(shù)據(jù)量。

專業(yè)知識仍然很重要

在機(jī)器學(xué)習(xí)中,搞清楚一個模型怎樣決策或預(yù)測是一件事,更重要的是搞清楚真正的問題在哪。

就這點而論,如果你已經(jīng)擁有很多專業(yè)知識,那你更有可能提出恰當(dāng)?shù)膯栴},從而能夠?qū)C(jī)器學(xué)習(xí)用到一個可行的產(chǎn)品中。要正確判斷哪里需要仔細(xì)檢查,專業(yè)知識非常關(guān)鍵。

編程能力仍然很重要

有很多工具意圖讓你僅通過簡單拖拽就完成搭建機(jī)器學(xué)習(xí)模型的過程。事實上,搭建機(jī)器學(xué)習(xí)系統(tǒng)的大部分工作跟機(jī)器學(xué)習(xí)或者模型毫無關(guān)系,而是在于收集數(shù)據(jù)以及搭建能夠使用模型輸出結(jié)果的系統(tǒng)。

于是,擁有良好的編程技能尤為重要。

盡管不同人在處理數(shù)據(jù)的代碼上存在一些風(fēng)格的差異,但彼此間要相互理解并不難。所以開發(fā)的能力在很多機(jī)器學(xué)習(xí)的問題中非常有用。

現(xiàn)在有很多工具和新興技術(shù),讓幾乎所有的軟件工程師能夠針對有趣的問題開發(fā)出相應(yīng)的機(jī)器學(xué)習(xí)系統(tǒng)。基本的程序開發(fā)技能將會在這個搭建過程中非常有用,但在使用它們的時候你需要多多關(guān)注數(shù)據(jù)。

掌握這些新技能的最好方式,是從現(xiàn)在開始動手搭建一些有趣的東西。

原文鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容