演算法推薦圖片
1. 請問各點陣圖片上的是什麼演算法
信息太少,應該是蟻群演算法吧,PL是路徑長度吧
2. 這幾種圖片演算法哪種看著更清晰適合列印
首先,一幅圖片的清晰與否與看圖軟體無關。
你所說的一幅圖片應該是點陣圖,點陣圖圖像(bitmap), 亦稱為點陣圖像或繪制圖像,是由稱作像素(圖片元素)的單個點組成的。這些點可以進行不同的排列和染色以構成圖樣。當放大點陣圖時,可以看見賴以構成整個圖像的無數單個方塊。擴大點陣圖尺寸的效果是增大單個像素,從而使線條和形狀顯得參差不齊。
矢量圖是根據幾何特性來繪制圖形,矢量可以是一個點或一條線,矢量圖只能靠軟體生成,文件佔用內在空間較小,因為這種類型的圖像文件包含獨立的分離圖像,可以自由無限制的重新組合。它的特點是放大後圖像不會失真,和解析度無關。
3. 怎麼快速壓縮圖片大小
圖片壓縮的好處:
1、擴大磁碟存儲量
長期使用電腦,電腦會存儲大量的文件、文檔、還有就是圖片了,圖片的的佔比是特別大的,所以如果選擇壓縮保存的話,可以減少空間存儲更多的文件
2、節約網路空間
很多照片,我們都會放在網盤或者存儲軟體中的,一般這樣的軟體一般都有容量限制,如果保存的圖片經過壓縮後再存儲,就會大大節約網路中的空間
3、提高傳輸速度
圖片一旦傳輸起來,還是很耗費時間的,所以很有必要將圖片進行壓縮,特別是遇到網路差的情況,傳輸起來就更加快捷了
圖片無損壓縮的方法:
1、電腦下載圖片壓縮工具,推薦使用金舟圖片壓縮軟體
2、方法步驟:
第一步、雙擊打開電腦桌面的圖片壓縮軟體,點擊添加將所有需要壓縮的圖片;
4. 想問一下有沒有比較方便的人臉識別演算法,求推薦
主流的人臉識別技術基本上可以歸結為三類,即:基於幾何特徵的方法、基於模板的方法和基於模型的方法。
1. 基於幾何特徵的方法是最早、最傳統的方法,通常需要和其他演算法結合才能有比較好的效果;
2. 基於模板的方法可以分為基於相關匹配的方法、特徵臉方法、線性判別分析方法、奇異值分解方法、神經網路方法、動態連接匹配方法等。
3. 基於模型的方法則有基於隱馬爾柯夫模型,主動形狀模型和主動外觀模型的方法等。
1. 基於幾何特徵的方法
人臉由眼睛、鼻子、嘴巴、下巴等部件構成,正因為這些部件的形狀、大小和結構上的各種差異才使得世界上每個人臉千差萬別,因此對這些部件的形狀和結構關系的幾何描述,可以做為人臉識別的重要特徵。幾何特徵最早是用於人臉側面輪廓的描述與識別,首先根據側面輪廓曲線確定若干顯著點,並由這些顯著點導出一組用於識別的特徵度量如距離、角度等。Jia 等由正麵灰度圖中線附近的積分投影模擬側面輪廓圖是一種很有新意的方法。
採用幾何特徵進行正面人臉識別一般是通過提取人眼、口、鼻等重要特徵點的位置和眼睛等重要器官的幾何形狀作為分類特徵,但Roder對幾何特徵提取的精確性進行了實驗性的研究,結果不容樂觀。
可變形模板法可以視為幾何特徵方法的一種改進,其基本思想是 :設計一個參數可調的器官模型 (即可變形模板),定義一個能量函數,通過調整模型參數使能量函數最小化,此時的模型參數即做為該器官的幾何特徵。
這種方法思想很好,但是存在兩個問題,一是能量函數中各種代價的加權系數只能由經驗確定,難以推廣,二是能量函數優化過程十分耗時,難以實際應用。 基於參數的人臉表示可以實現對人臉顯著特徵的一個高效描述,但它需要大量的前處理和精細的參數選擇。同時,採用一般幾何特徵只描述了部件的基本形狀與結構關系,忽略了局部細微特徵,造成部分信息的丟失,更適合於做粗分類,而且目前已有的特徵點檢測技術在精確率上還遠不能滿足要求,計算量也較大。
2. 局部特徵分析方法(Local Face Analysis)
主元子空間的表示是緊湊的,特徵維數大大降低,但它是非局部化的,其核函數的支集擴展在整個坐標空間中,同時它是非拓撲的,某個軸投影後臨近的點與原圖像空間中點的臨近性沒有任何關系,而局部性和拓撲性對模式分析和分割是理想的特性,似乎這更符合神經信息處理的機制,因此尋找具有這種特性的表達十分重要。基於這種考慮,Atick提出基於局部特徵的人臉特徵提取與識別方法。這種方法在實際應用取得了很好的效果,它構成了FaceIt人臉識別軟體的基礎。
3. 特徵臉方法(Eigenface或PCA)
特徵臉方法是90年代初期由Turk和Pentland提出的目前最流行的演算法之一,具有簡單有效的特點, 也稱為基於主成分分析(principal component analysis,簡稱PCA)的人臉識別方法。
特徵子臉技術的基本思想是:從統計的觀點,尋找人臉圖像分布的基本元素,即人臉圖像樣本集協方差矩陣的特徵向量,以此近似地表徵人臉圖像。這些特徵向量稱為特徵臉(Eigenface)。
實際上,特徵臉反映了隱含在人臉樣本集合內部的信息和人臉的結構關系。將眼睛、面頰、下頜的樣本集協方差矩陣的特徵向量稱為特徵眼、特徵頜和特徵唇,統稱特徵子臉。特徵子臉在相應的圖像空間中生成子空間,稱為子臉空間。計算出測試圖像窗口在子臉空間的投影距離,若窗口圖像滿足閾值比較條件,則判斷其為人臉。
基於特徵分析的方法,也就是將人臉基準點的相對比率和其它描述人臉臉部特徵的形狀參數或類別參數等一起構成識別特徵向量,這種基於整體臉的識別不僅保留了人臉部件之間的拓撲關系,而且也保留了各部件本身的信息,而基於部件的識別則是通過提取出局部輪廓信息及灰度信息來設計具體識別演算法。現在Eigenface(PCA)演算法已經與經典的模板匹配演算法一起成為測試人臉識別系統性能的基準演算法;而自1991年特徵臉技術誕生以來,研究者對其進行了各種各樣的實驗和理論分析,FERET'96測試結果也表明,改進的特徵臉演算法是主流的人臉識別技術,也是具有最好性能的識別方法之一。
該方法是先確定眼虹膜、鼻翼、嘴角等面像五官輪廓的大小、位置、距離等屬性,然後再計算出它們的幾何特徵量,而這些特徵量形成一描述該面像的特徵向量。其技術的核心實際為「局部人體特徵分析」和「圖形/神經識別演算法。」這種演算法是利用人體面部各器官及特徵部位的方法。如對應幾何關系多數據形成識別參數與資料庫中所有的原始參數進行比較、判斷與確認。Turk和Pentland提出特徵臉的方法,它根據一組人臉訓練圖像構造主元子空間,由於主元具有臉的形狀,也稱為特徵臉 ,識別時將測試 圖像投影到主元子空間上,得到一組投影系數,和各個已知人的人臉圖像比較進行識別。Pentland等報告了相當好的結果,在 200個人的 3000幅圖像中得到 95%的正確識別率,在FERET資料庫上對 150幅正面人臉象只有一個誤識別。但系統在進行特徵臉方法之前需要作大量預處理工作如歸一化等。
在傳統特徵臉的基礎上,研究者注意到特徵值大的特徵向量 (即特徵臉 )並不一定是分類性能好的方向,據此發展了多種特徵 (子空間 )選擇方法,如Peng的雙子空間方法、Weng的線性歧義分析方法、Belhumeur的FisherFace方法等。事實上,特徵臉方法是一種顯式主元分析人臉建模,一些線性自聯想、線性壓縮型BP網則為隱式的主元分析方法,它們都是把人臉表示為一些向量的加權和,這些向量是訓練集叉積陣的主特徵向量,Valentin對此作了詳細討論。總之,特徵臉方法是一種簡單、快速、實用的基於變換系數特徵的演算法,但由於它在本質上依賴於訓練集和測試集圖像的灰度相關性,而且要求測試圖像與訓練集比較像,所以它有著很大的局限性。
基於KL 變換的特徵人臉識別方法
基本原理:
KL變換是圖象壓縮中的一種最優正交變換,人們將它用於統計特徵提取,從而形成了子空間法模式識別的基礎,若將KL變換用於人臉識別,則需假設人臉處於低維線性空間,且不同人臉具有可分性,由於高維圖象空間KL變換後可得到一組新的正交基,因此可通過保留部分正交基,以生成低維人臉空間,而低維空間的基則是通過分析人臉訓練樣本集的統計特性來獲得,KL變換的生成矩陣可以是訓練樣本集的總體散布矩陣,也可以是訓練樣本集的類間散布矩陣,即可採用同一人的數張圖象的平均來進行訓練,這樣可在一定程度上消除光線等的干擾,且計算量也得到減少,而識別率不會下降。
4. 基於彈性模型的方法
Lades等人針對畸變不變性的物體識別提出了動態鏈接模型 (DLA),將物體用稀疏圖形來描述 (見下圖),其頂點用局部能量譜的多尺度描述來標記,邊則表示拓撲連接關系並用幾何距離來標記,然後應用塑性圖形匹配技術來尋找最近的已知圖形。Wiscott等人在此基礎上作了改進,用FERET圖像庫做實驗,用 300幅人臉圖像和另外 300幅圖像作比較,准確率達到 97.3%。此方法的缺點是計算量非常巨大 。
Nastar將人臉圖像 (Ⅰ ) (x,y)建模為可變形的 3D網格表面 (x,y,I(x,y) ) (如下圖所示 ),從而將人臉匹配問題轉化為可變形曲面的彈性匹配問題。利用有限元分析的方法進行曲面變形,並根據變形的情況判斷兩張圖片是否為同一個人。這種方法的特點在於將空間 (x,y)和灰度I(x,y)放在了一個 3D空間中同時考慮,實驗表明識別結果明顯優於特徵臉方法。
Lanitis等提出靈活表現模型方法,通過自動定位人臉的顯著特徵點將人臉編碼為 83個模型參數,並利用辨別分析的方法進行基於形狀信息的人臉識別。彈性圖匹配技術是一種基於幾何特徵和對灰度分布信息進行小波紋理分析相結合的識別演算法,由於該演算法較好的利用了人臉的結構和灰度分布信息,而且還具有自動精確定位面部特徵點的功能,因而具有良好的識別效果,適應性強識別率較高,該技術在FERET測試中若干指標名列前茅,其缺點是時間復雜度高,速度較慢,實現復雜。
5. 神經網路方法(Neural Networks)
人工神經網路是一種非線性動力學系統,具有良好的自組織、自適應能力。目前神經網路方法在人臉識別中的研究方興未艾。Valentin提出一種方法,首先提取人臉的 50個主元,然後用自相關神經網路將它映射到 5維空間中,再用一個普通的多層感知器進行判別,對一些簡單的測試圖像效果較好;Intrator等提出了一種混合型神經網路來進行人臉識別,其中非監督神經網路用於特徵提取,而監督神經網路用於分類。Lee等將人臉的特點用六條規則描述,然後根據這六條規則進行五官的定位,將五官之間的幾何距離輸入模糊神經網路進行識別,效果較一般的基於歐氏距離的方法有較大改善,Laurence等採用卷積神經網路方法進行人臉識別,由於卷積神經網路中集成了相鄰像素之間的相關性知識,從而在一定程度上獲得了對圖像平移、旋轉和局部變形的不變性,因此得到非常理想的識別結果,Lin等提出了基於概率決策的神經網路方法 (PDBNN),其主要思想是採用虛擬 (正反例 )樣本進行強化和反強化學習,從而得到較為理想的概率估計結果,並採用模塊化的網路結構 (OCON)加快網路的學習。這種方法在人臉檢測、人臉定位和人臉識別的各個步驟上都得到了較好的應用,其它研究還有 :Dai等提出用Hopfield網路進行低解析度人臉聯想與識別,Gutta等提出將RBF與樹型分類器結合起來進行人臉識別的混合分類器模型,Phillips等人將MatchingPursuit濾波器用於人臉識別,國內則採用統計學習理論中的支撐向量機進行人臉分類。
神經網路方法在人臉識別上的應用比起前述幾類方法來有一定的優勢,因為對人臉識別的許多規律或規則進行顯性的描述是相當困難的,而神經網路方法則可以通過學習的過程獲得對這些規律和規則的隱性表達,它的適應性更強,一般也比較容易實現。因此人工神經網路識別速度快,但識別率低 。而神經網路方法通常需要將人臉作為一個一維向量輸入,因此輸入節點龐大,其識別重要的一個目標就是降維處理。
PCA的演算法描述:利用主元分析法 (即 Principle Component Analysis,簡稱 PCA)進行識別是由 Anderson和 Kohonen提出的。由於 PCA在將高維向量向低維向量轉化時,使低維向量各分量的方差最大,且各分量互不相關,因此可以達到最優的特徵抽取。
5. 求推薦圖像處理演算法方面的經典書籍
個人認為,真正的經典推薦清華大學出版社的《圖像處理、分析與機器視覺》,這本書由淺入深。數字圖像處理這本書很經典,但只能算是入門,講的更多是圖像處理的演算法和基本理論。而《圖像處理、分析與機器視覺》這本書涵蓋了圖像處理演算法、分析和實際的應用。圖像處理說白了是為了圖像特徵提取和分析,然後再到圖像識別等更高級的後續過程。國內大部分圖像處理演算法崗位其實更多是偏向應用方面,所以這本書能讓你對圖像處理行業整個情況更加了解,實用性更強!順便附上電子版,看對你有沒有幫助。h(去掉)ttps://p(去掉)an..com/s/184hg6h1(去掉)ST2Fqijr4FFFuRg 提取:qfid
6. 微博最常訪問演算法
基礎及關聯演算法
這一層演算法的主要作用是為微博推薦挖掘必要的基礎資源、解決推薦時的通用技術問題、完成必要的數據分析為推薦業務提供指導。
這一部分中常用的演算法和技術如下:
分詞技術與核心詞提取
是微博內容推薦的基礎,用於將微博內容轉化為結構化向量,包括詞語切分、詞語信息標注、內容核心詞/實體詞提取、語義依存分析等。
分類與 anti-spam
用於微博內容推薦候選的分析,包含微博內容分類和營銷廣告/色情類微博識別;
內容分類採用決策樹分類模型實現,共 3 級分類體系,148 個類別;營銷廣告/色情類微博的識別,採用貝葉斯與最大熵的混合模型。
聚類技術
主要用於熱點話題挖掘,以及為內容相關推薦提供關聯資源。屬於微博自主研發的聚類技術 WVT 演算法(word vector topic),依據微博內容特點和傳播規律設計。
傳播模型與用戶影響力分析
開展微博傳播模型研究和用戶網路影響力分析(包含深度影響力、廣度影響力和領域內影響力)。
主要推薦演算法
1. Graph-based 推薦演算法
微博具有這樣的特點:用戶貢獻內容,社會化途徑傳播,帶來信息的爆炸式傳播。之所以稱作 graph-based 推薦演算法,而不是業界通用的 memory-based 演算法,主要原因在於:
我們的推薦演算法設計是建立在社交網路之上,核心點在於從社交網路出發,融入信息傳播模型,綜合利用各類數據,為用戶提供最佳的推薦結果;比如很多時候,我們只是信息傳播的關鍵環節,加入必要的推薦調控,改變信息傳播通路,後續的傳播沿著原來的網路自然的傳播。
Feed 流推薦(我們稱作趨勢),是我們最重要的產品,而結果必須包含用戶關系。
從 graph 的宏觀角度看,我們的目標是建立一個具有更高價值的用戶關系網路,促進優質信息的快速傳播,提升 feed 流質量;其中的重要工作是關鍵節點挖掘、面向關鍵節點的內容推薦、用戶推薦。
對這部分的演算法做相應的梳理,如下面的表格:
這樣利用 content-based 很好的解決了冷啟動的問題,又充分發揮了 user-based CF 的作用,實現1+1>2 的效果。
分層模型混合:
很多情況下,一個模型無法很好的得到想要的效果,而分層組合往往會取得比較好的效果,分層模型混合即「將上一層模型的輸出作為下層模型的特徵值,來綜合訓練模型,完成推薦任務「。比如我們在做微博首頁右側的 ctr 預估排序時,採用分層邏輯回歸模型,解決了不同產品間特徵天然缺失與樣本量差異、曝光位置帶來的效果偏差等問題。
7. 求一個遞歸演算法,具體如下,有圖片
//共2個類
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication3
{
class User
{
//此類為實體類,
//id代表此節點的編號,
//money代表此用戶消費,
//tid數組:表示他下面對應的子節點編號組成的數組
private int id;
private double money;
private int[] tid;
public int ID
{
get
{
return id;
}
set
{
id = value;
}
}
public double Money
{
get
{
return money;
}
set
{
money = value;
}
}
public int[] TID
{
get
{
return tid;
}
set
{
tid = value;
}
}
}
}
//執行類
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
User u1 = new User();
u1.Money = 0;
u1.ID = 1;
u1.TID=new int[]{2,3};
User u2 = new User();
u2.Money = 0;
u2.ID = 2;
u2.TID = new int[] {4,5};
User u3 = new User();
u3.Money = 0;
u3.ID = 3;
u3.TID = new int[] { 6,7 };
User u4 = new User();
u4.Money = 0;
u4.ID = 4;
u4.TID = new int[] { 8, 9 };
User u5 = new User();
u5.Money = 0;
u5.ID = 5;
u5.TID = new int[] { 10, 11 };
User u6 = new User();
u6.Money = 0;
u6.ID = 6;
u6.TID = new int[] { 12, 13 };
User u7 = new User();
u7.Money = 0;
u7.ID = 7;
u7.TID = new int[] { 14, 15 };
User u8 = new User();
u8.Money = 30000;
u8.ID = 8;
User u9 = new User();
u9.Money = 30000;
u9.ID = 9;
User u10 = new User();
u10.Money = 30000;
u10.ID = 10;
User u11 = new User();
u11.Money = 30000;
u11.ID = 11;
User u12 = new User();
u12.Money = 30000;
u12.ID = 12;
User u13 = new User();
u13.Money = 30000;
u13.ID = 13;
User u14 = new User();
u14.Money = 30000;
u14.ID = 14;
User u15 = new User();
u15.Money = 30000;
u15.ID = 15;
//u1-u15代表15個模擬的節點,大致關系如你圖所示
Dictionary<int, User> dict = new Dictionary<int, User>();
dict.Add(1, u1);
dict.Add(2, u2);
dict.Add(3, u3);
dict.Add(4, u4);
dict.Add(5, u5);
dict.Add(6, u6);
dict.Add(7, u7);
dict.Add(8, u8);
dict.Add(9, u9);
dict.Add(10, u10);
dict.Add(11, u11);
dict.Add(12, u12);
dict.Add(13, u13);
dict.Add(14, u14);
dict.Add(15, u15);//將所有模擬數據放入字典表<id號,User實體類>
Console.Write(caculateFatherMoeny(u1, dict));
Console.ReadLine();
}
//取得當前User對象下所有子節點消費數的總和
public static double sumAllMoney(User u, Dictionary<int, User> dict)
{
double sumMoney = 0;
foreach(int i in u.TID)
{
User temp = dict[i];
sumMoney += temp.Money;
if (temp.TID != null && temp.TID.Length > 0)
{
sumMoney += sumAllMoney(temp, dict);
}
}
return sumMoney;
}
//取得當前User對象下所有一級子節點的所有子節點的消費數總和,並根據每一個二級子節點數值乘以相對應的百分比後取得的和(有點繞)
public static double sumChildren(User u, Dictionary<int, User> dict)
{
double sumChildrenMoney = 0;
foreach (int i in u.TID)
{
User temp = dict[i];
double childMoney =0;
if (temp.TID != null && temp.TID.Length > 0)
{
childMoney += sumAllMoney(temp, dict);
}
sumChildrenMoney += getProfit( childMoney);
}
return sumChildrenMoney;
}
//取得當前節點應該得到的利潤
public static double caculateFatherMoeny(User u, Dictionary<int, User> dict)
{
return getProfit(sumAllMoney(u, dict)) - sumChildren(u, dict);
}
//根據消費數值選取相應的百分比後得出的利潤值
public static double getProfit(double money)
{
Tree tree = new Tree();
tree.Nodes
if (money <= 30000)
return money * 0.0011;
else if (money <= 60000)
return money * 0.0012;
else if (money <= 90000)
return money * 0.0013;
else if (money <= 120000)
return money * 0.0014;
else if (money <= 150000)
return money * 0.0015;
else if (money <= 180000)
return money * 0.0016;
else if (money <= 210000)
return money * 0.0017;
else
return money * 0.0018;
}
}
}
呼呼
8. 推薦演算法簡介
在這個時代,無論是信息消費者還是信息生產者都遇到了很大的挑戰:作為信息消費者,如何從大量信息中找到自己感興趣的信息是一件非常困難的事情;作為信息生產者, 如何讓自己生產的信息脫穎而出,受到廣大用戶的關注,也是一件非常困難的事情。推薦系統就是解決這一矛盾的重要工具。推薦系統的任務就是聯系用戶和信息,一方面幫助用戶發現對自己有價值的信息,另一方面讓信息能夠展現在對它感興趣的用戶面前,從而實現信息消費者和信息 生產者的雙贏。和搜索引擎不同的是,推薦系統不需要用戶提供明確的需求,而是通過分析用戶的歷史行為給用 戶的興趣建模,從而主動給用戶推薦能夠滿足他們興趣和需求的信息 個性化推薦的成功需要兩個條件。第一是存在 信息過載 ,因為如果用戶可以很容易地從所有物品中找到喜歡的物品,就不需要個性化推薦。第二用 戶大部分時候沒有特別明確的需求 ,因為用戶沒有明確的需求,可以直接通過搜索引擎找到感興趣的物品。
一個完整的推薦系統一般存在3個參與方:用戶、物品提供者和提供推薦系統的網站。以圖書推薦為例, 首先,推薦系統需要滿足用戶的需求,給用戶推薦那些令他們感興趣的圖書。其次,推薦系統要讓各出版社的書都能夠被推薦給對其感興趣的用戶,而不是只推薦幾個大型出版社的書。最後, 好的推薦系統設計,能夠讓推薦系統本身收集到高質量的用戶反饋,不斷完善推薦的質量,增加 用戶和網站的交互,提高網站的收入。因此在評測一個推薦演算法時,需要同時考慮三方的利益, 一個好的推薦系統是能夠令三方共贏的系統。
推薦系統中,主要有3種評測推薦效果的實驗方法,即離線實驗(offline experiment)、用戶調查(user study)和在線實驗(online experiment)。
2.1 離線實驗
離線實驗的方法一般由如下幾個步驟構成: (1) 通過日誌系統獲得用戶行為數據,並按照一定格式生成一個標準的數據集; (2) 將數據集按照一定的規則分成訓練集和測試集; (3) 在訓練集上訓練用戶興趣模型,在測試集上進行預測; (4) 通過事先定義的離線指標評測演算法在測試集上的預測結果。
從上面的步驟可以看到,推薦系統的離線實驗都是在數據集上完成的,也就是說它不需要一個實際的系統來供它實驗,而只要有一個從實際系統日誌中提取的數據集即可。這種實驗方法的 好處是不需要真實用戶參與,可以直接快速地計算出來,從而方便、快速地測試大量不同的演算法。它的主要缺點是無法獲得很多商業上關注的指標,如點擊率、轉化率等,而找到和商業指標非常相關的離線指標也是很困難的事情
2.2 用戶調查
3.3 在線實驗
在完成離線實驗和必要的用戶調查後,可以將推薦系統上線做 AB測試 ,將它和舊的演算法進行比較。 AB測試 是一種很常用的在線評測演算法的實驗方法。它通過一定的規則將用戶隨機分成幾組,並對不同組用戶採取不同的演算法,然後通過統計不同組用戶的各種不同的評測指標比較不同演算法的好壞。 AB測試的優點是可以公平獲得不同演算法實際在線時的性能指標,包括商業上關注的指標。 AB測試的缺點主要是周期比較長,必須進行長期的實驗才能得到可靠的結果。因此一般不會用 AB測試測試所有的演算法,而只是用它測試那些在離線實驗和用戶調查中表現很好的演算法。其次, 一個大型網站的AB測試系統的設計也是一項復雜的工程。
一般來說,一個新的推薦演算法最終上線,需要完成上面所說的3個實驗。 1)首先,需要通過離線實驗證明它在很多離線指標上優於現有的演算法。 2)然後,需要通過用戶調查確定它的用戶滿意度不低於現有的演算法。 3)最後,通過在線的AB測試確定它在我們關心的指標上。
本節將介紹各種推薦系統的評測指標。這些評測指標可用於評價推薦系統各方面的性能。這 些指標有些可以定量計算,有些只能定性描述,有些可以通過離線實驗計算,有些需要通過用戶 調查獲得,還有些只能在線評測。
(1) 用戶滿意度
用戶作為推薦系統的重要參與者,其滿意度是評測推薦系統的最重要指標。但是,用戶滿意度沒有辦法離線計算,只能通過用戶調查或者在線實驗獲得。
在在線系統中,用戶滿意度主要通過一些 對用戶行為的統計得到 。比如在電子商務網站中,用戶如果購買了推薦的商品,就表示他們在一定程度上滿意。因此,我們可以 利用購買率度量用 戶的滿意度 。此外,有些網站會通過設計一些用戶 反饋界面收集用戶滿意度 。比如在視頻網站中,都有對推薦結果滿意或者不滿意的 反饋按鈕 ,通過統計兩種按鈕的單擊情況就可以度量系統的用戶滿意度。更一般的情況下,我們可以用 點擊率、用戶停留時間和轉化率等指標度量 用戶的滿意度。
(2) 預測准確度
預測准確度度量一個推薦系統或者推薦演算法預測用戶行為的能力。這個指標是最重要的推薦系統離線評測指標
在計算該指標時需要有一個離線的數據集,該數據集包含用戶的歷史行為記錄。然後,將該數據集通過時間分成訓練集和測試集。最後,通過在訓練集上建立用戶的行為和興趣模型預測用戶在測試集上的行為,並計算預測行為和測試集上實際行為的重合度作為預測准確度。 預測准確度指標有分為以下幾種:
評分預測:
預測用戶對物品評分的行為成為評分預測,在評分預測中,預測准確度一般通過均方根誤差RMSE和平均絕對誤差MAE計算,對於測試集中的一個用戶u和物品i,令[圖片上傳失敗...(image-62a797-1560412790460)] 是用戶u對物品i的實際評分,而[圖片上傳失敗...(image-28cfbc-1560412790460)] 是推薦演算法給出的預測評分,那麼RMSE定義為:
其中T為樣本個數
MAE採用絕對值計算預測誤差,它的定義為:
TopN推薦
網站在提供推薦服務時,一般是給用戶一個個性化的推薦列表,這種推薦叫做TopN推薦。TopN推薦的預測准確率一般通過准確率(precision)/召回率(recall)度量。 令R(u)是根據用戶在訓練集上的行為給用戶作出的推薦列表,而T(u)是用戶在測試集上的行為列表。那麼,推薦結果的召回率定義為:
推薦結果准確率定義:
(3) 覆蓋率
覆蓋率(coverage)描述一個推薦系統對物品長尾的發掘能力。覆蓋率有不同的定義方法,最簡單的定義為推薦系統能夠推薦出來的物品占總物品集合的比例。假設系統的用戶集合U,推薦系統給每個用戶推薦一個長度為N的物品集合R(u)。那麼推薦系統的覆蓋率可以通過下面的公式計算:
I為總物品數
此外,從上面的定義也可以看到,熱門排行榜的推薦覆蓋率是很低的,它只會 推薦那些熱門的物品,這些物品在總物品中占的比例很小。一個好的推薦系統不僅需要有比較高的用戶滿意度,也要有較高的覆蓋率。
但是上面的定義過於粗略。覆蓋率為100%的系統可以有無數的物品流行度分布。為了更細致地描述推薦系統發掘長尾的能力,需要統計推薦列表中不同物品出現次數的分布。如果所有的 物品都出現在推薦列表中,且出現的次數差不多,那麼推薦系統發掘長尾的能力就很好。因此, 可以通過研究物品在推薦列表中出現次數的分布描述推薦系統挖掘長尾的能力。如果這個分布比 較平,那麼說明推薦系統的覆蓋率較高,而如果這個分布較陡峭,說明推薦系統的覆蓋率較低。 在資訊理論和經濟學中有兩個著名的指標可以用來定義覆蓋率。第一個是信息熵:
其中:n代表推薦列表中物品類別個數,p(i)代表每個類別的所佔的比率
第二個指標是基尼系數:
(4) 多樣性
為了滿足用戶廣泛的興趣,推薦列表需要能夠覆蓋用戶不同的興趣領域,即推薦結果需要具有多樣性。多樣性推薦列表的好處用一句俗話表示就是(不在一棵樹上弔死)。盡管用戶的興趣在較長的時間跨度中是一樣的。但具體到用戶訪問推薦系統的某一時刻,其興趣往往是單一的,那麼如果推薦列表只能覆蓋用戶的一個興趣點,而這個興趣點不是用戶這個時刻的興趣點,推薦結果就不會讓用戶滿意。反之如果推薦列表表較多樣,覆蓋用戶絕大多數的興趣點,那麼久會增加用戶找到感興趣物品的概率。因此給用戶的推薦列表也需要滿足用戶廣泛的興趣,即具有多樣性。
多樣性描述了推薦列表中物品兩兩之間的不相似性,因此,多樣性和相似性是對應的。假設s(i, j) ∈Î[0,1] 定義了物品i和j之間的相似度,那麼用戶u的推薦列表R(u)的多樣性定義如下:
而推薦系統的整體多樣性可以定義為所有用戶推薦列表多樣性的平均值:
(5) 新穎性
新穎的推薦是指給用戶推薦那些他們以前沒有聽說過的物品。在一個網站中 實現新穎性 的最簡單辦法是,把那些用戶之前在網站中對其有過行為的物品從推薦列表中過濾掉。比如在一個視 頻網站中,新穎的推薦不應該給用戶推薦那些他們已經看過、打過分或者瀏覽過的視頻。 評測新穎度的最簡單方法是利用推薦結果的平均流行度,因為越不熱門的物品越 可能讓用戶覺得新穎。因此,如果推薦結果中物品的平均熱門程度較低,那麼推薦結果就可能有比較高的新穎性。
(6) 驚喜度
驚喜度(serendipity)是最近這幾年推薦系統領域最熱門的話題。如果推薦結果和用戶的歷史興趣不相似,但卻讓用戶覺得滿意,那麼就可以說推薦結果的驚喜度很高,而推薦的新穎性僅僅取決於用戶是否聽說過這個推薦結果。提高推薦驚喜度需要提高推薦結果的用戶滿意度,同時降低推薦結果和用戶歷史興趣的相似度。
(7) 信任度
度量推薦系統的信任度只能通過問卷調查的方式,詢問用戶是否信任推薦系統的推薦結果。 提高推薦系統的信任度主要有兩種方法。首先需要增加推薦系統的透明度(transparency), 而增加推薦系統透明度的主要辦法是提供推薦解釋。只有讓用戶了解推薦系統的運行機制,讓用 戶認同推薦系統的運行機制,才會提高用戶對推薦系統的信任度。其次是考慮用戶的社交網路 信息,利用用戶的好友信息給用戶做推薦,並且用好友進行推薦解釋。這是因為用戶對他們的 好友一般都比較信任,因此如果推薦的商品是好友購買過的,那麼他們對推薦結果就會相對比較信任
(8) 實時性
在很多網站中,因為物品(新聞、微博等)具有很強的時效性,所以需要在物品還具有時效 性時就將它們推薦給用戶。 推薦系統的實時性包括兩個方面。首先,推薦系統需要實時地更新推薦列表來滿足用戶新的 行為變化。實時性的第二個方面是推薦系統需要能夠將新加入系統的物品推薦給用戶。這主要考驗了推 薦系統處理物品冷啟動的能力。
(9) 健壯性
健壯性(即robust,魯棒 性)指標衡量了一個推薦系統抗擊作弊的能力。演算法健壯性的評測主要利用模擬攻擊。首先,給定一個數據集和一個演算法,可以用這個演算法 給這個數據集中的用戶生成推薦列表。然後,用常用的攻擊方法向數據集中注入雜訊數據,然後 利用演算法在注入雜訊後的數據集上再次給用戶生成推薦列表。最後,通過比較攻擊前後推薦列表 的相似度評測演算法的健壯性。如果攻擊後的推薦列表相對於攻擊前沒有發生大的變化,就說明算 法比較健壯
(10) 商業目標
很多時候,網站評測推薦系統更加註重網站的商業目標是否達成,而商業目標和網站的盈利模式是息息相關的
(11) 總結
上一節介紹了很多評測指標,但是在評測系統中還需要考慮評測維度,比如一個推薦演算法, 雖然整體性能不好,但可能在某種情況下性能比較好,而增加評測維度的目的就是知道一個演算法 在什麼情況下性能最好。這樣可以為融合不同推薦演算法取得最好的整體性能帶來參考。
一般來說,評測維度分為如下3種。 1) 用戶維度 :主要包括用戶的人口統計學信息、活躍度以及是不是新用戶等。 2) 物品維度 :包括物品的屬性信息、流行度、平均分以及是不是新加入的物品等。 3) 時間維度 :包括季節,是工作日還是周末,是白天還是晚上等。 如果能夠在推薦系統評測報告中包含不同維度下的系統評測指標,就能幫我們全面地了解推 薦系統性能,找到一個看上去比較弱的演算法的優勢,發現一個看上去比較強的演算法的缺點。
9. 推薦演算法有哪些
推薦演算法大致可以分為三類:基於內容的推薦演算法、協同過濾推薦演算法和基於知識的推薦演算法。 基於內容的推薦演算法,原理是用戶喜歡和自己關注過的Item在內容上類似的Item,比如你看了哈利波特I,基於內容的推薦演算法發現哈利波特II-VI,與你以前觀看的在內容上面(共有很多關鍵詞)有很大關聯性,就把後者推薦給你,這種方法可以避免Item的冷啟動問題(冷啟動:如果一個Item從沒有被關注過,其他推薦演算法則很少會去推薦,但是基於內容的推薦演算法可以分析Item之間的關系,實現推薦),弊端在於推薦的Item可能會重復,典型的就是新聞推薦,如果你看了一則關於MH370的新聞,很可能推薦的新聞和你瀏覽過的,內容一致;另外一個弊端則是對於一些多媒體的推薦(比如音樂、電影、圖片等)由於很難提內容特徵,則很難進行推薦,一種解決方式則是人工給這些Item打標簽。 協同過濾演算法,原理是用戶喜歡那些具有相似興趣的用戶喜歡過的商品,比如你的朋友喜歡電影哈利波特I,那麼就會推薦給你,這是最簡單的基於用戶的協同過濾演算法(user-based collaboratIve filtering),還有一種是基於Item的協同過濾演算法(item-based collaborative filtering),這兩種方法都是將用戶的所有數據讀入到內存中進行運算的,因此成為Memory-based Collaborative Filtering,另一種則是Model-based collaborative filtering,包括Aspect Model,pLSA,LDA,聚類,SVD,Matrix Factorization等,這種方法訓練過程比較長,但是訓練完成後,推薦過程比較快。 最後一種方法是基於知識的推薦演算法,也有人將這種方法歸為基於內容的推薦,這種方法比較典型的是構建領域本體,或者是建立一定的規則,進行推薦。 混合推薦演算法,則會融合以上方法,以加權或者串聯、並聯等方式盡心融合。 當然,推薦系統還包括很多方法,其實機器學習或者數據挖掘裡面的方法,很多都可以應用在推薦系統中,比如說LR、GBDT、RF(這三種方法在一些電商推薦裡面經常用到),社交網路裡面的圖結構等,都可以說是推薦方法。
10. 看圖片,兩個演算法哪個對
演算法的解釋如下(見圖)