import os
import numpy as np
import matplotlib.pyplot as pltdef Euclidean_distance(point1, point2): #计算两个点之间的欧几里得距离return np.sqrt(np.sum((point1 - point2) ** 2))def get_Euclidean_distance(point, dataSet): # 得到一个点到数据集里面所有点的距离distanceSet = []for sample in dataSet:if Euclidean_distance(point, sample): # 排除这个点本身,即排除与自己距离为0的点distanceSet.append(Euclidean_distance(point, sample))return distanceSetclass KNN(): # k近邻算法k = 0def train(self, x_train, y_train): # train函数得到最好的k值,即以周围多少个点进行投票效果最好Kmax = len(x_train) # k最大为点的个数best_k = 0 # 初始化最好的kbest_accurrcy = 0 # 初始化最好的k对应的准确度for k in range(1, Kmax): # 依次计算每一个klabelSet = self.predict(x_train, k) # 计算当前k下各点的labelcount = np.sum(np.logical_xor(labelSet, y_train) == 1) # 预测结果与真实标记不一致就说明预测失败precision = 1 - count / y_train.shape[0] # 计算在训练集上的准确度print("k = %2d accurrcy: %.2f" % (k, precision))if precision > best_accurrcy: # 记录最好的kbest_accurrcy = precisionbest_k = kreturn best_k, best_accurrcydef predict(self, predictSet, k):labelSet = []for point in predictSet:distanceSet = get_Euclidean_distance(point, x_train) # 得到当前点与训练集所有点的距离sorted_index = sorted(range(len(distanceSet)), key=lambda k: distanceSet[k], reverse=False) # 得到距离从小到大排序的索引count1 = list(y_train[sorted_index[:k]]).count(1) # 计算前k个最近的点的label个数,进行投票count0 = list(y_train[sorted_index[:k]]).count(0)if count0 < count1:labelSet.append(1) # 哪个数字多,当前点的label就是哪个数字else:labelSet.append(0)return labelSetdef plot_desicion_boundary(X, y, knn): # 画出决策边界x_min = np.array(X)[:, 0].min() - 0.1 # 计算图的边界x_max = np.array(X)[:, 0].max() + 0.1y_min = np.array(X)[:, 1].min() - 0.1y_max = np.array(X)[:, 1].max() + 0.1xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))Z = knn.predict(np.vstack([xx.ravel(), yy.ravel()]).T.tolist(), knn.k)Z = np.array(Z).reshape(xx.shape)f, axarr = plt.subplots(1, 1, figsize=(10, 8))axarr.contourf(xx, yy, Z, alpha = 0.4)axarr.scatter(np.array(X)[:, 0], np.array(X)[:, 1], c=y, s=10, edgecolor='k')axarr.set_title("KNN (k={})".format(1))plt.savefig("k={}.png".format(1))plt.show()print('load data...')
path = os.path.abspath(os.path.dirname(__file__)) # 获取py文件当前路径
x_train = np.loadtxt(path + "/30alpha.csv", delimiter=",", usecols=(0, 1))
y_train = np.loadtxt(path + "/30alpha.csv", delimiter=",", usecols=(2))
print('finish data load...') # 读取数据knn = KNN() # 实例化KNN模型
best_k, best_accurrcy = knn.train(x_train, y_train) # 得到最好的k
print("best k =", best_k, " best accurrcy:", best_accurrcy)
knn.k = best_k # 记录最好的k
plot_desicion_boundary(x_train, y_train, knn) # 画出决策边界

与python文件同目录下的西瓜3.0数据集文件30alpha.csv

0.697,0.46,1
0.774,0.376,1
0.634,0.264,1
0.608,0.318,1
0.556,0.215,1
0.403,0.237,1
0.481,0.149,1
0.437,0.211,1
0.666,0.091,0
0.243,0.267,0
0.245,0.057,0
0.343,0.099,0
0.639,0.161,0
0.657,0.198,0
0.36,0.37,0
0.593,0.042,0
0.719,0.103,0

输出:

load data…
finish data load…
k = 1 accurrcy: 0.94
k = 2 accurrcy: 0.88
k = 3 accurrcy: 0.82
k = 4 accurrcy: 0.65
k = 5 accurrcy: 0.82
k = 6 accurrcy: 0.76
k = 7 accurrcy: 0.76
k = 8 accurrcy: 0.76
k = 9 accurrcy: 0.65
k = 10 accurrcy: 0.53
k = 11 accurrcy: 0.47
k = 12 accurrcy: 0.47
k = 13 accurrcy: 0.47
k = 14 accurrcy: 0.53
k = 15 accurrcy: 0.53
k = 16 accurrcy: 0.53
best k = 1 best accurrcy: 0.9411764705882353

决策边界:

References

决策边界用python实现 - 路途陌客 - 博客园

画出使用分类器得到的决策边界_dengjiaxing0321的博客-CSDN博客

Python实现画出使用分类器得到的决策边界_Cassie_pyLu的博客-CSDN博客

numpy中的ravel()、flatten()、squeeze()的用法与区别_tymatlab的专栏-CSDN博客_.ravel()

Numpy中stack(),hstack(),vstack()函数详解_张康的博客-CSDN博客_vstack

