一、KNN算法 (K近邻算法) 简述

可以简单粗暴的认为在判断一个未知事物时,可以观察离它最近的几个样本。

步骤:

寻找样本数据集K个最近的元素

计算K个元素中各种类别的占比

占比最高的类别即为新数据的类别

K的取值对结果有很大的影响

如下图,中间的圆要被赋予哪个类?是三角形还是正方形?如果K=3,由于三角形所占比例为2/3,圆将被赋予三角形那个类;如果K=7,由于正方形所占比例为4/7,圆将被赋予正方形那个类

计算复杂度优化

  • 计算新数据(未知样本)和K个训练样本的距离dist;
  • 得到目前K个最邻近样本中的最大距离maxdist;
  • 如果第K+1个训练样本......(剩余的所有训练样本)的dist小于maxdist,则将该训练样本作为K-最近邻样本(即替换掉上述K个最邻近样本中最大距离的那个训练样本)。

边界清晰--选取中心点 纯度

数据倾斜问题-- 增加权重

二、使用KNN对iris数据集分类

1、导入numpy、Matplotlib、sklearn类库及其模块

import numpy as np
# Puplot 提供了一套和MATLAB类似的绘图API,使得Matplotlib的机制更像MATLAB。
# 我们只需要调用Pyplot模块所提供的函数就可以快速绘图并设置图表的各个细节
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn.neighbors import KNeighborsClassifier # 导入sklearn类库及KNN模型
from sklearn.datasets import load_iris

2、加载鸢尾花数据集

# 加载鸢尾花数据集,并分割成样本特征X和样本标签Y
iris = load_iris()
X = iris.data[:,:2]
# print(X)
# print(X[:,0])
Y = iris.target

3、设置绘图背景色和散点颜色映射表

# 绘制背景颜色和散点颜色映射表
cmap_light = ListedColormap(['#FFAAAA','#AAFFAA','#AAAAFF'])
cmap_bold = ListedColormap(['#FF0000','#00FF00','#0000FF'])

4、 构建KNN模型

clf = KNeighborsClassifier(n_neighbors= 10,weights='uniform')

5、 调用模型的fit函数进行训练

clf.fit(X,Y)

6、画出决策边界

# 画出决策边界
x_min , x_max = X[:,0].min() - 1, X[:,0].max() + 1
y_min , y_max = X[:,1].min() - 1, X[:,1].max() + 1
xx,yy = np.meshgrid(np.arange(x_min,x_max,0.02),np.arange(y_min,y_max,0.02))Z = clf.predict(np.c_[xx.ravel(),yy.ravel()]).reshape(xx.shape)plt.figure()
plt.pcolormesh(xx,yy,Z,cmap=cmap_light)

7、绘制预测结果图

# 绘制预测结果图
plt.scatter(X[:,0],X[:,1],c = Y,cmap=cmap_bold)
plt.xlim(xx.min(),xx.max()) # xlim:当前图形X轴的范围
plt.ylim(yy.min(),yy.max())
plt.title('3_Class(k=10,weights=uniform)')
plt.show

8、结果展示

部分解释

1、numpy.meshgrid()

