機器學習之最近鄰算法TensorFlow實現

本期,我們介紹下最近鄰算法的TensorFlow實現。由於是第一次談及TensorFlow,我們先來介紹下TensorFlow。

TensorFlow是一款開源的Python機器學習框架。由Google機器智能研究部門的Googl Brain團隊開發及維護,是一款基礎框架。不僅可用於基礎研究,也可用於生產環境。支持嵌入式處理器、CPU、GPU、TPU,具有部署靈活的特點。更重要的一點,由Google作為其背書,擁有不錯的發展潛力。

雖然應用在Python環境中,但是使用tensorflow有點進入二次元空間的感覺。獨立的數據結構,獨立的運算符,獨立的流程控制語句。並且不具備極致的交互式編程體驗,有悖於python的編程特點。應用時一直有不可描述的牴觸感,直到改變觀點。這不是python,這是一款新的編程語言,開發環境。隨即,開始擁抱tensorflow。下面展示使用tensorflow實現最近鄰算法。

  • 準備數據

我們依然使用從婚戀網站尋找約會對象的例子。有一名女主,經過多次興奮亦或無聊的約會經歷後,她將約會對象分為三類:

    1. 不喜歡的人,標記為Boring

    2. 一般的人,標記為Normal

    3. 極具魅力的人,標記為Fantastic

該女主還特別有心,除了打標籤外,還將約會目標的一些特質數字化。簡單起見,我們選用三個特質:

    1. 每年獲得的飛行常客里程數,標記為air_miles

    2. 玩視頻遊戲所耗時間百分比,標記為video_games

    3. 每週消費的冰激凌公升數,標記為ice_cream

基於這些數據,我們通過機器學習算法,預測下一位約會者是否能吸引女主的目光,從而建議女主是去赴約,還是在家裡追劇。

  • 分析數據

我們使用python、pandas及matplotlib模塊來可視化分析數據,對數據有一個感性認識後,再運用相應的機器學習算法。當然,我們已經提前選定了使用最近鄰算法。

首先,導入數據到df變量

機器學習之最近鄰算法TensorFlow實現

繪製散點圖,用顏色區分女主是否喜歡

機器學習之最近鄰算法TensorFlow實現

數據呈現一定的規律性,可以運用分類算法。我們還注意到,數據有一定的範圍區間,具體描述為,每週遊戲時間小於16%,食用冰激凌的數量小於1.75升,每年獲得的飛行里程數少於80000公里。超出訓練數據的範圍,也即超出了分類器的預測能力。如每週100%玩遊戲的勇士,分類器就會給出無價值的建議。

由於數據樣本的單位不一致,我們需要對原始數據做歸一化處理。

機器學習之最近鄰算法TensorFlow實現

  • 構建模型

使用TensorFlow進行運算前,需要預先定義模型。官方稱為構建計算圖,數據是以Tensor的形式在圖中流動,運算。這種方式有助於將抽象的模型可視化呈現。

前二篇文章,我們採用數據點循環迭代的方式實現最近鄰算法的運算及測試。本期我們採用批量矩陣運算的方式來解題,即構建距離矩陣。之前,我們使用L2範數(歐幾里德距離),本期,我們使用L1範數。

構建計算圖的過程如下:

機器學習之最近鄰算法TensorFlow實現

  • 測試算法

我們將10%的數據作為測試數據集,用於驗證算法的泛化能力。

機器學習之最近鄰算法TensorFlow實現

執行計算圖並計算錯誤率

機器學習之最近鄰算法TensorFlow實現

  • 結語

最近鄰算法是一個簡單有效的基礎機器學習算法,但對訓練數據集敏感,即噪聲敏感(錯誤的分類數據將導致錯誤的分類預測值)。也對訓練數據集有一定的要求,在各個分類結果的值空間中,訓練數據必須存在(待預測數據點需要計算最近鄰,如果值空間的訓練數據不存在,所得到的最近鄰其實已經很遠了)。也正是由於算法每次都使用整個訓練數據集,最近鄰算法不是高效的。當數據集巨大時,計算效率也是不可接受的。

相關推薦

推薦中...