1. 程式人生 > >閒扯淡之機器學習

閒扯淡之機器學習

畢竟是閒扯淡了,我就開始瞎扯吧。
首先,我們來說一下機器學習的概念,我個人認為概念對我們理解一個問題(或者技術、術語等)都有很大的幫助,它可以幫助我們對一個事情更快、更準確的瞭解。
機器學習,又稱Machine Learning (ML),其定義為:對於某類任務T和效能度量P,如果計算機程式在T上以P衡量的效能隨著經驗E自我完善,那麼就稱這個計算程式從經驗E中學習(Tom Mitchell的觀點)。
“一千個人有一千個哈姆雷特”,學術界對於ML的定義也有很多種。學術界的定義往往更急晦澀難懂(學術界的老兄饒命),我們來看看窗戶(Microsoft)公司的定義吧。窗戶公司認為機器學習是資料科學技術,該技術能夠幫助計算機從現有資料中學習,以便預測未來的行為,結果和趨勢。
從我個人的角度來理解ML,我感覺機器學習是從歷史資料中學習規則的過程。ML適合處理複雜模糊的、人類很難去歸納總結,並且很難用程式語言描述的問題。(其實我們想想也就明白了,如果通過幾個簡單的if語句就可以解決的問題,何必勞駕ML這哥們呢,所以在實際生產環境中,如果我們的問題可以相對簡單的人為整理歸納,就沒有必要殺雞用宰牛刀。)例如,垃圾郵件分類的例子(這個例子估計被用爛了,這哥們已經快成為程式語言界的“Hello World!”了,我估計後面在說樸素貝葉斯分類的時候回具體說一說),相信大家每天或多或少的會收到郵件,一份郵件的內容可多可少,內容千奇百怪,如何區分一份郵件是垃圾、狗屎,shit呢?我個人感覺這應該是一個相對複雜的問題,可能大哥你會說——垃圾郵件很好區分啊,我一眼就可以看出(老哥如果你真是這麼認為的我給你跪了)。垃圾郵件可能我們一眼就可以看出,但是每天無數封的郵件遊走在網際網路上,靠人工標註是否是垃圾郵件基本是不可能的,並且考慮到隱私問題,也不太可能人工標註。既然不能夠人工標註,那智慧走自動化標註,自動化標註就需要有一個標準去確定郵件是否是垃圾、狗屎,shit,這個標準或者準則就是ML老哥完成的事情。
對於工業界人士來講(學術界也已經蠢蠢欲動了,不相信你就看看國內很多高效【這兩字是故意的】的老溼們都在幹什麼),技術重在落腳,也就是我們常說的應用到實際中去。對於從事挨踢(IT)的人經常對=會掛在嘴邊的——什麼什麼技術,技術這個詞從概念的角度來說就比較廣泛了,我們就狹隘的從計算機這個一個行業來理解吧。技術的發展都會經過萌芽、繁榮、穩定、沒落的階段,不同技術之間的不同點主要還是在於每一個時間的長短不同(更確切的說大家是否還在喜歡它,如果喜歡大家就會不斷的完善它,如果不喜歡它就會被打入冷宮,想想都可憐)。說道這裡我想問大家一個問題:推動技術的發展的主要因素是什麼?(先不要說話,讓小弟先逼逼幾句)我的觀點是資本,說的更加通俗一點就是money(毛爺爺,華盛頓等),具體原因有空在與大家分享。現在我們別的不說,就從我們國家目前的形式來看,資本在不斷的炒作誇大各種新的技術,從雲技術到區塊鏈,又到人工智慧。我逼逼這麼多並不是感覺不好,任何事情都有兩面性,這種炒作誇大對技術的發展的確有很大很大的推動力,但是它欺騙很多人,欺騙了大家錢財(由於瘋狂的炒作導致相對應的股票瘋長,部分股民沒有正確的理解被閹割了財產),感情(杞人憂天的思考未來)。(剛才說的只是我的欺騙錢財和感情,只是我的片面之言,並且這裡面的原因有很多種,大家勿噴)既然這是閒扯,並且主題是人工智慧,我就說一下我的觀點(一下非扯淡,只是自我感覺):從目前來看機器學習,深度學習等人工智慧受到了廣泛的關注,不可否認的是已經有很多智慧產品問世,但是這與我們想象中的人工智慧還有很大差距,還有太多的路要走。
既然我們在說技術,何必扯那麼多不相關的內容呢?我們來說說技術吧(想想就感覺自己是程式碼的搬運工)!說這麼多的目的就是在於,我們不能為了用機器學習而去用,我們應該根據自己的實際情況選擇應用。對於是否選擇使用機器學習,可以從以下幾個方面考慮:

  1. 你是否真實需要使用ML;
  2. 需要解決的問題是否清楚明確;
  3. 是否擁有足夠數量的資料;
  4. 需要解決的問題本身是否存在規律性;
  5. 你的資料是否可以明確表示;
  6. 是否有明確的成功失敗請假標準。

對於ML到底是什麼有很多不同的觀點(哎,到底是什麼對於我們們影響不是太大吧,我們更關係的應該是能不能聽我們的話),我更偏向於認為ML是一門技術,是技術基本上都有自身的優勢和劣勢。合理的確定需要解決的問題,是ML專案成功的重要基石,若果一個ML專案開始之前就存在大量的問題,例如,目標不清、資料不足、資料相關性低等,就不可避免會走向流產(小寶寶沒了)。如果你或者你的boss希望使用ML,最好還是在開始之前確定上面6個是否,一個良好的開始是成功的一大步(這和你打算追妹子差不多,不要被外表所迷惑)。Jim Liang(這位老哥做過一個PPT用來講解機器學習,具體連結我找不到了,後期找到了為大家補上)描述了一個ML專案開始前的整個思考流程,如下圖:
這裡寫圖片描述


與ML很多相似的——資料探勘老兄們提出了CRISP-DM (cross-industry standard process for data mining),即跨行業資料探勘過程標準。個人感覺這個標準對於機器學習很適用的(深度學習也不例外),CRISP-DM標準如下圖所示:
這裡寫圖片描述
CRISP-DM模型為一個知識發現(Knowledge Discovery in Database,KDD)工程提供一個完整的過程描述。在CRISP-DM模型中,將一個KDD工程分為6個不同的,但順序並非完全不變的階段。如圖3所示:

  1. 商業理解:這一階段必須從商業的角度瞭解專案的具體要求、最終的目標,還要評估目前的實際情況、制定專案的計劃。同時,需要將這些要求、目標與資料探勘的定義結合起來;
  2. 資料理解:這一階段主要是收集整理資料,對資料進行評估分析。
  3. 資料真被:這一階段需要對原始資料進行一系列的組織清洗,使我們的資料能夠達到我們構建模型的需求。資料準備任務可能會多次執行,而不是以任何規定的順序執行。
  4. 建立模型:應用資料建立預測模型,後面過程的評估與部署都是基於該過程確定的。
  5. 評估模型:評估模型主要用於確定我們建立的模型是否符合我們的需求及最終的目標。
  6. 部署應用:將模型及應用使用到真實的生產環境。

    我感覺自己解釋的不太好,下面給大家上兩張圖片看看吧(圖片來自百度搜索引擎,如果存在侵權,麻煩告知)。
    這裡寫圖片描述
    這裡寫圖片描述

撤了這麼多,口乾舌燥。(賤人就是矯情,滾!)
後面具體些什麼內容我自己也不知道,如果有人看到的這篇閒扯的文章,並且期望有下文,麻煩評論告知(如果有想看的可以一併提出),不甚感謝!!
各位老哥辛苦了,我先撤了!