python matplotlib contour画等高线图_Mr_Cat123的wudl博客-CSDN博客

ljpzzz/machinelearning

西瓜书《机器学习》课后答案–chapter10 _10.1 KNN算法_CodeTutor-CSDN博客

han1057578619/MachineLearning_Zhouzhihua_ProblemSets

K近邻算法python实现并显示决策边界相关推荐

  1. 距离产生美?k近邻算法python实现

    https://blog.csdn.net/red_stone1/article/details/80607960 1. 什么是k近邻算法? k最近邻(k-Nearest Neighbor,kNN)分 ...

  2. kd树 python实现_kd树 寻找k近邻算法 python实现

    按照链接里的算法写了k近邻的python实现 from math import sqrt class KDnode: def __init__(self, data, left, right, spl ...

  3. knn K近邻算法python实现

    本文主要内容: knn K近邻算法原理 sklearn knn的使用,以及cross validation交叉验证 numpy 实现knn knn改进方法 1 knn K近邻算法原理 K近邻算法:给定 ...

  4. k近邻算法python解读_Python3《机器学习实战》学习笔记(一):k-近邻算法(史诗级干货长文)...

    运行平台: Windows IDE: Sublime text3 一.简单k-近邻算法 本文将从k-近邻 1.k-近邻法简介 k近邻法(k-nearest neighbor, k-NN)是1967年由 ...

  5. K近邻算法的Python实现

    作为『十大机器学习算法』之一的K-近邻(K-Nearest Neighbors)算法是思想简单.易于理解的一种分类和回归算法.今天,我们来一起学习KNN算法的基本原理,并用Python实现该算法,最后 ...

  6. 基于Python的K近邻算法实现

    模式识别 K近邻法 目录 模式识别 K近邻法 1 一.最近邻.k近邻算法介绍 2 1.1 介绍 2 1.2 近邻法的形式化表示 2 (1)最近邻 2 (2)k近邻 3 二.实验数据集介绍 3 2.1 ...

  7. python机器学习 | K近邻算法学习(1)

    K近邻算法学习 1 K近邻算法介绍 1.1算法定义 1.2算法原理 1.3算法讨论 1.3.1 K值选择 1.3.2距离计算 1.3.3 KD树 2 K近邻算法实现 2.1scikit-learn工具 ...

  8. K近邻算法讲解与python实现(附源码demo下载链接)

    k近邻算法概述 对应demo源码及数据:传送门 K近邻(k-Nearest Neighbor,简称kNN)算法,是一种应用很广泛的监督学习算法.它非常有效且易于掌握,其工作机制也很简单:给定测试样本, ...

  9. 【机器学习入门】(1) K近邻算法:原理、实例应用(红酒分类预测)附python完整代码及数据集

    各位同学好,今天我向大家介绍一下python机器学习中的K近邻算法.内容有:K近邻算法的原理解析:实战案例--红酒分类预测.红酒数据集.完整代码在文章最下面. 案例简介:有178个红酒样本,每一款红酒 ...

  10. 统计学习方法笔记(一)-k近邻算法原理及python实现

    k近邻法 k近邻算法 算法原理 距离度量 距离度量python实现 k近邻算法实现 案例地址 k近邻算法 kkk近邻法(kkk-NN)是一种基本分类和回归方法. 算法原理 输入:训练集 T={(x1, ...

最新文章

  1. 四月青少年编程组队学习(Python一级)Task02
  2. Ajax接触及对跨域的简单理解
  3. 转:精通JS正则表达式
  4. 基于C语言的软件,基于C语言的计算机软件编程分析
  5. 自定义View的学习(一)
  6. Spring Cloud(7.2):配置Producer Server
  7. [转]C#加密解密源码
  8. Unity经验·任意位置的透视问题
  9. 3DMax、Unity、Threejs旋转转换
  10. 计算机网络培训心得PPT,ppt培训心得体会(精选3篇)
  11. 双十一来临,你就不想知道阿里后台都做了哪些准备吗?
  12. 服务器 raid配置
  13. 【简单快捷教会你】如何正确使用animate.css,各种动态效果。
  14. 新华系“雄文”为何引发游戏产业3000亿市值蒸发?
  15. 数据库DDL与DML指的什么?
  16. html使用thymeleaf模板时,获取数据库中字符串值,拆分为list根据下标获取对应的值的方法
  17. macOS 运行 iOS 应用体验:你甚至能在电脑上刷微信朋友圈
  18. 网易云api访问登录后仍返回{msg: ‘需要登录‘, code: 301}
  19. 亚马逊云科技2022热招岗位
  20. Python三角形问题(计算周长与面积)

热门文章

  1. 企业如何进行客户细分 客户细分的方法和类型
  2. 聊一聊Java中的线程中断
  3. SpiderViewer - 远程桌面客户端
  4. CTF之Bugku 秋名山老司机
  5. 轻运维|无人干预,易捷行云新一代私有云一键式扩容
  6. c语言.jpg图片转成数组_怎么转换图片成PDF格式?
  7. macbook air 卸载java,macbook air如何删除程序
  8. KANBAN专题一:KANBAN管理的基本系统操作
  9. 【产品】使用 Axure 做产品原型设计
  10. 扫雷小游戏(可选择简单、一般、困难三种模式、可展开,可标记)