1.演算法執行效果圖預覽
最後得到推薦的商品ID號:
推薦商品的ID號: ans = 9838 17582 21911 14902 14902 12352 24732 23071 23499 11790 1547 16550 16550 16550 1133 11330 27415 28391 6672 8193 8193 12168 241 14020 20631 17958 21336 25227 2257 2257 14182 5369 22313 11280 26699 25792 12168 17060 2963 27791 27791 27791 20297 14182 14182 12599 1547 1547 15584 4479 22583 26298 26006 3627 14020 9657 25086 23662 25372 29203 26871 15934 13883 12220 27785 27785 27785 25488 27989 27989 6672 27508 22583 9829 7386 4647 13554 11939 2635 25372 25372 6080 12162 25329 17550 7868 7868 28410 8637 25488 21838 11083 251 6319 6319 2410 23928 19421 13494 7490 23662 14159 11000 11000 12606 21657 4571 15639 12230 24528 17445 1133 11052 23482 23482 23482 23482 23482 23482 22583 241 26969 14902 6672 26722
2.演算法執行軟體版本
matlab2022a
3.演算法理論概述
使用者興趣模型,即對使用者的興趣和愛好的準確描述。而在建立使用者興趣模型的時候,首先需要確定使用者興趣模型的表示形式。因此,使用者興趣模型的表示是使用者興趣模型的一個重要環節。所謂使用者興趣的表示,即個性化資訊推薦的一個重要環節,影響使用者興趣的因素有很多種,比如年齡,學歷,職業等。另外一方面,使用者興趣會隨著時間的變化而變化,這對使用者興趣的表示增加了難度。其中一個最為基礎的使用者興趣表示方法是透過關鍵詞來表示的。但是透過關鍵詞方式的使用者興趣表示方法具有一定的侷限性。這個侷限性,主要是因為關鍵詞無法完全表達出使用者興趣導致的。
使用者興趣模型的構建,其本質就是和使用者興趣相關的資訊的獲取,然後構建一個可以讀取識別這些資訊的數學模型的過程。使用者興趣模型的構建過程如下圖所示。
使用者興趣模型是個性化推薦技術的基礎,透過建立一個優良的使用者興趣模型,可以實現更高效能的推薦系統。從而大大減少了使用者尋找自己感興趣資訊的時間和精力。
協同過濾推薦(Collaborative Filtering Recommendation)技術,在推薦系統中是最為成功的技術之一。協同過濾,被稱為社會過濾或者協作過濾。最早是由Goldberg等學者提出來的,之後發展快速且廣泛。協同過濾方法,首先利用使用者歷史評價的記錄,然後構建出使用者評分矩陣,並且計算專案或使用者之間相似度,最後是採用領域的方法向使用者推薦。協同過濾,根據使用者的歷史喜好資訊,計算使用者之間的距離,然後對商品的評價進行加權評價值,利用目標使用者的最近的鄰居使用者,預測目標使用者對商品的喜好程度,系統根據對商品的喜好程度從而對目標使用者進行個性化推薦。
支援度表示某一關聯規則在資料中出現的普遍程度,即稱為該關聯規則在資料中的支援度,其中支援度的計算公式為:
此外,置信度說明某一關聯規則成立的必然程度,即稱為該關聯規則在資料庫的可信度,其中支援度的計算公式為:
透過判斷支援度和置信度是否超過閾值,來判斷是否產生一個強規則,那麼預先設定這個支援度閾值和置信度閾值是十分重要的,對最後的推薦準確度有著重要影響。 這裡,透過遺傳演算法來最佳化支援度閾值和置信度閾值。
這裡,設定最佳化目標函式為:
其中函式f表示的是當設定不同的支援度閾值和置信度閾值下,整個推薦演算法獲得的推薦正確率,然後透過GA演算法流程圖進行閾值的最佳化。
4.部分核心程式
while gen < MAXGEN; gen P1 = 0.9; P2 = 1-P1; FitnV=ranking(Objv); Selch=select('sus',Chrom,FitnV); Selch=recombin('xovsp', Selch,P1); Selch=mut( Selch,P2); phen1=bs2rv(Selch,FieldD); for a=1:1:NIND if gen == 1 LR(a) = Supp0; else LR(a) = phen1(a,1); end %計算對應的目標值 errs = func_obj(data(Index(1:10000),:),Max_N,LR(a)); E = 1/errs; JJ(a,1) = E; end Objvsel=(JJ+eps); [Chrom,Objv]=reins(Chrom,Selch,1,1,Objv,Objvsel); gen=gen+1; %儲存引數收斂過程和誤差收斂過程以及函式值擬合結論 LR2(gen) = mean(LR); end %畫圖 figure; plot(LR2(3:end),'b-o','linewidth',2); xlabel('Iteration Number'); ylabel('Support value'); grid on; save GA.mat LR2 end load GA.mat figure; plot(LR2(3:end),'b-o','linewidth',2); xlabel('Iteration Number'); ylabel('Support value'); grid on; %************************************************************************** Supp = LR2(end); %支援度閾值 %根據關聯規則進行推薦演算法 %初始商品推薦列表 [P,Support] = func_ProductList(data,Supp); if length(P) > Max_N Len = length(P); [tmps,I] = sort(Support); Index = I(Len-Max_N+1:Len); Recommend_list = P(Index); Support_list = Support(Index); else Recommend_list = P; Support_list = Support; end %獲得最後的推介商品 R1 = [Prod_ID(Recommend_list),Support_list]; save r1.mat R1 P Support Prod_ID disp('推薦商品的ID號:'); Prod_ID(Recommend_list)