1. 程式人生 > >機器學習(5):機器學習的一個例項

機器學習(5):機器學習的一個例項

大家都知道tensorflow(簡稱tf)是一個機器學習的框架,使用它就可以完成機器學習。那就用tf來演示一下怎麼做機器學習吧,這樣你就有一個具體的感受:原來是這樣的啊!

本文使用tensorflow做一次機器學習的演示。 但是,tensorflow的理解跟使用,是可以作為一個獨立的專題來講解的,這個我再補充。

機器學習有兩個關鍵點,一個是樣本,一個是模型。樣本的作用,包括用於訓練(帶標籤)跟測試(帶或不帶標籤),大量特徵良好而標籤準確的訓練樣本,是關鍵。模型,簡單理解,就是一個函式,一個接受不斷調整引數以達到最佳預測狀態的函式,比如之前提到的簡單線性迴歸模型。

本文的“原型”是這個地址:https://colab.research.google.com/notebooks/mlcc/first_steps_with_tensor_flow.ipynb?hl=zh-cn#scrollTo=9ivCDWnwE2Zx, 你可以查閱這個網頁的內容。

我會盡量用自己的話來講,突出重點,並且堅持“不要完整、不要完美”的思路。

(一)樣本

不同的問題場景,使用不同的樣本。有時,樣本的獲取或建立,是很耗時間,也是很關鍵的事情。

這裡,要解決的問題,是“預測房價”,而樣本已經有人準備好了,地址是這個:https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv

對於樣本的讀取與分析,使用pandas(之前有單獨介紹)。使用pandas讀取時,可以直接讀取這個地址,因為pandas支援聯網的遠端讀取,也可以把這個檔案下載到本地,再使用pandas來讀取。

小程先下載這個樣本檔案,比如使用這個命令:

curl -o housing.csv "https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv"

然後,使用pandas來讀取,展示一些內容,並檢視一般的統計資訊:

執行這段程式碼,效果如下:

這個樣本,是某個地區的房子的資訊,小程的目標是根據這些資訊,預測出在新的特徵資訊下(比如經緯度、房齡、面積等),會有什麼樣的median_house_value,即房子價值的中位數。

至此,已經解決了樣本的問題,這個樣本主要用於模型的訓練。

(二)模型

先來回顧一下機器學習的工作圖:

上圖的整體,為機器的迭代學習過程。這裡的“模型”,指的是整體的迭代學習過程,包括輸入、預測模型、權重調整與損失計算。

為了更好地組織與實現學習過程,小程對上圖的步驟加了劃分,請留意下圖的註釋:

(1)輸入

對於訓練(即訓練“預測模型”),需要輸入特徵與標籤的組合(即樣本)。這裡,預測標籤(也是目標)設定為房子價值的中位數即median_house_value,所以樣本的標籤也就設定為median_house_value。對於特徵,為了演示上的簡單,這裡選擇某個街道的房子總數即total_rooms做為單一特徵。

於是,訓練樣本的特徵與標籤就確定下來了,可以這樣寫程式碼來獲得:

以上把特徵與標籤明確下來了,但是,在把樣本(特徵與標籤的組合)設定給預測模型進行訓練的時候,還有一些“預處理”可以實施以獲得更好的訓練效果,這個預處理,包括把樣本轉換成tensorflow的Dataset切片、是否隨機抽取樣本進行訓練、資料重用的次數、迭代學習的次數、每次迭代使用的樣本數,等等。

這個預處理,也叫“輸入函式”,在預測模型執行訓練時,需要指定輸入函式。

在實現輸入函式之前,先講解幾個概念。

epoch,資料被(重複)使用的次數。比如epoch為1則所有樣本只使用一次,epoch為2則所有樣本使用兩次。比如有三個樣本為{a,b,c},epoch為2時,就是使用2次,變成{a,b,c,a,b,c},當然樣本的順序是可以打亂的。

迭代,一次迭代包括了標籤預測、損失計算與權重調整的過程,一次迭代一般只使用小批量(batch_size個)樣本。

step,迭代的總次數。

