天天看點

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

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

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

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

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

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

讓資料說話

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

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

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

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

學會辨識更優的模型

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

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

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

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

對你的結論保持懷疑

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

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

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

搭建多個模型以便篩選

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

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

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

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

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

無畏于改變

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

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

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

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

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

“從小處做起”

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

“從大處落筆”

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

專業知識仍然很重要

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

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

程式設計能力仍然很重要

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

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

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

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

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

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

繼續閱讀