KNN预测鸢尾花(模型及手写实现)

python自带的KNN算法使用

import math
import operator
import matplotlib.pyplot as plt
from sklearn import neighbors
from sklearn import datasets

# 获取KNN分类器
from sklearn.model_selection import train_test_split

knn = neighbors.KNeighborsClassifier()
# 加载数据
iris = datasets.load_iris()
print(iris)
# 建立模型
knn.fit(iris.data, iris.target)
# 输入预测模型进行预测
predictedLabel = knn.predict([[5.9, 3., 5.1, 1.8]])
# 输出预测结果
print('-' * 100)
print(predictedLabel)

手写KNN实现

# 1.分割数据集
# 2.计算测试集中的每一个元素到训练集所有元素中最近的p个元素
# 3.将这p个元素的类别的数量进行排序,数量最多的设定为测试集的元素的类别
# 4.循环,预测测试集的所有元素
# 5.计算测试集的准确率
X = iris.data
y = iris.target
# 1.分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7)
# print(X)
y_predict = []
p = 3
for i in range(len(X_test)):
    Xtes = X_test[i]
    Dis = {}
    for j in range(len(X_train)):
        Xtra = X_train[j]
        ytra = y_train[j]
        dis = 0
        for k in range(len(Xtes)):
            dis += pow((Xtes[k] - Xtra[k]), 2)
        Dis[math.sqrt(dis)] = ytra
    # print(Dis)
    # print(len(Dis))
    sortedNotes = sorted(Dis.items(), key=operator.itemgetter(0), reverse=False)
    W = []
# 2.计算测试集中的每一个元素到训练集所有元素中最近的p个元素
    for t in range(p):
        s = list(sortedNotes[t])
        W.append(s[1])
# 3.将这p个元素的类别的数量进行排序,数量最多的设定为测试集的元素的类别
    most = max(W, key=W.count)
    y_predict.append(most)

计算测试集的准确率

# 5.计算测试集的准确率
count = 0
for i in range(len(y_test)):
    if y_test[i] == y_predict[i]:
        count += 1
print('手写测试准确值:', count / len(y_test))
plt.plot(y_test, 'r-')
plt.plot(y_predict, 'b-')
plt.show()

图形结果
手写KNN结果预测

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值