机器学习—KNN算法-分类及模型选择与调优

KNN算法-分类

样本距离判断:欧氏距离、曼哈顿距离、明可夫斯基距离

KNN算法原理:
        K-近邻算法( K-Nearest Neighbors ,简称 KNN , 根据 K 个邻居样本的类别来判断当前样本的类别 ; 如果一个样本在特征空间中的k 个最相似 ( 最邻近 )样本中的大多数属于某个类别,则该类本也属于这个类别( 近朱者赤近墨者黑 )

        一般情况下,我们需要先指定一个k,当一个新的数据集来临时,我们首先计算这个新的数据跟训练集中的每一个数据的距离,一般使用欧氏距离。然后从中选出距离最近的k个点,这个k一般选取为奇数,方便后面投票决策。在k个点中根据最多的确定新的数据属于哪一类。

KNN算法内容代码

创建数据集x_train, y_train,和一个新的数据x_new, 并将其可视化
import numpy as np
import matplotlib.pyplot as plt

raw_data_x = [[3.39, 2.33],
              [3.11, 1.15],
              [1.38, 3.84],
              [3.53, 4.92],
              [2.24, 2.80],
              [7.42, 4.65],
              [5.71, 3.50],
              [9.12, 2.91],
              [7.79, 3.41],
              [7.98, 0.71]]
raw_data_y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
x_train = np.array(raw_data_x)
y_train = np.array(raw_data_y)

x_new = np.array([8.06, 3.37])
#作散点图
plt.scatter(x_train[y_train==0,0], x_train[y_train==0,1], color='g')
plt.scatter(x_train[y_train==1,0], x_train[y_train==1,1], color='r')
plt.scatter(x_new[0], x_new[1], color='b')
plt.show()

knn基础过程

计算距离
from math import sqrt
distances = [sqrt(np.sum((x_new - x) ** 2)) for x in x_train]
#print(distances)#这一步可以输出计算距离

将距离进行排序,返回的是排序之后的索引位置

nearsest = np.argsort(distances)
print(nearest)

输出结果:

取k个点,假设k=5
k=5
new_y=[y_train[i] for i in nearest[:k]]
print(new_y)

输出结果为:[1, 1, 1, 1, 1]

        根据结果得知,新来的数据距离最近的5个点,都属于1类,所以新来的数据属于第一类
投票
from collections import Counter
Counter(new_y)

输出结果:Counter({1: 5})

当新来的数据距离最近的5个点不是同属于一类时,服从少数服从多数原则,新来的数据属于多数的一类
代码如下:
votes = Counter(new_y)
votes.most_common(1)
y_new = votes.most_common(1)
#most_common(n)函数返回出现次数最多的n个元素及其次数
print(y_new)

使用sklearn中的knn


import numpy as np
from sklearn.neighbors import KNeighborsClassifier

raw_data_x = [[3.39, 2.33],
              [3.11, 1.15],
              [1.38, 3.84],
              [3.53, 4.92],
              [2.24, 2.80],
              [7.42, 4.65],
              [5.71, 3.50],
              [9.12, 2.91],
              [7.79, 3.41],
              [7.98, 0.71]]
raw_data_y = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
x_train = np.array(raw_data_x)
y_train = np.array(raw_data_y)

x_new = np.array([8.06, 3.37])
knn_classifier=KNeighborsClassifier(n_neighbors=5)
knn_classifier.fit(x_train,y_train)
y_new = knn_classifier.predict(x_new.reshape(1, -1))#固定1行,列数直接计算好
print(y_new[0])

输出:1

sklearn KNN算法对鸢尾花进行分类

from sk
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值