劉淑英 鄒燕飛 李依橋 趙瑤瑤 王偉

摘要:約會網站數據量非常大,如何從眾多數據對象中,選擇適合自己的人群,成為數據分析中的一個研究問題。本文主要闡述了該模型的具體實現過程,主要包括數據采集、數據歸一化處理、構造算法模型、評估算法模型。通過采用實例數據集進行模型的訓練和測試,實驗結果表明:該模型能較準確的進行約會對象的匹配,測試誤差較小。
關鍵詞:機器學習;KNN算法;Python
中圖分類號:TP391 文獻標識碼:A 文章編號:1007-9416(2019)10-0128-02
0 引言
如今網站的快速發展,人們的生活和工作都離不開網絡。人們的生活節奏也在逐漸加快,工作越來越忙了。約會網站吸納了眾多的單身青年參與,積累了大量的用戶資源。而且我國廣大的上班族群體為約會網站提供了良好的用戶基礎[1]。一個好的約會網站可以帶動婚戀等多種產業的發展,但是目前的約會網站對約會對象的數據處理有時候不夠準確,約會配對成功率不夠高。通過對網站數據進行分析,采用KNN算法較好的完成約會配對,為網站用戶提供較好的服務。
1 KNN算法
KNN,也稱K-最近鄰居,是機器學習算法最簡單的一種[2-3]。它既可以用來分類,也可以是回歸方法。它把實例的特征向量作為輸入,再計算訓練集與新數據特征值之間的距離,之后選出距離k個最近的分類。如果k=1,最近鄰類就是待測數據。KNN算法主要涉及三個問題:距離度量,k值選擇和分類決策規則。我們最主要討論分類決策規則。分類決策規則就是指多數投票,或基于距離的加權投票。由輸入實例的k個鄰近訓練實例中的多數類別決定輸入實例的類別[4-5]。
2 模型實現
本模型使用的樣本數據一共有1000行,該模型采用80%的數據作為訓練集,20%的數據作為測試集來進行模型訓練,數據預處理使用的方法是歸一化。模型具體實現分為六個步驟,分別是采樣數據、樣本數據可視化、預處理、獲取模型、模型訓練、預測。我們的測試數據主要包括婚戀人員的特征,分別是年飛行??屠锍虜?、玩視頻耗時百分比、周消耗冰激凌公升數,我們首先標記此部分數據,1代表一點也不喜歡,2代表有一點喜歡,3代表非常喜歡。為了更直觀的的理解樣本數據,數據采用Matplotlib庫進行繪圖分析,如圖1所示。
2.1 預處理
根據前面所述可知,三個特征值之間的差距有點大,所以在模型訓練之前,必須把數據放到同一量級,即數據預處理。本模型采用歸一化方法,目的是把不一樣的特征數據縮放到相同的一個相似區間中。
2.2 獲取模型
該部分功能是獲取模型,也就是構造KNN分類器。核心思想就是,如果一個樣本在特征空間中的k個最相似的樣本中的大多數屬于某一個類別,則該樣本也屬于這個類別。
該過程通過計算各個訓練數據與測試數據之間的距離,按照距離遞增關系排序,選取距離最小的k個點,確定k個點所在類別的出現頻率,返回前k個點中出現頻率最高的類別作為測試數據的預測分類。這樣就構造出了KNN分類器。
2.3 模型訓練
我們講1000個樣本數據劃分為訓練集和測試集,該部分的核心代碼如下所示。
for i in range(num_test_vecs):
classifier_result = classify0(norm_mat[i, :], norm_mat[num_test_vecs:m, :],
dating_labels[num_test_vecs:m], 4)
if classifier_result != dating_labels[i]:
error_count += 1.0
right_ratio = 1 - error_count / float(num_test_vecs)
2.4 樣例預測
該部分功能是對新數據進行預測分類,用戶輸入待約會對象的數據,預測出這條數據的分類,可以判斷喜歡程度。核心代碼如下。
def classify_main():
result_list = ['一點也不喜歡', '有點喜歡', '非常喜歡']
ff_miles = float(input("每年獲得的飛行??屠锍虜担?))
percent_tats = float(input("玩視頻游戲所消耗時間百分比:"))
ice_cream = float(input("每周消費的冰淇淋公升數:"))
dating_data_mat,dating_labels = init_data()
norm_mat,diff_dt,min_value = feature_scaling(dating_data_mat)
in_arr = array([ff_miles, percent_tats, ice_cream])
classifier_result = classify0((in_arr - min_value)/diff_dt, norm_mat, dating_labels, 3)
print("你對這個人的喜歡程度:",result_list[classifier_result-1])
3 結語
本文通過采用KNN算法對婚戀數據數據進行分析,采用Python數據可視化庫中的函數和Matplotlib庫完成對數據的分類。通過測試結果,可知,模型學習的準確率達到了92%,基本能夠滿足我們的要求。
參考文獻
[1] 黃鶴.關于我國婚戀網站網絡交友的研究[D].武漢:華中師范大學,2011.
[2] 石曉宇.基于Google App Engine的移動信息服務的研究[D].大連:大連理工大學,2011.
[3] 黎爽.基于Python科學計算包的金融應用實現[D].南昌:江西財經大學,2017.
[4] 胡元,石冰.基于區域劃分的KNN文本快速分類算法研究[J].計算機科學,2012,39(10):182-186.
[5] 康春花,張淑君,李元白,等.KNN認知診斷法及其應用[J].江西師范大學學報(自然科學版),2019,43(02):135-141+159.