趙琳 徐明昊
摘 要: 高校社團管理系統(tǒng)所采用的B/S方式鮮有智能推薦功能,推廣效率低,資源浪費明顯,依賴熟人系統(tǒng)。為了克服這些問題,應用聚類和KNN算法集成為元算法,并設計和實現(xiàn)了基于Django框架的智能社團推薦系統(tǒng)。
關(guān)鍵詞: Django; 聚類; KNN算法; 社團推薦
中圖分類號: TP277
文獻標志碼: A
文章編號:1007-757X(2019)06-0122-04
Abstract: There are few intelligent recommendation functions in the B/S mode used in college community management systems. The way isolated introduced by the president campus publicity results in inefficiency and obvious waste of resources. For this reason, this paper chooses clustering KNN algorithm, and designs and implements an intelligent community recommendation system based on Django framework.
Key words: Django; Python language; Clustering; KNN algorithm; Community recommendation
0?引言
社團在大學生第二課堂成長中起著重要作用。目前,高校社團系統(tǒng)管理模式多采用B/S方式。王翠香、邵星等人[1]設計了一種基于Android 手機OS平臺的社團管理系統(tǒng).鈕永莉、戴子東等人[2]使用JSP技術(shù)設計了一種MVC框架的社團管理系統(tǒng)。張明東、戴丹丹等人[3]提出了一種基于Java EE的社團管理方案。王金龍、孫月興等人[4]實現(xiàn)了一種基于Python的社團管理系統(tǒng)。這些系統(tǒng)通過主流技術(shù)滿足了社團管理增、刪、改、查等基本要求,對于大學生個性化智能推薦的需求沒有涉及。
李嘉琪、李俊、李婷、付麟惠等人[5]通過為每個社團添加類型標簽匹配學生用戶愛好的方法實現(xiàn)社團推薦。該方法策略單一不能滿足多需求精準推薦。石鎧、任濼錕、彭一鳴、李慧嘉等人[6]通過圖理論構(gòu)建最優(yōu)的重疊社團結(jié)構(gòu)的方法聚類領袖社團實現(xiàn)推薦,但計算復雜度受限于特定帶寬,影響了應用范圍。王玙、劉東蘇等人[7]提出了聯(lián)合聚類協(xié)同過濾算法,通過提取相似用戶偏好的方法建立屬性相似性與打分相似性相結(jié)合的推薦算法,此方法用戶與社團屬性的耦合還不高,依賴于熟人環(huán)境,對于新生群體的陌生群體應用效果有限。
綜上所述,本文針對現(xiàn)有社團管理系統(tǒng)智能推薦功能薄弱,著眼強化用戶與社團屬性耦合,提出了一種將聚類、kNN算法集成為元算法的Django架構(gòu)下的智能社團推薦系統(tǒng),針對大學生群體,提高推薦效率。
1?相關(guān)技術(shù)
1.1?系統(tǒng)架構(gòu)
Django是Python web中最流行和應用最多的輕量級開發(fā)框架之一[9]。他是一種基于MTV模式的架構(gòu),核心包括:數(shù)據(jù)模型(ORM)映射器,請求路由(url分發(fā)器),視圖(請求響應處理模塊)和前端模板(用戶交互)。預設的用戶系統(tǒng)、賬號管理、安全防范等系統(tǒng)功能為web開發(fā)帶來很大方便,大量減少了代碼編寫量,提高了各類應用系統(tǒng)的開發(fā)效率,其架構(gòu)如圖1所示。
1.2?其他技術(shù)
Bootstrap是一款基于HTML、CSS、JavaScript的前端開發(fā)框架,擁有大量完備的Web組件。Jquery封裝了JavaScript常用的功能代碼。SQLite是一款輕量級嵌入型關(guān)系數(shù)據(jù)庫。Redis數(shù)據(jù)庫是一款高性能鍵-值數(shù)據(jù)庫。
2?需求設計[8]
從本應用的具體需求看,智能社團推薦系統(tǒng)需要社團發(fā)布、新生注冊、愛好交流、匹配社團推薦、系統(tǒng)管理等5個功能需求。核心功能為根據(jù)新生的信息進行個性社團推薦。如圖2所示。
3?元算法
3.1?算法思想
聚類算法是一種無監(jiān)督的學習,適合在未知分類的情況下進行全自動分類。該算法試圖將相似對象歸入同一簇。
本文采用k-均值聚類算法。其具體思想是:隨機確定未知樣本集合中k個初始點作為質(zhì)心。為每個點找距離其最近的質(zhì)心,并將每個點分配至所對應的簇中。然后更新該簇所有點的平均值。
K鄰近算法是指存在一個樣本數(shù)據(jù)集合,且樣本集中每個數(shù)據(jù)都存在標簽,即我們知道樣本集中每一數(shù)據(jù)與所屬分類的對應關(guān)系。輸入沒有標簽的新數(shù)據(jù)后,將新數(shù)據(jù)的每個特征與樣本集中數(shù)據(jù)對應的特征進行比較,然后算法提取樣本集中特征最相似數(shù)據(jù)(最近鄰)的分類標簽。一般只選擇樣本數(shù)據(jù)集中前k個最相似的數(shù)據(jù)。出現(xiàn)次數(shù)最多的分類,作為新數(shù)據(jù)的分類。其缺點在于計算未知分類樣本時要和已知集合中每個樣本進行距離計算,對于大樣本空間時間復雜度高。
本文將以上兩種算法集成為元算法,首先在大學新生數(shù)據(jù)集上應用k-均值聚類算法進行預分類。再在每個子類中的新生與社團樣本集中與該類新生類別相似的社團上應用KNN算法,降低KNN算法應用時的樣本數(shù)量,達到提高算法效率,在不依賴熟人的情況下進行有效推薦。
3.2?關(guān)鍵問題
(1) 新生數(shù)據(jù)抽象。新生關(guān)鍵屬性由用戶ID,興趣愛好,投入時間組成。數(shù)據(jù)模型偽代碼如下:
模型中User對象為Django內(nèi)置對象。
(2) 社團數(shù)據(jù)抽象,社團屬性主要由以下字段組成如表1所示。
(3) K-均值聚類算法[10]
本應用中,每個類的聚類中心取該類樣本的平均值。用歐式距離式如式(1)進行聚類中心與樣本相似性計算,以各聚類平方和最小為聚類目標,如式(2)。
S1:隨機選取k個新生樣本作為聚類中心
S2:按照公式(1)計算所有新生樣本的歐式距離
S3:將每個新生分配至與其距離最近的聚類中
S4:用聚類中所有新生樣本的均值更新聚類中心,按照公式(2)計算目標函數(shù)值;
S5:根據(jù)目標函數(shù)值判斷結(jié)束事件觸發(fā)。
(4) 距離計算
分別從新生數(shù)據(jù)模型中和社團數(shù)據(jù)模型中建立新生三元組和社團三元組按照公式(1),進行距離D=新生(Hobby, Inputtime, Clusterlabel)-社團(Hobby, Inputtime, Class)計算。
(5) 聚類中k值確定
由于預先不知新生數(shù)據(jù)可分為幾類,因此,本文根據(jù)肘部法則對聚類數(shù)量進行估計。隨機選取不同專業(yè)新生數(shù)據(jù)中的10人進行評估,分別對這10個同學進行k值為1-9的分類,以平均半徑做為簇指標,不同k值與其平均半徑的關(guān)系如圖3所示。
隨著k值的增大,平均半徑的畸變程度會減小;每個類中的學生數(shù)伴隨減少,相反,隨著k值繼續(xù)增大,平均半徑畸變程度的改善效果會不斷減低?;兂潭认陆捣茸畲蟮奈恢眉礊橹獠?。從圖3中可估計得k為4。
3.3?算法分析
聚類算法中k值即為預分類的聚類個數(shù),本文取4,KNN算法中k值是指被測分類樣本最近的前k個樣本的個數(shù),本文為了提供更多選擇k取12。由于通過聚類操作進行了預分類,因此在進行新生社團推薦時,不需要將所有新生與社團進行距離計算,只在每個新生子類并與該類標簽相似的社團上進行距離計算,從而降低了KNN算法的時間復雜度。
3.4?算法流程圖
如圖4所示。
4?系統(tǒng)設計
社團推薦系統(tǒng)框圖如圖5所示。
5?系統(tǒng)開發(fā)
5.1?開發(fā)環(huán)境:
(1) 操作系統(tǒng)及主語言:Windows 7 64位,python 3.7.2。
(2) 系統(tǒng)框架及第三方庫:Django 2.1.5,numpy 1.16.1,matplotlib 3.0.2。
(3) 前端技術(shù):JavaScript,bootstrap-3.3.7-dist,jquery-1.11.1。
(4) 后端數(shù)據(jù)庫:SQLite3,Redis-x64-3.2.100。
5.2?開發(fā)過程
(1) 建立工程:創(chuàng)建名為mysite的工程項目并進行項目manage.py,settings.py,
urls.py等文件配置;
(2) 創(chuàng)建應用:本項目共創(chuàng)建兩個應用,即Freshmen應用和Association應用;
(3) 設計Modle:本項目分別在Freshmen和Association應用中設計新生數(shù)據(jù)模型和社團數(shù)據(jù)模型;
(4) 創(chuàng)建數(shù)據(jù)庫:設置settings數(shù)據(jù)庫屬性,SQLite3數(shù)據(jù)庫為主主數(shù)據(jù)庫用于兩個應用的數(shù)據(jù)存儲,Redis數(shù)據(jù)庫用于社團瀏覽次數(shù)的鍵值對數(shù)據(jù)存儲;
(5) 設計前端模板:在Freshmen應用和Association應用中分別設計用戶管理、社團管理、社團瀏覽、社團介紹、社團推薦等前端頁面。通過bootstrap技術(shù)和query技術(shù)用于前端頁面布局、樣式設計以及數(shù)據(jù)提交等功能實現(xiàn);
(6) 視圖處理:分別在兩個應用的Views.py文件中編寫視圖處理函數(shù),響應request請求,并進行處理;
(7) url路由:本別在項目url、Freshmen應用url和Association應用url中分配前端頁面請求和處理代碼之間的映射。
6?系統(tǒng)測試
本文以某學院80名新生為例進行測試,對這80名新生進行統(tǒng)一注冊,首先應用k均值聚類算法進行預分類(k取4),聚類結(jié)果如圖6所示。分類后每個新生記錄會產(chǎn)生一個類別標簽,用于和社團集合中的向量進行距離計算。
本系統(tǒng)通過該學院的50個社團進行測試供新生選擇。經(jīng)對新生進行聚類預分類后,將每個類別的新生與社團集合
中相應類別的向量應用KNN算法,將推薦的社團數(shù)量降低,結(jié)果如表2所示。
本系統(tǒng)新生社團推薦結(jié)果頁面如圖7所示。
7?總結(jié)
本文針對現(xiàn)有B/S社團管理系統(tǒng)中智能推薦功能不足的缺點,通過python web技術(shù)設計了一款基于Django框架的社團推薦系統(tǒng)。并以降低歐式距離為基礎的KNN算法計算樣本量為目的,將k均值聚類算法與kNN算法集成為元算法,同時彌補了傳統(tǒng)社團推薦依賴于熟人系統(tǒng)的不足,擴大了社團推薦在新生群體的應用范圍。經(jīng)測試,算法有效降低了計算樣本量,社團推薦系統(tǒng)功能有效。
參考文獻
[1]?王翠香,邵星. 面向Android應用的大學生社團系統(tǒng)設計與實現(xiàn)[J]. 國際IT傳媒品牌,2015(36):52-55.
[2]?鈕永莉,戴子東. 基于MVC框架的高校社團管理系統(tǒng)研究與實現(xiàn)[J].西安文理學院學報(自然科學版),2018(7):84-87.
[3]?張明東,戴丹丹. Java EE下學生信息管理系統(tǒng)的設計與實現(xiàn)[J]. 才智,2018(3):164.
[4]?王金龍,孫月興. 基于Python的高等學校社團信息管理系統(tǒng)[J]. 數(shù)字技術(shù)與應用,2017(8):105-107.
[5]?李嘉琪,李俊,李婷,等. 基于大數(shù)據(jù)的社團個性化推薦系統(tǒng)[J]. 電腦知識與技術(shù),2017(13):60-71.
[6]?石鎧,任濼錕,彭一鳴,等. 基于多節(jié)點社團意識系統(tǒng)的屬性圖聚類算法[J]. 計算機科學,2017(6):433-437.
[7]?王玙,劉東蘇. 基于聯(lián)合聚類與用戶特征提取的協(xié)同過濾推薦算法[J]. 情報學報,2017(8):853-858.
[8]?雷曉薇. 基于Django框架的教學管理系統(tǒng)的研究與實現(xiàn)[J]. 電子設計工程,2018(18): 39-43.
[9]?楊志慶. 基于的系統(tǒng)的開發(fā)與實現(xiàn)[J]. 機電一體化,2013(9):70-72.
[10]?Peter Harrington,《機器學習實戰(zhàn)》[M]. 北京:人民郵電出版社,2017:187-188.
[11]?張俊暉. Django框架在web開發(fā)中的應用[J]. 農(nóng)業(yè)網(wǎng)絡信息,2015(2):51-52.
(收稿日期: 2018.11.23)