基于KNN算法的约会网站配对模型的应用研究

2019-01-08 08:37刘淑英邹燕飞李依桥赵瑶瑶王伟
数字技术与应用 2019年10期
关键词:机器学习

刘淑英 邹燕飞 李依桥 赵瑶瑶 王伟

摘要:约会网站数据量非常大,如何从众多数据对象中,选择适合自己的人群,成为数据分析中的一个研究问题。本文主要阐述了该模型的具体实现过程,主要包括数据采集、数据归一化处理、构造算法模型、评估算法模型。通过采用实例数据集进行模型的训练和测试,实验结果表明:该模型能较准确的进行约会对象的匹配,测试误差较小。

关键词:机器学习;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.

猜你喜欢
机器学习
前缀字母为特征在维吾尔语文本情感分类中的研究
基于支持向量机的金融数据分析研究