batch_size,每次迭代使用的樣本的個數(並不一定要所有樣本都使用上,比如小批量的梯度下降法)。

每次step(迭代),都呼叫一次輸入函式,返回指定大小的資料集,直至step次數處理完,或者樣本資料已經用完。

這個輸入函式可以這樣實現,請留意下圖中的解釋:

(2)預測模型

之前提到,簡單線性迴歸是一個簡單的預測模型,這個預測模型適用於從x到y的對映。本例中,就是從total_rooms預測出median_house_value,所以使用簡單線性迴歸模型即可解決問題。

在tf.estimator模組中,有一個LinearRegressor類,它的物件就是一個線性迴歸模型。

在建立LinearRegressor模型時,需要指定調整模型引數的優化器,這裡使用這前介紹的“小批量隨機梯度下降”的優化器,程式碼如下:

建立預測模型之後,就可以執行訓練了:

在建立預測模型時指定的梯度下降優化器,完成迭代學習過程中模型引數(比如權重)的調整。只要觸發訓練,這個優化器就會調整引數,這個過程不需要讀者介入,包括下面的損失計算,也是優化器完成的工作。而我們進行損失計算,是為了觀察收斂的情況,進而調整訓練的引數,而不是模型的引數(如權重,這個是tensorflow的引數調整器來做的)。

(3)損失計算

預測模型在訓練的過程中,會自動地,進行預測與損失計算,進而自動地調整模型的引數。

這一步,也叫評估。

需要注意,損失計算是建立預測模型時指定的優化器自動完成的事情,而這裡計算損失,是為了調整模型的訓練引數(比如步長、epoch等,這是你要做的事情)。

預測所有樣本,得到預測值,再把預測值與真實的標籤值,進行損失計算,分別計算出均方誤差(MSE)跟均根方誤差(RMSE),程式碼與執行效果如下:

以上對所有樣本進行了預測,並計算了誤差MSE跟RMSE,一般來說根據RMSE進行誤差大小的判斷即可,那麼,現在的RMSE值,到底有多大呢?可以看一下median_house_value的最大值跟最小值,再來理解一下,現在的RMSE值是一個什麼樣的概念,程式碼與效果如下:

由上圖的值來看,RMSE的值已經達到實際標籤值的一半的誤差,所以這個誤差是巨大的。

為了更直觀地觀察預測與實際值的差別,一個辦法是使用pandas的統計分析來對比,另一個辦法是繪製擬合線,這裡分別演示一下。

以下程式碼使用pandas進行分析,對比預測與實際值的差別,程式碼與效果如下:

另一個辦法是繪製當前誤差下的擬合線,程式碼與效果如下:

擬合線的目的是儘可能地擬合所有的點,但上圖只訓練了一次的模型,明顯沒有擬合的效果。為了得到更好的擬合效果,應該根據反饋的誤差資訊,調整訓練引數,並進行反覆的訓練。

(三)調整訓練引數

在樣本跟模型(包括輸入、建立預測模型、損失計算)確定下來之後,就可以反覆地訓練這個模型。

然後,根據反饋的誤差資訊,調整訓練引數。

這裡先“隨意”地設定一下訓練引數,再進行若干次訓練,來觀察一下誤差的資訊,把之前的程式碼調整一下,如下:

可以看到這樣的輸出:

上面演示的最終誤差還是很大,這時,為了讓模型取得更好的收斂,應該調整訓練引數,比如調整為:

train_model(learning_rate=0.0001, step=500, batch_size=10)

讀者可以嘗試使用不同的訓練引數,並留意誤差收斂的情況(某些訓練引數下誤差並不會一直減小)。

最終的效果,小程就不演示了,因為最終的效果不是重點,重點是你應該明白,為了取得更好的訓練效果,應該根據樣本的數量與質量(特徵的質量)來調整訓練引數(需要反覆試驗),一般來說,可以嘗試使用較小的learning_rate+較大的step+較大的batch_size進行訓練,但是,最終還是看效果,包括誤差收斂情況,還有最終的使用情況。

