KNN近邻算法实现

# !/usr/bin/env python3
import matplotlib.pyplot as plt
import numpy as np
from math import sqrt
from collections import Counter
#随机生成10个元素的数组
x = np.array([0.19233859 ,0.18626021 ,0.34556073 ,0.39676747 ,0.53881673 ,0.41919451, 0.6852195 ,0.20445225, 0.87811744, 0.32738759]) * 10
X = x.reshape(10,1)
#随机生成10个不同元素的数组
y = np.array([0.62978754 ,0.93461034 ,0.56664329 ,0.99947942 ,0.59558408 ,0.84467021
 ,0.95667363 ,0.41492526, 0.47581411 ,0.12934113]) * 10
Y = y.reshape(10,1)
data = np.hstack((X,Y))
target = np.array([0 ,0 ,1 ,0 ,0 ,1 ,1, 0 ,1, 1])
result = np.array([4.823 ,7.09])
# plt.scatter(X,Y,c=target)
# plt.scatter(result[0],result[1],c='r')
# plt.show()
#  写法一
# distances = []
# for i in data:
#     distance = sqrt(np.sum((i - result) ** 2))
#     distances.append(distance)

distances = [ sqrt(np.sum((i - result) ** 2)) for i in data]
# 求出了距离
print(distances)
index = np.argsort(distances)
k = 3
print(index[:k])
top = [ target[i] for i in index[:k]]
# 投票
votes = Counter(top)
#根据第二个元素从大到小倒叙排序
print(votes.most_common()[0][0])
# y = np.random(0, 10, 100)
# plt.scatter(x,y)
# plt.show()

使用scikit-learn框架

from sklearn.neighbors import KNeighborsClassifier
import numpy as np
#随机生成10个元素的数组
x = np.array([0.19233859 ,0.18626021 ,0.34556073 ,0.39676747 ,0.53881673 ,0.41919451, 0.6852195 ,0.20445225, 0.87811744, 0.32738759]) * 10
X = x.reshape(10,1)
#随机生成10个不同元素的数组
y = np.array([0.62978754 ,0.93461034 ,0.56664329 ,0.99947942 ,0.59558408 ,0.84467021
 ,0.95667363 ,0.41492526, 0.47581411 ,0.12934113]) * 10
Y = y.reshape(10,1)
data = np.hstack((X,Y))
target = np.array([0 ,0 ,1 ,0 ,0 ,1 ,1, 0 ,1, 1])
result = np.array([4.823 ,7.09])
kNN_classifier = KNeighborsClassifier(n_neighbors=3)
# 训练
kNN_classifier.fit(data, target)

'''预测 预存数据需要传入一个矩阵'''
print(kNN_classifier.predict(result.reshape(1,2))[0])
KNN(K-Nearest Neighbors)近邻算法的MATLAB代码可以按照以下步骤实现: 1. 定义一个距离矩阵,初始化为全零矩阵。 2. 定义训练数据集和测试数据集的长度。 3. 对每个测试样本,计算与训练样本的距离,并存储在距离矩阵中。 4. 使用选择排序的方法,对距离矩阵进行排序,找出最小的前K个距离对应的训练样本。 5. 统计这K个样本中最常出现的类别,作为测试样本的预测类别。 6. 返回测试样本的预测类别。 具体的MATLAB代码如下: ```matlab function predicted_labels = knn(train_data, train_labels, test_data, K) train_length = size(train_data, 1); test_length = size(test_data, 1); distance = zeros(train_length, 1); predicted_labels = zeros(test_length, 1); for i = 1:test_length for j = 1:train_length distance(j) = calculate_distance(test_data(i,:), train_data(j,:)); end % 使用选择排序的方法对距离矩阵进行排序,并得到最小的前K个距离对应的标签 for g = 1:K ma = distance(g); tmp = 1; label_ma = 0; for j = g+1:train_length if distance(j) < ma ma = distance(j); label_ma = train_labels(j); tmp = j; end end distance(tmp) = distance(g); distance(g) = ma; train_labels(tmp) = train_labels(g); train_labels(g) = label_ma; end % 统计最小的前K个样本中最常出现的类别,作为测试样本的预测类别 unique_labels = unique(train_labels(1:K)); counts = histc(train_labels(1:K), unique_labels); [~, max_idx = max(counts); predicted_labels(i) = unique_labels(max_idx); end end function distance = calculate_distance(x1, x2) % 计算两个样本之间的距离(这里可以根据具体问题选择不同的距离度量方法) distance = sqrt(sum((x1 - x2).^2)); end ``` 这是一个基本的KNN近邻算法的MATLAB实现,你可以将训练数据集、训练标签、测试数据集和K值作为输入,然后得到测试样本的预测类别。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunnyboy_4

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值