python3機器學習經典實例-第五章構建推薦引擎20

簡介

推薦引擎是一個能預測用戶興趣點的模型。將推薦引擎應用於電影語境時,便成了一個電影推薦引擎。我們通過預測當前用戶可能會喜歡的內容,將相應的東西從資料庫中篩選出來,這樣的推薦引擎可以有助於將用戶和數據集中的合適內容連接起來。為什麼推薦引擎這麼重要?設想你有一個很龐大的商品目錄,而用戶可能或者不可能查找所有的相關內容。通過推薦合適的內容,可以增加用戶消費。有些公司(如Netflix)嚴重地依賴推薦系統來保持用戶參與度。推薦引擎通常用協同過濾(collaborative filtering)或基於內容的過濾(content-based filtering)來產生一組推薦。兩種過濾方法的不同之處在於挖掘推薦的方式。協同過濾從當前用戶過去的行為和其他用戶對當前用戶的評分來構建模型,然後使用這個模型來預測這個用戶可能感興趣的內容;而基於內容的過濾用商品本身的特徵來給用戶推薦更多的商品,商品間的相似度是模型主要的關注點。本章將重點介紹協同過濾。

為數據處理構建函數組合

機器學習系統中的主要組成部分是數據處理流水線。在數據被輸入到機器學習演算法中進行訓練之前,需要對數據做各種方式的處理,使得該數據可以被演算法利用。在構建一個準確的、可擴展的機器學習系統的過程中,擁有一個健壯的數據處理流水線非常重要。有很多基本的函數功能可以使用,通常數據處理流水線就是這些基本函數的組合。不推薦使用嵌套或循環的方式調用這些函數,而是用函數式編程的方式構建函數組合。接下來介紹如何組合這些函數來形成一個可重用的函數組合,本節將創建3個基本函數,並介紹如何將其組合成一個流水線。

創建function_composition.py文件

出錯類型和修改內容

出錯類型name reduce is not defined修改內容添加from functools import reduce出錯類型Output: <map object at 0x000002521423FA58>修改說明:【python 3相對python2 map返回有點小變化 print( list(map(lambda..., ...) ))要想得到列表 得用list() 轉換哈 否者得到是map對象修改內容 print ("Output using the lengthy way:", list(arr3)) func_composed = function_composer(sub5, mul2, add3) print ("Output using function composition:", list(func_composed(arr) )) print ("
Operation: sub5(add3(mul2(sub5(mul2(arr)))))
Output:", list(function_composer(mul2, sub5, mul2, add3, sub5)(arr)))

具體步驟代碼

  • 創建function_composition.py文件-導入資料庫

import numpy as npfrom functools import reduce

  • 定義第一個函數,將數組的每個元素加3

def add3(input_array): return map(lambda x: x+3, input_array)

  • 定義第二個函數,將數組中的每個元素乘2

def mul2(input_array): return map(lambda x: x*2, input_array)

  • 定義第三個函數,將數組中的每個元素減去5

def sub5(input_array): return map(lambda x: x-5, input_array)

  • 定義一個函數組合器,將這些函數作為輸入參數,返回一個組合函數。這個組合函數基本上是輸入函數按序執行的一個函數:

def function_composer(*args): return reduce(lambda f, g: lambda x: f(g(x)), args)

我們用reduce函數依次執行所有函數,也就是將所有的輸入函數合併。

  • 接下來可以做函數組合了。首先定義一些數據和一組操作:

if __name__==__main__: arr = np.array([2,5,4,7]) print ("
Operation: add3(mul2(sub5(arr)))")

  • 如果用常規的方法,我們依次執行函數,代碼如下:

arr1 = add3(arr) arr2 = mul2(arr1) arr3 = sub5(arr2) print ("Output using the lengthy way:", list(arr3))

  • 下面用單行代碼的函數組合器實現同樣的功能:

func_composed = function_composer(sub5, mul2, add3) print ("Output using function composition:", list(func_composed(arr) ))

  • 可以通過上面的方法用單行代碼實現函數組合,但是其表示方式是嵌套的和不可讀的,而且也是不可重用的。當需要再次用到這組操作時,需要重新編寫:

print ("
Operation: sub5(add3(mul2(sub5(mul2(arr)))))
Output:", list(function_composer(mul2, sub5, mul2, add3, sub5)(arr)))

結果輸出out

Operation: add3(mul2(sub5(arr)))Output using the lengthy way: [5, 11, 9, 15]Output using function composition: [5, 11, 9, 15]Operation: sub5(add3(mul2(sub5(mul2(arr)))))Output: [-10, 2, -2, 10]

推薦閱讀:

Kaggle比賽教你最快速度入門文本分類(經典方法篇)
邏輯回歸(二分類)與極大似然
CS231N 課程筆記合集
《淺談人工智慧:現狀、任務、構架與統一》·第二期
機器學習技法筆記9:決策樹

TAG:機器學習 | Python |