吳珂彤,賈雙英,李恒博
(西京學院計算機學院,西安 710000)
當今社會,電影已成為不可或缺的娛樂方式,已經發展出多種多樣的形式供人們體驗電影所帶來的樂趣[1]。為了滿足觀眾的需求,視頻網站開始推出個性化的視頻推薦功能,它可以根據當前的熱門視頻和用戶的個性化數據,為用戶提供更加精準的推薦,從而提高用戶的忠誠度[2]。
這款個性化視頻推薦系統會收集用戶在不同得分區間內的評分,按照電影類型統計每一種類型的電影數目以及平均得分,通過統計與分析,用戶可根據自身偏好進行調整,使推薦更準確。
通過使用本系統,用戶可以根據自己的評分來預測其他電影的評分,并且通過電影的相似性和用戶的相似性來建立聯系,從而實現推薦功能。這樣,用戶只需要給出一部分電影的評分,系統就能夠自動為用戶提供更多的推薦信息,從而有效地解決了初始用戶數據稀疏的情況下的推薦偏差問題。
聚類是一個將某些方面相似的數據成員進行集中、分類、組織的過程,可以有效地將數據集中的相似特征進行歸納和組織,因此屬于無監督學習。
k均值聚類(K-means)是一種非常有效的劃分聚類算法,它以其簡單的操作流程和高效的結果,被廣泛應用于各種聚類算法之中。它的原理是:將一組數據按照一定的距離函數劃分到k個不同的聚類中,每個聚類都有一個特定的參數,以此來實現對數據的有效分類[3]。
假設輸入樣本集為X={x1,x2,…,xm},聚類的簇數量為K,最大迭代次數為N,輸出簇為C={C1,C2,…,Ck}。K-means 算法的基本流程如下所述。
(1)從數據集X中隨機抽取K個樣本作為初始質心,其集合為{μ1,μ2,…,μk},劃分并初始化輸出簇C,初始化結果為
(2)在每個簇C中,計算每個樣本xi與該簇質心向量之間的距離d,根據d的大小,將該樣本xi分配到相對應的簇中,更新輸出簇C;
(3)重新計算各個簇內所有樣本距離的平均值作為新質心,若K個質心向量未發生變化,則進行步驟(4);否則,繼續執行步驟(1)~(3),直至最大迭代次數或聚類完成;
(4)重新劃分輸出簇C。
個性化視頻推薦系統在Jupyter notebook 下運行,使用Python3。
通過個性化視頻推薦系統,我們可以收集和分析不同類型電影的數量和平均得分,從而更準確地了解用戶的偏好,并且可以根據用戶過往的評分預測他們對這些電影的評分,同時還可以通過電影之間的相似性和用戶之間的關系,為用戶提供更加精準的電影推薦。
該數據集來自Movies-lens 用戶評分數據集,包含了9125部電影中的100004個評分和1296個標簽[4]。Movie-lens 根據用戶對一部分電影的評分,預測該用戶對其他電影的評分。系統對用戶的評分情況進行分析,并將結果反饋給用戶,以便用戶更了解自己的評分情況。
Ratings.csv 評分數據文件,包含了一系列用戶對各個電影的評分,評分為0.5~5 星,半星遞增。
Tags.csv 標簽數據文件,是用戶生成的關于電影的標簽,一個單詞或短語。
Movies.csv 電影數據文件,每一行代表一部電影,電影ID、標題、電影流派(列表中選擇:喜劇、冒險、動畫片、紀錄片、科幻片、愛情片,等等)。
2.4.1 計算每位用戶對各類電影的平均評分
通過導入電影數據集和評分數據集,計算每位用戶對各類電影的平均評分,并通過一些偏倚處理,使得聚類可以更準確地定義出用戶的偏好。為簡化編程和程序的整潔,我們將大部分數據預處理過程都存儲在輔助函數helper文件中,可以直接調用。
2.4.2 處理稀疏數據集
想進一步分析用戶對每個電影的評分情況,觀察數據集我們發現,大多數用戶并未接觸過大多數電影,因此他們也沒有給出相應的評分,而這一數據集的值被定義為NaN。這種數據集被稱為“稀疏數據集”。
為了解決這一問題,我們按照獲得評分次數最多的電影和對電影評分次數最多的用戶排序。這樣可以形成更“密集”的區域,使我們能夠查看數據集的頂部數據。便于后續選擇獲得評分次數最多的電影和對電影評分次數最多的用戶。
以愛情片和科幻片為例,對用戶評分進行聚類分析,將用戶對愛情片和科幻片的平均評分數據集進行數據可視化,并取不同的k值進行聚類分析,k= 2,k= 3時的聚類結果分別如圖1、圖2所示。