調整訓練引數,很有可能是一個反覆試驗的過程,就像是一個科學實驗,不斷重複“給出結論”、“驗證”、“調整結論”再次“驗證”的過程。

(四)使用模型進行預測

使用模型進行預測,也就是最終使用訓練後的模型,屬於測試模型的環節,方法類似於訓練過程中的predict的使用,我記得在“音訊標籤化”的講解時已經提過了,這裡不細說。

再羅索一下。模型簡單來說就是函式,一個接受調整引數的函式,可以不斷進化,得到更好的預測效果。對於模型,如果你不會寫,沒有關係,tensorflow包括了一些有效的模型,而且連調整模型引數的梯度優化器也內建了(調整引數的過程不用你介入)。模型的訓練引數怎麼設定,是你要上心的,而訓練引數的設定,跟樣本的數量與質量都有關係,還跟你的經驗有關係。另一方面,你最要上心的,是樣本怎麼來?你怎麼獲取或建立大量特徵良好的用於訓練的樣本?你要花掉多少時間?

總結一下,本文演示了機器學習的一個實戰的例子,流程上,包括樣本的獲取、模型的建立(包括樣本輸入、預測模型建立、梯度下降優化器指定、損失計算等)、訓練與訓練引數的調整、測試模型等。本文希望,能讓你對傳統機器學習的操作,有一個具體感性的認識。


相關推薦

機器學習5機器學習一個例項

大家都知道tensorflow(簡稱tf)是一個機器學習的框架,使用它就可以完成機器學習。那就用tf來演示一下怎麼做機器學習吧,這樣你就有一個具體的感受:原來是這樣的啊! 本文使用tensorflow做一次機器學習的演示。 但是,tensorflow的理解跟使用,是可以作為一個獨立的專題來講解的,這個我再補充

機器學習機器學習中的幾個基本概念

前言 對於《統計學習方法》中遇到的一些問題,以及機器學習中的一些自己沒有理解透徹的問題,希望通過梳理總結能夠有更深入的理解。 在上一章最開始我們已經概括了統計學習方法的三要素,即模型、策略、演算法,這裡就不再詳述了。 本文討論總結了如下幾個概念:損失函式與風險

機器學習統計學習問題概述

學習:“如果一個系統能夠通過執行某個過程改進它的效能,這就是學習。”按照這一觀點,統計學習就是計算機系統通過運用資料及統計方法提供系統性能的機器學習。 機器學習的物件是資料,它從資料出發,提取資料特徵,抽象出資料模型,發現數據中的知識,又回到對資料的分析和預測

機器學習3機器的進化-迭代學習

之前介紹的簡單線性迴歸,就是一個迴歸模型,是一個可用於機器學習的模型。什麼意思呢?就是模型的狀態(引數集合)是可以進化的,只要合理訓練它,模型就能取得更好的預測狀態,所以說模型可用於機器學習。 要應用機器學習,一開始就要考慮選擇一個良好的模型(分類模型或迴歸模型),想清楚了,這步是很重要的,如果你選擇了一個不

mybatis學習5關聯查詢的幾種方式

文章末尾附上Employee.java  和 Department.java 方式一:聯合查詢:級聯屬性封裝結果集     <resultMap type="com.atguigu.mybatis.bean.Employee" id="MyDi

tensorflow學習5變數管理

我們在寫神經網路的時候,往往需要傳遞很多引數。而且當網路結構更復雜,引數更多的時候,在一個函式中寫若干要傳遞的引數往往不現實,如 def inference(w1,w2,w3,w4,w5.....) 因此,我們需要有一個更好的方式來傳遞和管理神經網路中的引數。tensorflow提

多執行緒學習5synchronized 的基礎使用

2018年10月03日 目錄 前言 前言 java中已經有了內建鎖:synchronized,synchronized的特點是使用簡單,一切交給JVM去處理,不需要顯示釋放; j

three.js學習5Renderer

Renderer渲染器的工作是用來將物體繪製到螢幕上。 1.WebGLRenderer (1)建構函式: WebGLRenderer(parameters:object) –parameters–(可選引數)定義渲染器的行為。 –canvas–提供一個渲染器繪製

