swing訓(xùn)練
swing是一種Item召回算法,您可以使用swing訓(xùn)練組件基于User-Item-User原理衡量Item的相似性。本文為您介紹swing訓(xùn)練的參數(shù)配置。
使用限制
支持運(yùn)行的計(jì)算資源為MaxCompute和Flink。
組件配置
您可以通過(guò)以下任意一種方式,配置swing訓(xùn)練組件參數(shù)。
方式一:可視化方式
在Designer工作流頁(yè)面配置組件參數(shù)。
頁(yè)簽 | 參數(shù)名稱 | 描述 |
字段設(shè)置 | Item列列名 | Item列的名稱。 |
User列列名 | User列的名稱。 | |
參數(shù)設(shè)置 | alpha參數(shù) | alpha參數(shù),默認(rèn)為1.0。 |
item參與計(jì)算的人數(shù)最大值 | Item參與計(jì)算的人數(shù)最大值,默認(rèn)為1000。 說(shuō)明 當(dāng)item出現(xiàn)的次數(shù)大于該值時(shí),算法會(huì)從所有用戶中隨機(jī)抽取的用戶數(shù)量。 | |
用戶互動(dòng)的最大Item數(shù)量 | 用戶互動(dòng)的Item的最大數(shù)量,默認(rèn)為1000。 說(shuō)明 如果用戶參與互動(dòng)的Item的數(shù)量大于該值,則該用戶不參與計(jì)算過(guò)程。 | |
用戶互動(dòng)的最小Item數(shù)量 | 用戶互動(dòng)的Item的最小數(shù)量,默認(rèn)為10。 說(shuō)明 如果用戶參與互動(dòng)的Item的數(shù)量小于該值,則該用戶不參與計(jì)算過(guò)程。 | |
結(jié)果是否歸一化 | 結(jié)果是否歸一化。 | |
用戶alpha參數(shù) | 用戶的alpha參數(shù),默認(rèn)為5.0。 | |
用戶beta參數(shù) | 用戶的beta參數(shù),默認(rèn)為-0.35。 | |
執(zhí)行調(diào)優(yōu) | 節(jié)點(diǎn)個(gè)數(shù) | 節(jié)點(diǎn)個(gè)數(shù),與參數(shù)單個(gè)節(jié)點(diǎn)內(nèi)存大小配對(duì)使用,正整數(shù)。范圍[1, 9999]。 |
單個(gè)節(jié)點(diǎn)內(nèi)存大小,單位M | 單個(gè)節(jié)點(diǎn)內(nèi)存大小,單位MB,正整數(shù)。范圍[1024, 64*1024]。 |
方式二:Python代碼方式
使用PyAlink腳本組件配置該組件參數(shù)。您可以使用PyAlink腳本組件進(jìn)行Python代碼調(diào)用,詳情請(qǐng)參見(jiàn)PyAlink腳本。
參數(shù)名稱 | 是否必選 | 描述 | 默認(rèn)值 |
itemCol | 是 | Item列的列名。 | 無(wú) |
userCol | 是 | User列的列名。 | 無(wú) |
alpha | 否 | alpha參數(shù),是一個(gè)平滑因子。 | 1.0 |
userAlpha | 否 | User的alpha參數(shù)。 說(shuō)明 用于計(jì)算用戶權(quán)重:user weight = 1.0/(userAlpha + userClickCount)^userBeta。 | 5.0 |
userBeta | 否 | User的Beta參數(shù)。 說(shuō)明 用于計(jì)算用戶權(quán)重:user weight = 1.0/(userAlpha + userClickCount)^userBeta。 | -0.35 |
resultNormalize | 否 | 是否歸一化。 | false |
maxItemNumber | 否 | Item參與計(jì)算的人數(shù)最大值。 說(shuō)明 如果Item出現(xiàn)的次數(shù)大于maxItemNumber,則算法會(huì)從所有用戶中隨機(jī)抽取maxItemNumber個(gè)用戶。 | 1000 |
minUserItems | 否 | User互動(dòng)的Item的最小數(shù)量。 說(shuō)明 如果用戶參與互動(dòng)的Item的數(shù)量小于minUserItems,則該用戶不參與計(jì)算過(guò)程。 | 10 |
maxUserItems | 否 | User互動(dòng)的Item的最大數(shù)量。 說(shuō)明 如果用戶參與互動(dòng)的Item的數(shù)量大于maxUserItems,則該用戶不參與計(jì)算過(guò)程。 | 1000 |
Python代碼方式的使用示例如下。
df_data = pd.DataFrame([
["a1", "11L", 2.2],
["a1", "12L", 2.0],
["a2", "11L", 2.0],
["a2", "12L", 2.0],
["a3", "12L", 2.0],
["a3", "13L", 2.0],
["a4", "13L", 2.0],
["a4", "14L", 2.0],
["a5", "14L", 2.0],
["a5", "15L", 2.0],
["a6", "15L", 2.0],
["a6", "16L", 2.0],
])
data = BatchOperator.fromDataframe(df_data, schemaStr='user string, item string, rating double')
model = SwingTrainBatchOp()\
.setUserCol("user")\
.setItemCol("item")\
.setMinUserItems(1)\
.linkFrom(data)
model.print()
predictor = SwingRecommBatchOp()\
.setItemCol("item")\
.setRecommCol("prediction_result")
predictor.linkFrom(model, data).print()
使用示例
您可以使用swing訓(xùn)練組件構(gòu)建如下工作流。本示例中,您需要按照以下流程配置組件:
準(zhǔn)備訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集。
創(chuàng)建兩個(gè)MaxCompute表,表1包含userid、itemid字段,表2包含itemid字段,字段類型均為STRING。通過(guò)MaxCompute客戶端的Tunnel命令將訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集分別上傳至MaxCompute的表1和表2,再將讀數(shù)據(jù)表-1和讀數(shù)據(jù)表-2的表名參數(shù)分別配置為表1和表2。關(guān)于MaxCompute客戶端的安裝及配置請(qǐng)參見(jiàn)使用本地客戶端(odpscmd)連接,關(guān)于Tunnel命令詳情請(qǐng)參見(jiàn)Tunnel命令。
將訓(xùn)練數(shù)據(jù)集接入swing訓(xùn)練組件,并配置具體參數(shù),詳情請(qǐng)參見(jiàn)上文的可視化配置組件參數(shù)。
將測(cè)試數(shù)據(jù)集和模型接入swing推薦組件,進(jìn)行模型預(yù)測(cè)。