1. 程式人生 > >普通碼農入門機器學習,必須掌握這些數據技能

普通碼農入門機器學習,必須掌握這些數據技能

散點 掃描 如果 商品 它的 朋友 良好的 target 萬能

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

但在那個時候,機器學習還和普通的工程師無緣。開發一個機器學習系統,需要讀個PhD,還得找到一群想法類似、誌同道合的朋友。

現在,機器學習終於更強大也更親民了。

一個普通的軟件工程師,不需要去專門回爐重造讀個研究生,就能運用機器學習開發出非常不錯的系統。

當然,普通的碼農要用好機器學習,還得補一些課,學一些數據技能。InforWorld的這篇文章就講述了一些技巧和策略,能夠幫助開發者們更有效地使用機器學習。

讓數據說話

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

有時候,你甚至能從數學上證明你軟件是正確的。但這在實際問題中往往較難實現,尤其是要考慮人類參與的時候,但如果你有良好的規範,你仍可以執行一個正確的解決方案。

但機器學習不一樣。大體上,你不需要一個嚴格的規範。你有了能表示系統以往經驗的數據,然後需要的是建立一個能夠在未來奏效的系統。

為了測試系統是否真的奏效,你需要在真實情況中評估它的表現。切換到這種“重數據,輕闡述”的開發模式會有很大阻力,但這是你構建機器學習系統的關鍵一步。

學會辨識更優的模型

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

而在比較機器學習的準確性時,問題就不這麽簡單了。

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

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

對你的結論保持懷疑

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

你的結果是否只是統計上的偶然,數據變多後就不再成立?在你評估後情況是否發生了變化,因此之前的決策是否仍有效?

搭建一個內嵌機器學習的系統意味著你需要時刻確認系統依然在做你一開始布置的任務。這種懷疑精神是在變化的現實情況中進行模糊比較所必須的品質。

搭建多個模型以便篩選

在軟件行業有一句老話,你構建的第一版系統是註定要扔掉的。這句話的含義是,直到你實實在在搭建了一個有效的系統之後,你才能充分理解問題從而更好地搭建系統。所以你可以先通過構建一個版本來積累經驗,隨後把學到的經驗應用到設計中,構建出實際的系統。

對於機器學習來說,情形相同乃至更甚。搭建一個系統來練手還不夠,你要做好搭建數十上百個版本的準備。有些版本可能用的是不同的學習方式,或者只是不同的參數設置;另外一些版本則是對問題或者訓練數據完全不同的重述。

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

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

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

無畏於改變

開始你想用機器學習解決的問題情景通常是不對的,甚至可能大錯特錯。因此,可能會遇到根本無法訓練的模型,或是收集不到用於訓練的數據,又或者模型訓練出的最優結果卻價值有限。

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

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

但實際上,我們應該關註的高價值問題是優秀的商品何時上市。只要你知道了這個時間點,就有很多好商品可供選擇,“推薦什麽產品”這個問題就迎刃而解了。

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

“從小處做起”

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

“從大處落筆”

確認你擁有足夠多的訓練數據。事實上,如果可能的話,你要收集10倍於本來預想中所需的數據量。

專業知識仍然很重要

在機器學習中,搞清楚一個模型怎樣決策或預測是一件事,更重要的是搞清楚真正的問題在哪。

就這點而論,如果你已經擁有很多專業知識,那你更有可能提出恰當的問題,從而能夠將機器學習用到一個可行的產品中。要正確判斷哪裏需要仔細檢查,專業知識非常關鍵。

編程能力仍然很重要

有很多工具意圖讓你僅通過簡單拖拽就完成搭建機器學習模型的過程。事實上,搭建機器學習系統的大部分工作跟機器學習或者模型毫無關系,而是在於收集數據以及搭建能夠使用模型輸出結果的系統。

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

盡管不同人在處理數據的代碼上存在一些風格的差異,但彼此間要相互理解並不難。所以開發的能力在很多機器學習的問題中非常有用。

現在有很多工具和新興技術,讓幾乎所有的軟件工程師能夠針對有趣的問題開發出相應的機器學習系統。基本的程序開發技能將會在這個搭建過程中非常有用,但在使用它們的時候你需要多多關註數據。

http://www.cmdmingling.com/post/644.html

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

普通碼農入門機器學習,必須掌握這些數據技能-自學視頻-CMD導航網

普通碼農入門機器學習,必須掌握這些數據技能