caffe入門學習5繪製網路結構圖

網路配置都是在prototxt檔案中看起來不直觀,如果能直接看到各層的連線圖就了,Caffe提供了這樣的工具。本文就是描述我用draw_net.py繪製網路結構圖的踏坑過程。 1、安裝graphviz 2)安裝程式 執行安裝程式 完成後將路徑下的

mysql學習5多表之間的關係

mysql相互關聯的表之間存在一對一,一對多(多對一),多對多的關係。 1,一對一的關係 這種關係即多個表具有相同的主鍵,實際中用的並不多,因為完全可以將這種關係的合併為同一張表。 2,一對多(多對一)的關係 其中表1的主鍵是表2的外來鍵(即表1的某欄位作為主鍵,表2的相同

Spring學習5SpringAOP的5種增強型別

前言 Spring使用增強類定義橫切邏輯,同時由於Spring只支援方法連線點,增強類還包括在方法的哪一點加入橫切程式碼的方位資訊,所以增強既包含橫切邏輯,又包含部分連線點資訊。使用增強前,最好能理解動態代理的知識。本文分別採用繼承介面和使用配置檔案來實現增強

MFC學習專案學習

使用PROJECT->Class Wizard...按步驟設計生成MFC介面 點選"Add Class..."按鈕,在彈窗中輸入想要建立的視窗名字(也就是Class name,.h和.cpp檔案會自動同步) 可在Resource View看到所有的介面

python學習matplotlib學習

前言:matplotlib是一個python的第三方庫,裡面的pyplot可以用來作圖。下面來學習一下如何使用它的資源。 一、使用前 首先在python中使用任何第三方庫時,都必須先將其引入。即: import matplotlib.pyplot as

機器學習5貝葉斯決策定理

      其中,P(C|x)表示觀測到資料x時事件C發生的條件概率,我們稱為後驗概率(posterior probability);P(C)=P(C=1)是事件C=1發生時的概率,稱為先驗概率(prior probabilty),因為這是在觀察到資料x之前就已經得到的關於C的知識;P(x|C)稱為類似然,與

機器學習回顧篇5樸素貝葉斯演算法

1 引言 說到樸素貝葉斯演算法,很自然地就會想到貝葉斯概率公式,這是我們在高中的時候就學過的只是,沒錯,這也真是樸素貝葉斯演算法的核心,今天我們也從貝葉斯概率公式開始,全面擼一擼樸素貝葉斯演算法。 2 貝葉斯概率公式 2.1 聯合概率與全概率公式 定義1:完備事件組 ${A_1} \cup {A_2

Andrew Ng機器學習什麽是機器學習

中學 修正 style tar 輸入 color 情況 html 知識 1.什麽是機器學習? 自動化:讓計算機處理繁瑣和重復的工作。 編程:設計一種算法,適用於解決特定的問題。 機器學習:可以解決更廣泛的而不是特定的問題。類比於人類從經驗中學習這種活動,從已有的數據中發現自

TensorFlow系列專題機器學習基礎

歡迎大家關注我們的網站和系列教程:http://www.tensorflownews.com/,學習更多的機器學習、深度學習的知識! 目錄: 資料預處理 歸一化 標準化 離散化 二值化 啞編碼

TensorFlow系列專題機器學習基礎

歡迎大家關注我們的網站和系列教程:http://www.tensorflownews.com/,學習更多的機器學習、深度學習的知識! 一.人工智慧發展 1956年的8月,美國達特茅斯學院(Dartmouth College)舉行了一次研討會,這次會議由約翰[圖片上傳失敗...(ima

人工智慧入門機器學習問題的基本型別

1:concept learning:version space,decision tree等; 2:rule learning:If-then rules, association rules, genetic programming等; 3. instance-based learning(

機器學習5特征值的處理總結和缺失值的處理

com http 數據處理 src mage 編碼 pandas ima nbsp 數值型數據處理的方式:1,歸一化 2,標準化