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