[TOC] 更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你:<a target="_blank" href="https://www.cnblogs.com/nickchen121/p/11686958.html">http://www.javashuo.com/article/p-vozphyqp-cm.html</a>html
加大了對預測不許的用戶物品評分的懲罰。python
$$ \text{RMSE}=\sqrt\frac{\sum_{u,i\in{T}}(r_{ui}-\hat{r_{ui}})^2}{|T|} $$算法
# records[i] = [u,i,rui,pui] # rui是用戶u對物品i的實際評分,pui是用戶u對物品i的預測評分 def rmse(records): """計算均方根偏差""" return math.sqrt(sum([(rui-pui)*(rui-pui) for u,i,rui,pui in records])/len(records))
若是評分系統是基於整數創建的,對預測結果取整會下降MAE的偏差。數據結構
$$ \text{MAE}=\frac{\sum_{u,i\in{T}}|r_{ui}-\hat{r_{ui}}|}{|T|} $$機器學習
# records[i] = [u,i,rui,pui] # rui是用戶u對物品i的實際評分,pui是用戶u對物品i的預測評分 def mae(records): """計算平均絕對偏差""" return math.sqrt(sum([abs(rui-pui) for u,i,rui,pui in records])/len(records))
$$ \text{Precision}=\frac{\sum_{u\in{U}}|R(u)\bigcap{T(u)}|}{\sum_{u\in{U}}|R(u)|} $$ 其中$R(u)$是用戶在訓練集上的行爲給用戶做出的推薦列表。學習
$$ \text{Recall}=\frac{\sum_{u\in{U}}|R(u)\bigcap{T(u)}|}{\sum_{u\in{U}}|T(u)|} $$ 其中$T(u)$是用戶在測試集上的行爲給用戶做出的推薦列表。測試
def precision_recall(test, N): """ 計算準確率和召回率 test: N: 推薦列表長度 """ hit = 0 n_recall = 0 n_precision = 0 for user, item in test.items(): rank = Recommend(user, N) hit += lenn(rank & itmes) n_recall += len(items) n_precision += N return [hit/(1.*n_recall), hit/(1.*n_precision)]
覆蓋率描述一個推薦系統對物品長尾的發掘能力。網站
$$ \text{Coverate}=\frac{|\bigcup_{u\in{U}}R(u)|}{I} $$ 其中$R(u)$是推薦系統給每一個用戶推薦一個長度爲$N$的物品列表。ui
信息熵能夠定義覆蓋率。人工智能
$$ H=\sum_{i=1}^np(i)\log{p(i)} $$ 其中$p(i)$是物品$i$的流行度除以全部物品流行度之和。
基尼係數能夠定義覆蓋率。基尼係數也能夠查看推薦系統算法是否具備馬太效應(流行更流行,不流行更不流行)。
$$ G=\frac{1}{n-1}\sum_{j=1}^n(2j-n-1)p(i_j) $$ 其中$i_j$是按照物品流行度$p$從小到大排序的物品列表中的第$j$個物品。
def gini_index(p): """計算基尼係數""" j = 1 n = len(p) G = 0 for item, weight in sorted(p.items(), key=itemgetter(1)): G += (2*j-n-1)*weight return G / float(n-1)
多樣性描述了推薦列表中物品兩兩之間的不類似性。
$$ \text{Diversity}(R(u))=1-\frac{\sum_{i,j\in{R(u)},i\neq{j}}s(i,j)}{\frac{1}{2}|R(u)|(|R(u)|-1)} $$ 其中$R(u)$爲用戶$u$的推薦列表,$s(i,j)\in[0,1]$定義了物品$i$和物品$j$之間的類似度。
推薦系統的總體多樣性定義爲: $$ \text{Diversity}=\frac{1}{|U|}\sum_{u\in{U}}\text{Diversity}(R(u)) $$
- | 離線實驗 | 問卷調差 | 在線實驗 |
---|---|---|---|
用戶滿意度 | x | y | o |
預測準確度 | y | y | x |
覆蓋率 | y | y | y |
多樣性 | o | y | o |
新穎性 | o | y | o |
驚喜度 | x | y | x |
$$ f_i(k)=\alpha_ik^{\beta_i} \ f_u(k)=\alpha_uk^{\beta_u} $$ 其中$f_u(k)$表示對$k$個物品產生行爲的用戶數;$f_i(k)$表示被$k$個用戶產生過行爲的物品數。