机器学习——KNN算法(机器学习实战)

590 阅读2分钟

「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

KNN算法

(机器学习实战) K-近邻算法采用测量不同特征值之间的距离方法进行分类。 工作原理: 已有一个样本数据集,即训练集,并且训练集的每个数据都有其对应的分类标签。输入没有标签的新数据后,将新数据的每个特征与样本集中的数据对应的特征进行比较,然后算法提取样本集中特征最相似的数据的分类标签。也就是看最相近的k个数据的标签,通过多数表决的方式进行。 这里的k-NN的k即为选择的样本数据集中的前k个最相似的数据,通常k设置为不大于20的整数

实战

通过约会数据进行分类(例子来源于《机器学习实战》) 海伦一直使用在线约会网站寻找适合自己的约会对象。尽管约会网站会推荐不同的 人选,但她并不是喜欢每一个人。经过一番总结,她发现曾交往过三种类型的人:

——不喜欢的人 didntLike ——魅力一般的人 smallDoses ——极具魅力的人 largeDoses

海伦收集约会数据已经有了一段时间,她把这些数据存放在文本文件datingTest.txt中,每 个样本数据占据一行,总共有1000行。海伦的样本主要包含以下3种特征:

——每年获得的飞行常客里程数 ——玩视频游戏所耗时间百分比 ——每周消费的冰淇淋公升数

数据格式如图: ![FQ)W)EEDN2IGI38X]98_$R5.png](p3-juejin.byteimg.com/tos-cn-i-k3…?) 采用KNN算法帮助海伦分类约会对象: 使用sklearn库中的knn算法解决。 第一步:抽取数据

import numpy as np
from numpy import zeros
from sklearn.neighbors import KNeighborsClassifier, RadiusNeighborsClassifier
import matplotlib as mpl
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
import pandas as pd
from sklearn.metrics import accuracy_score
data = pd.read_csv('datingTest.txt', sep='\t', header=None)
X = data.iloc[:, 0:2]
Y = data.iloc[:, -1]

第二步:使用train_test_split抽取占比0.2的数据进行测试

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)

第三步:存储标签

label=[]
for line in Y:
    label.append(line)

最后一步:训练训练集,预测测试集并得出预测正确率

datalist = np.array(data)
mmat(datalist,label)
model=(KNeighborsClassifier(n_neighbors=7))
model.fit(X_train,Y_train)
predictions=model.predict(X_train)
print(predictions)
print(accuracy_score(Y_train, predictions))