圖1 k=2時聚類結果

圖2 k=3時聚類結果
k= 2 時,觀察圖1 可以發現,這一聚類結果主要取決于每個用戶對愛情片的評分。如果用戶對愛情片的平均評分超過3 星,則屬于藍色圓點組;如果用戶對愛情片的評分沒有超過3星,則屬于綠色斜十字組。
k=3 時,觀察圖2 可以發現,科幻片平均評分開始起作用了,綜合愛情片和科幻片的平均評分,把用戶分為:喜歡愛情片但是不喜歡科幻片的用戶(藍色三角組);喜歡科幻片但是不喜歡愛情片的用戶(紅色圓點組);既喜歡科幻片又喜歡愛情片的用戶(綠色方形組)。
但k值并不是越大越好,為了聚類效果更好,本系統用“肘部法”選擇最佳k值。
通過肘部法,可以比較k的上升值和使用該k值計算的總誤差分布,從而更好地評估聚類的性能。這種方法的基本思路與網絡搜索相似,即通過遍歷參數k來選擇最小誤差,選取輪廓系數(越接近1性能越好)來衡量聚類效果。在計算輪廓系數時,我們將k步長調整為5,以減少數據量,同時也能夠更快地完成計算。計算出k的上升值和輪廓系數折線圖如圖3所示。

圖3 k值與對應輪廓系數折線圖
結合肘部法和便于可視化考慮,選擇k= 7進行聚類。
3.2.1 最佳k值聚類并熱力圖可視化
用戶對單個影片的評分數據集,經過數據預處理,稀疏數據集已經相對密集,數據集維度很龐大,為了更直觀地識別這些評分以及后續更方便聚類,我們這里使用顏色代替評分數字,用熱力圖進行可視化[5]。每列表示一部電影。每行表示一位用戶。單元格的顏色根據圖表右側的刻度表示用戶對該電影的評分情況。
通過肘部法選擇最佳k值為12,并對聚類結果進行熱力圖可視化,這樣就形成了具有相似評分的用戶聚類,因此通常具有相似的電影品位?;谶@一點,當某個用戶對某部電影沒有評分時(單元格沒有值或熱力圖可視化為白色),我們對該聚類中所有其他用戶的評分取平均值,從而得出該群體對該電影的喜愛程度。聚類結果熱力圖如圖4所示。
3.2.2 個性化評分預測的代碼及結果
從中選擇一個空白單元格。因為用戶沒有對該電影評分,所以是空白狀態。預測代碼:


預測結果:
預測該用戶對此電影的評分:4.5
計算該聚類中每部電影的平均分數,就可以判斷該“品位聚類”對數據集中每部電影的喜歡程度,更好地了解用戶的偏好??梢詫⑺鳛橥扑]引擎,使用戶能夠發現他們可能喜歡的電影。
當用戶訪問本應用時,我們將會提供與他們興趣愛好相匹配的電影,并且根據用戶的評分,從聚類中選擇該用戶尚未評分的最高評分的電影。


選擇用戶id,獲取此用戶的所有評分,從中找到該用戶沒有評分的電影,并計算這些電影的平均評分,進行排序推薦,推薦結果如圖5所示。

圖5 個性化推薦結果
K-means算法因易于操作和對大樣本數據的高效處理能力而得到廣泛的應用。本系統可以精細地統計出不同種類的電影,并對其進行評估,幫助用戶進行個性化的選擇,從而提高推薦的精度。當用戶查看某部電影時,本系統可以通過觀察用戶以往的評分預測他們對這部電影的評分,還可以根據電影相似性以及用戶相似性建立聯系來進行影片推薦。
盡管基于用戶評分的推薦可以提供一定的參考價值,但這種方法也存在一些缺陷,例如:兩個用戶雖然對同一部影片評分相同,但有可能是因為他們對電影的評分標準不一樣;此外,用戶的可靠性也是一個重要的考量因素,現在網絡上存在大量的虛假評分和評論,這些都會影響到用戶的信任度。當前系統存在一些無法解決的挑戰,因此,我們將繼續努力探索更有效的解決方案,以提升系統的性能和可靠性。