說3分鐘好像太狂了,5分鐘幫你開啟機器學習的大門吧!

景略集智發表於2018-06-05

下文中所出現的所有程式碼均可在原帖中執行,希望讀者朋友們除了閱讀和執行程式碼之外,能夠自由地修改、除錯甚至調戲程式碼,嘗試不同的訓練資料、模型引數下輸出結果的差異。

傳送門:說3分鐘好像太狂了,5分鐘幫你開啟機器學習的大門吧!

說3分鐘好像太狂了,5分鐘幫你開啟機器學習的大門吧!


機器學習的時代已經來臨,它能帶來怎樣非凡的成就,現在還不好說,但是說它將改變軟體工程師解決問題的方式,卻是毋庸置疑的。

現在機器學習已經被不少公司廣泛應用於各個領域,比如蘋果的 Apple ARKit 用來創造更豐富更有層次感的使用者體驗,亞馬遜的 Amazon Echo 用來回答覆雜的使用者問題,惠普將機器學習技術用於解決3D列印問題。機器學習是個非常強大的技術,程式設計人員應該學習如何利用機器學習去解決技術,最好不要在將來才開始,現在就行動。

應用機器學習

機器學習有很多運轉部件。在本文,我會先通過幫你寫一些程式碼來解釋機器學習,然後再討論開始下一步工作前可以做哪些準備工作。

首先我們想想在機器學習出現之前,軟體都是怎麼編出來的。軟體工程師會通過給電腦逐步操作的指令解決具體的問題。

說3分鐘好像太狂了,5分鐘幫你開啟機器學習的大門吧!

我們舉一個銀行業的例子。比如說,我們想寫一個程式能預測貸款人會不會還他們的借款。我們可以寫一個程式分析他們的使用者資料,為關鍵變數設定引數:

  • 信用評分(credit score)

  • 貸款數目(loan amount)

  • 貸款種類(type of loan)

  • 成為銀行使用者的時間(Length of membership)

程式邏輯會如下所示:

說3分鐘好像太狂了,5分鐘幫你開啟機器學習的大門吧!

如果問題複雜程度很高,那麼手動調整引數和寫指令的難度也會相應很高,甚至有時無法實現。想象一下給物體識別系統程式設計的難度吧。

但是機器看一下範例,就能學習怎麼解決這些問題。

有了機器學習技術,程式設計人員就能訓練一個機器學習模型,從數千個貸款人的資料中學習。模型還能隨著時間推移不斷更新,響應新趨勢和更多的資料。例如,2017年國際信用界巨頭艾可飛爆發安全漏洞後,那麼來自艾可飛的信用評分就沒有其它信用報告機構的資料那麼有價值了。如果這要反映在真實的貸款結果上,機器學習模型可以調整相應的引數,減少艾可飛提供的信用評分的權重。有了足夠的資料,機器學習模型會訓練自己找到最優的引數。

這種技術稱為監督式學習,在後面的教程中會用到它。(另外兩種較為通用的技術是非監督式學習和增強學習)

說3分鐘好像太狂了,5分鐘幫你開啟機器學習的大門吧!

搭建房價預測模型教程

學習機器學習技術的最快途徑就是自己嘗試去搭建一個機器學習模型,那麼我們就來建一個自己的房價預測模型。先假定每套房子的基值為24萬美元,每多一間臥室就增加15000美元(為了方便表達數字,以下用K代表1000)。

如下:

說3分鐘好像太狂了,5分鐘幫你開啟機器學習的大門吧!

預測房價需要一個簡單的線性模型:(y = mx + b)。我們可以用這個公式:

說3分鐘好像太狂了,5分鐘幫你開啟機器學習的大門吧!

現在我們建一個機器學習模型去做這件事。通過使用訓練資料,我想讓模型找出m和b的值,這個我們知道分別是15和240。

我們用 Python 編寫程式。用下面的程式碼新建一個 Python 檔案,命名為 home_price.py。在程式碼中,我們先匯入資料和資料,設定好一些初始變數,線性模型和損失函式。如果你的環境設定不允許,可以考慮安裝 Docker,使用下面的 Docker 命令:

說3分鐘好像太狂了,5分鐘幫你開啟機器學習的大門吧!
沒錯,不用列印報表和註釋,就是15行程式碼 !

1 資料建模

請點選執行按鈕,匯入TensorFlow並定義相應變數和模型。(可執行程式碼原貼:說3分鐘好像太狂了,5分鐘幫你開啟機器學習的大門吧!)

說3分鐘好像太狂了,5分鐘幫你開啟機器學習的大門吧!

2 模型訓練

請點選執行按鈕,啟動TensorFlow的計算圖。

注:如重新整理了頁面,請先重新執行上一段程式碼

說3分鐘好像太狂了,5分鐘幫你開啟機器學習的大門吧!

希望讀者朋友們除了閱讀和執行程式碼之外,能夠自由地修改、除錯甚至調戲程式碼,嘗試不同的訓練資料、模型引數下輸出結果的差異。

在程式碼中,我們設定了一些基本的在訓練中會用到的佔位符和變數。然後我們寫一個損失函式,通過減去預測值中的y (給定值或者真實數值)進行計算。接著把得到的數值傳給優化程式。每迭代一次,優化程式就會通過更新變數m和b的值儘可能地得到y的值和預測值。

接下來,我們就用訓練資料把模型訓練上1000次。最後,你應該會得到這樣一個輸出:

說3分鐘好像太狂了,5分鐘幫你開啟機器學習的大門吧!
m的值為[ 15.00007153],b的值為[239.99978638]。

你覺得得到的m和b的值怎麼樣?和我們預測的值很接近對吧?

說3分鐘好像太狂了,5分鐘幫你開啟機器學習的大門吧!

下面是每次迭代中模型如何被優化的直觀圖。最初m和b的值從1.0開始(我們在程式碼中指定了),但是隨著時間推移,它們會慢慢接近正確的值。我們也可以看到損失值(預測— y)慢慢降低至0。

說3分鐘好像太狂了,5分鐘幫你開啟機器學習的大門吧!

圖為迭代100次後m,b的值和損失值(loss)。

希望上面的教程能幫你理解機器學習的基礎知識。不遠的將來,每個程式設計人員都會在實際工作中用到機器學習技術,我們離npm install object-detect並不遙遠。

說3分鐘好像太狂了,5分鐘幫你開啟機器學習的大門吧!

新手福利

假如你是機器學習小白,但又希望能以最高效的方式學習人工智慧知識,我們這裡正好有個免費學習AI的機會,讓你從零到精通變身AI工程師,不瞭解一下?

機會傳送門:戳這裡!!

這可能是正點趕上AI這班車的最好機會,不要錯過哦。

相關文章