KNN算法 使用KNN对iris数据集分类
一、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数据集分类相关推荐
- KNN算法实现,(鸢尾花数据集分类)
KNN算法实现实例 KNN算法 一,KNN算法概述 二,算法步骤 KNN算法的具体实现 一.数据获取 二.具体代码的实现 参考博客 KNN算法 一,KNN算法概述 knn算法,又叫k-近邻算法.属于一 ...
- 原生Python实现KNN算法,并用鸢尾花(iris)数据集测试
用原生python语法实现K近邻算法,了解K近邻法的实际操作内核,并用自带鸢尾花的集合验证K近邻算法,并掌握运用散点图的绘制 先对KNN算法做了解: 源代码获取: https://github.com ...
- 【机器学习】KNN算法实战项目二:水果分类
KNN算法实战项目二:水果分类 2 KNN实现水果分类 2.1 模块导入与数据加载 2.2 数据EDA 2.3 模型创建与应用 2.4 绘制决策边界 手动反爬虫: 原博地址 https://blog. ...
- 深入浅出KNN算法(一) KNN算法原理
一.KNN算法概述 KNN可以说是最简单的分类算法之一,同时,它也是最常用的分类算法之一,注意KNN算法是有监督学习中的分类算法,它看起来和另一个机器学习算法Kmeans有点像(Kmeans是无监督学 ...
- tensorflow2.0莺尾花iris数据集分类|超详细
tensorflow2.0莺尾花iris数据集分类 超详细 直接上代码 #导入模块 import tensorflow as tf #导入tensorflow模块from sklearn import ...
- KNN算法及KNN的优化算法-加权KNN
KNN及加权KNN优化算法 文章目录 KNN及加权KNN优化算法 深度学习的常规套路: K-近邻(KNN)算法: 超参数(距离): 调参-训练采用交叉验证: 附:KNN算法实例: KNN算法注意事项: ...
- 支持向量机SVM Iris数据集 分类预测
目录 支持向量机对iris数据集进行分类预测 1. 基础概念 2. 实验步骤与分析 2.1 数据理解 2.2 数据读入 2.3 训练集和测试集划分 2.4 支持向量机 2.5 预测 2.6 ...
- KNN算法原理与自实现电影分类
1.KNN简介 KNN英文全如称果给定 ,中文名称为K最近邻算法,它是由Cover和Hart在1968年提出 来的 作为相似性度量的距离函数一般满足下列性质: 注:这里,X,Y和Z是对应特征空间中的三 ...
- KNN算法 实战一 ,电影类型分类
爱情片与动作片分类的实战 KNN实现电影类型分类 import matplotlib.pyplot as plt import numpy as np #第一步,构建数据集 fight=(3,2,1, ...
- 机器学习实战4-sklearn训练线性回归模型(鸢尾花iris数据集分类)
不贴图都没人看系列.... 线性回归推导: 上图求导部分有误,少些一个转置符号,更正为: 逻辑回归推导: (公式中"ln"和"log"表示一个意思,都是以&qu ...
最新文章
- Redis初学:2(Redis的启动)
- python_面向对象进阶之属性值的限制
- HDU 5097 Page Rank (模拟)
- c++11-std::functionbind
- 计算机二级二叉树基础知识,2017年计算机二级公共基础知识学习教程:树与二叉树...
- iOS: bundle name, bundle display name, bundle identifier...
- 轻量级 Java Web 框架技术选型
- CF 1635 D. Infinite Set 思维 + 二进制
- 创业者眼中的小程序:某个岗位工资会翻番
- 【输入一个数,判断是否为素数(质数)】
- Unity3d札记 --TanksTutorial收获与总结
- 注重IT的全程管控 第三方监理可有效保证IT质量
- MERIT DEM 90m数据下载
- JAVA架构师学习路线图(绝对详细)
- 信息技术导论——信息和信息系统习题整理
- Win10怎样禁用触控板
- 数字图像处理 - 灰度级分层 的python实现
- JS 模拟手机页面文件的下拉刷新
- facebook女程序员_Facebook正在悄悄地向其独立的事实检查员施加压力,要求他们改变裁决
- Seq2Seq 粗浅理解