(参考https://www.cnblogs.com/black-mamba/p/9186965.html)

x = np.array([0, 0.5, 1])
print('x: ',x)
print('--------------')
y = np.array([0,1])
xv,yv = np.meshgrid(x, y) # numpy.meshgrid(x轴上的坐标向量, y轴上的坐标向量)
print('xv: \n',xv)
print('--------------')
print('y: ',y)
print('--------------')
print('yv: \n',yv)
print("xv的维度:{},shape:{}".format(xv.ndim, xv.shape))
print("yv的维度:{},shape:{}".format(yv.ndim, yv.shape))plt.plot(xv, yv, 'o--')
plt.grid(True)
plt.show()

# 此处为了好观看结果,将步长设置为1
print((np.arange(x_min,x_max,1)))

print((np.arange(y_min,y_max,1)))

 

2、numpy.c_

# numpy.c_ 将一维数组作为列堆叠到二维数组中。
arr = np.c_[np.array([1,2,3]), np.array([4,5,6])]
print(arr)

3、ravel()

ravel()方法将数组维度拉成一维数组

print((np.c_[xx.ravel(),yy.ravel()])) 

代码:

import numpy as np
# Puplot 提供了一套和MATLAB类似的绘图API,使得Matplotlib的机制更像MATLAB。
# 我们只需要调用Pyplot模块所提供的函数就可以快速绘图并设置图表的各个细节
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn.neighbors import KNeighborsClassifier # 导入sklearn类库及KNN模型
from sklearn.datasets import load_iris# 加载鸢尾花数据集,并分割成样本特征X和样本标签Y
iris = load_iris()
X = iris.data[:,:2]
# print(X)
# print(X[:,0])
Y = iris.target# 绘制背景颜色和散点颜色映射表
cmap_light = ListedColormap(['#FFAAAA','#AAFFAA','#AAAAFF'])
cmap_bold = ListedColormap(['#FF0000','#00FF00','#0000FF'])clf = KNeighborsClassifier(n_neighbors= 10,weights='uniform')
clf.fit(X,Y)# 画出决策边界
x_min , x_max = X[:,0].min() - 1, X[:,0].max() + 1
y_min , y_max = X[:,1].min() - 1, X[:,1].max() + 1
xx,yy = np.meshgrid(np.arange(x_min,x_max,0.02),np.arange(y_min,y_max,0.02))Z = clf.predict(np.c_[xx.ravel(),yy.ravel()]).reshape(xx.shape)plt.figure()
plt.pcolormesh(xx,yy,Z,cmap=cmap_light)
# 这两部分代码一块执行# 绘制预测结果图
plt.scatter(X[:,0],X[:,1],c = Y,cmap=cmap_bold)
plt.xlim(xx.min(),xx.max()) # xlim:当前图形X轴的范围
plt.ylim(yy.min(),yy.max())
plt.title('3_Class(k=10,weights=uniform)')
plt.show

KNN算法 使用KNN对iris数据集分类相关推荐

  1. KNN算法实现,(鸢尾花数据集分类)

    KNN算法实现实例 KNN算法 一,KNN算法概述 二,算法步骤 KNN算法的具体实现 一.数据获取 二.具体代码的实现 参考博客 KNN算法 一,KNN算法概述 knn算法,又叫k-近邻算法.属于一 ...

  2. 原生Python实现KNN算法,并用鸢尾花(iris)数据集测试

    用原生python语法实现K近邻算法,了解K近邻法的实际操作内核,并用自带鸢尾花的集合验证K近邻算法,并掌握运用散点图的绘制 先对KNN算法做了解: 源代码获取: https://github.com ...

  3. 【机器学习】KNN算法实战项目二:水果分类

    KNN算法实战项目二:水果分类 2 KNN实现水果分类 2.1 模块导入与数据加载 2.2 数据EDA 2.3 模型创建与应用 2.4 绘制决策边界 手动反爬虫: 原博地址 https://blog. ...

  4. 深入浅出KNN算法(一) KNN算法原理

    一.KNN算法概述 KNN可以说是最简单的分类算法之一,同时,它也是最常用的分类算法之一,注意KNN算法是有监督学习中的分类算法,它看起来和另一个机器学习算法Kmeans有点像(Kmeans是无监督学 ...

  5. tensorflow2.0莺尾花iris数据集分类|超详细

    tensorflow2.0莺尾花iris数据集分类 超详细 直接上代码 #导入模块 import tensorflow as tf #导入tensorflow模块from sklearn import ...

  6. KNN算法及KNN的优化算法-加权KNN

    KNN及加权KNN优化算法 文章目录 KNN及加权KNN优化算法 深度学习的常规套路: K-近邻(KNN)算法: 超参数(距离): 调参-训练采用交叉验证: 附:KNN算法实例: KNN算法注意事项: ...

  7. 支持向量机SVM Iris数据集 分类预测

    目录 支持向量机对iris数据集进行分类预测 1. 基础概念 2. 实验步骤与分析 2.1  数据理解 2.2  数据读入 2.3  训练集和测试集划分 2.4  支持向量机 2.5  预测 2.6  ...

  8. KNN算法原理与自实现电影分类

    1.KNN简介 KNN英文全如称果给定 ,中文名称为K最近邻算法,它是由Cover和Hart在1968年提出 来的 作为相似性度量的距离函数一般满足下列性质: 注:这里,X,Y和Z是对应特征空间中的三 ...

  9. KNN算法 实战一 ,电影类型分类

    爱情片与动作片分类的实战 KNN实现电影类型分类 import matplotlib.pyplot as plt import numpy as np #第一步,构建数据集 fight=(3,2,1, ...

  10. 机器学习实战4-sklearn训练线性回归模型(鸢尾花iris数据集分类)

    不贴图都没人看系列.... 线性回归推导: 上图求导部分有误,少些一个转置符号,更正为: 逻辑回归推导: (公式中"ln"和"log"表示一个意思,都是以&qu ...

最新文章

  1. Redis初学:2(Redis的启动)
  2. python_面向对象进阶之属性值的限制
  3. HDU 5097 Page Rank (模拟)
  4. c++11-std::functionbind
  5. 计算机二级二叉树基础知识,2017年计算机二级公共基础知识学习教程:树与二叉树...
  6. iOS: bundle name, bundle display name, bundle identifier...
  7. 轻量级 Java Web 框架技术选型
  8. CF 1635 D. Infinite Set 思维 + 二进制
  9. 创业者眼中的小程序:某个岗位工资会翻番
  10. 【输入一个数,判断是否为素数(质数)】
  11. Unity3d札记 --TanksTutorial收获与总结
  12. 注重IT的全程管控 第三方监理可有效保证IT质量
  13. MERIT DEM 90m数据下载
  14. JAVA架构师学习路线图(绝对详细)
  15. 信息技术导论——信息和信息系统习题整理
  16. Win10怎样禁用触控板
  17. 数字图像处理 - 灰度级分层 的python实现
  18. JS 模拟手机页面文件的下拉刷新
  19. facebook女程序员_Facebook正在悄悄地向其独立的事实检查员施加压力,要求他们改变裁决
  20. Seq2Seq 粗浅理解

热门文章

  1. 使用SQL查询分析器删除所有用户表
  2. 推荐一个免费内网穿透穿软件(附带一个git下载加速地址)
  3. 苹果/安桌点歌系统代码
  4. CocosBuilder学习之一:认识CocosBuilder
  5. 雅虎14条性能优化(经典)
  6. wow模型修改器_《魔兽世界》魔兽世界模型修改器攻略
  7. 炒股高手必备抓大牛主图筹码箱体分析指标
  8. 自用MATLAB2012a安装教程
  9. 《自拍教程20》ffmpeg 音视频图像转码工具
  10. 人机交互技术:利用声波识别手势 Gesture Control System Uses Sound Alone