python实现knn算法鸢尾花_Python学习之knn实现鸢尾花分类

# K近邻算法

# 导入相关库文件

import numpy as np

import matplotlib.pyplot as plt

#import pandas as pd

from sklearn import neighbors, datasets

# 导入数据集,数据集sklearn自带,X与y一一对应

dataset = datasets.load_iris()

# 获取鸢尾花前两列花萼长度和花萼宽度(sepal_length、sepal_width)数据作为X

X = dataset.data[:, :2]

# 获取鸢尾花种类作为Y

# 2表示Iris-virginica,1表示Iris-versicolor,0表示Iris-setosa

y = dataset.target

# 这里没有进行特征缩放,是因为X属于一个都在一个较小的区间,所以无需进行特征缩放(已经达到特征缩放后的要求,观察数据很重要)

attributes_dict = {0:"sepal_length",1:"sepal_width"}

for attribute in attributes_dict:

print("{} 最大值:{}".format(attributes_dict[attribute], np.max(X[:,attribute])))

print("{} 最小值:{}".format(attributes_dict[attribute], np.min(X[:,attribute])))

# round 函数将float数据格式化小数点后一位

print("{} 平均值:{}".format(attributes_dict[attribute], round(np.average(X[:, attribute]),1)))

print("-------------------------------------")

# 划分数据为训练集和测试集

from sklearn.model_selection import train_test_split

"""train_test_split(train_data,train_target,test_size=0.4, random_state=0,stratify=y_train)Parameters:train_data:所要划分的样本特征集train_target:所要划分的样本结果test_size:样本占比,如果是整数的话就是样本的数量random_state:是随机数的种子。随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。"""

# train_test_split返回四个参数

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

# 使用训练集训练KNN

from sklearn.neighbors import KNeighborsClassifier

'''class KNeighborsClassifier(NeighborsBase, KNeighborsMixin,SupervisedIntegerMixin, ClassifierMixin):Parameters:n_neighbors: 默认邻居的数量weights: 权重可选参数uniform: 统一的权重. 在每一个邻居区域里的点的权重都是一样的。distance: 权重点等于他们距离的倒数。使用此函数,更近的邻居对于所预测的点的影响更大[callable]: 一个用户自定义的方法,此方法接收一个距离的数组,然后返回一个相同形状并且包含权重的数组。algorithm: 采用的算法可选参数ball_tree: 使用算法 BallTreekd_tree: 使用算法 KDTreebrute: 使用暴力搜索auto: 会基于传入fit方法的内容,选择最合适的算法。p: 距离度量的类型metric: 树的距离矩阵metric_params: 矩阵参数n_jobs: 用于搜索邻居,可并行运行的任务数量'''

# p=2表示选取欧式距离

classifier = KNeighborsClassifier(n_neighbors = 5, metric = 'minkowski', p = 2)

classifier.fit(X_train, y_train) #knn无训练过程,只是做数据保存到内存

# 预测测试集结果

y_pred = classifier.predict(X_test)

# 创建混淆矩阵

from sklearn.metrics import confusion_matrix

"""def confusion_matrix(y_true, y_pred, labels=None, sample_weight=None):Parameters:y_true: 样本真实分类结果y_pred: 样本预测分类结果labels: 给出的类别sample_weigh: 样本权重"""

# 所有正确预测的结果都在对角线上,非对角线上的值为预测错误数量

cm = confusion_matrix(y_test, y_pred)

print('cm',cm)

# 可视化训练集结果

from matplotlib.colors import ListedColormap

X_set, y_set = X_train, y_train

# meshgrid函数用两个坐标轴上的点在平面上画网格。

# X1,X2为坐标矩阵,用来画网格

X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),

np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))

# 绘制二维等高线

# 在网格的基础上添加高度值

plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),

alpha = 0.75, cmap = ListedColormap(('red', 'green', 'blue')))

plt.xlim(X1.min(), X1.max())

plt.ylim(X2.min(), X2.max())

for i, j in enumerate(np.unique(y_set)):

# 绘制散点图

# 自matplotlib 3.0.3 之后,scatter的c参数接收的数据类型为numpy的二维数组

# 这里的color_list,有三种类别的点,采用红、绿、蓝、三种颜色辨识

# 数组内容为rgb数组

color_list = [[[1,0,0],[0,1,0],[0,0,1]][i]]

# 使用掩码方法获取所有类别为0、1、2的数据点个数

count = np.sum((y_set == j)==True)

# 通过掩码的方式从X_set中获取当类别为0、1、2时的x坐标和y坐标

'''plt.scatter(x, y, c, marker, cmap,alpha, linewidths, edgecolors):Parameters:x, y: 数据的坐标c: 颜色,颜色序列marker: 绘制数据点的形状,默认是点cmap: atplotlib.colors.Colormap 内置的颜色序列alpha: 绘制数据点的透明度范围是[0-1] 0到1表示完全透明到完全不透明linewidths: 数据点形状的边框粗细edgecolors : 数据点形状的边框颜色'''

plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],

c = color_list*count, label = j)

plt.title('K-NN (Training set)')

plt.xlabel('Sepal Length')

plt.ylabel('Sepal Width')

plt.legend()

plt.show()

# 可视化测试集结果

from matplotlib.colors import ListedColormap

# meshgrid函数用两个坐标轴上的点在平面上画网格。

# X1,X2为坐标矩阵,用来画网格

X_set, y_set = X_test, y_test

X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),

np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))

# 绘制二维等高线

# 在网格的基础上添加高度值

plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),

alpha = 0.75, cmap = ListedColormap(('red', 'green', 'blue')))

plt.xlim(X1.min(), X1.max())

plt.ylim(X2.min(), X2.max())

for i, j in enumerate(np.unique(y_set)):

# 绘制散点图

# 自matplotlib 3.0.3 之后,scatter的c参数接收的数据类型为numpy的二维数组

# 这里的color_list,有三种类别的点,采用红、绿、蓝、三种颜色辨识

# 数组内容为rgb数组

color_list = [[[1,0,0],[0,1,0],[0,0,1]][i]]

# 使用掩码方法获取所有类别为0、1、2的数据点个数

count = np.sum((y_set == j)==True)

# 通过掩码的方式从X_set中获取当类别为0、1、2时的x坐标和y坐标

'''plt.scatter(x, y, c, marker, cmap,alpha, linewidths, edgecolors):Parameters:x, y: 数据的坐标c: 颜色,颜色序列marker: 绘制数据点的形状,默认是点cmap: atplotlib.colors.Colormap 内置的颜色序列alpha: 绘制数据点的透明度范围是[0-1] 0到1表示完全透明到完全不透明linewidths: 数据点形状的边框粗细edgecolors : 数据点形状的边框颜色'''

plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],

c = color_list*count, label = j)

plt.title('K-NN (Test set-k=5)')

plt.xlabel('Sepal Length')

plt.ylabel('Sepal Width')

plt.legend()

plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php获取变量数据类型,php如何确定变量的数据类型

在php中,数据类型有:Boolean 布尔类型、Integer 整型、Float 浮点型、String 字符串、Array 数组、Object 对象、Resource 资源类型、NULL;知道一个数据的类型,能够更加有效地进行代码逻辑处理。1、使用 var_dump() 函数,可以获取…

深入理解java虚拟机 - jvm高级特性与最佳实践(第三版)_JVM虚拟机面试指南:年薪30W以上高薪岗位需求的JVM,你必须要懂!...

JVM的重要性很多人对于为什么要学JVM这个问题,他们的答案都是:因为面试。无论什么级别的Java从业者,JVM都是进阶时必须迈过的坎。不管是工作还是面试中,JVM都是必考题。如果不懂JVM的话,薪酬会非常吃亏。其实学习JVM并…

php ajax xmlhttpreq 上传文件 get,使用Ajax XmlHttpRequest上传文件

使用Ajax XmlHttpRequest上传文件嗨,我正在尝试使用此代码发送带有xmlhttprequest的文件。var url "http://localhost:80/....";$(document).ready(function(){document.getElementById(upload).addEventListener(change, function(e) {var file this.fi…

linux 针对目录空间配额,linux磁盘配额quota

Linux是一个多用户多任务的操作系统,在使用中可能会有几个人对服务器有操作,几个用户共同使用一个共享磁盘的情况,因为我们的硬盘是有限的,我们需要对用户的空间进行限制。这里使用磁盘配额,可以很方便的对用户的空间进…

label居中_表格固定列宽时如何居中?

列宽固定居中的设置的时候,我们通常使用 p{宽度} 来指定固定的列宽,这时单元格会自动换行,换行之后是左对齐的,如何获得居中对齐呢?\begin{tabular}{|p{54pt}l|p{71pt}c|p{71pt}c|}\hline Method& Train set&T…

linux比较两个文件命令cmp,Linux系统中使用cmp和comm命令来比较两个文件

cmpcmp 命令:比较任意两个类型的文件,且吧结果输出到标准输出,默认文件相同不输出,不同的文件输出差异必要参数-c 显示不同的信息-l 列出所有的不同信息-s 错误信息不提示选择参数-i 指定字符数目-v 显示版本信息--help 显示帮助信…

truncate python是删除文件内容吗_Python 文件 truncate() 方法

概述Python 文件 truncate() 方法用于截断文件并返回截断的字节长度。指定长度的话,就从文件的开头开始截断指定长度,其余内容删除;不指定长度的话,就从文件开头开始截断到当前位置,其余内容删除。语法truncate() 方法…

python 内推_[宜配屋]听图阁

本文实例为大家分享了网易有道2017内推编程题:洗牌,供大家参考,具体内容如下[编程题] 洗牌时间限制:1秒空间限制:32768K洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌&#x…

linux根目录cat退出,Linux展示cat帮助信息并退出

Linux显示cat帮助信息并退出Linux显示cat帮助信息并退出youhaidongyouhaidong-ThinkPad-Edge-E545:~$ cat --help用法:cat [选项]... [文件]...将[文件]或标准输入组合输出到标准输出。-A, --show-all 等于-vET-b, --number-nonblank 对非空输出行编号-e 等于-vE-E,…

linux 编译字符设备驱动错误,linux字符设备驱动框架及编写流程

流程:init{}exit{}申请设备号 (动态注册/静态注册) 创建一个字符设备 cdev_alloc初始化字符设备 cdev_init设备号和字符设备关联 cdev_add销毁字符设备 cdev_del解注册设备号 unregister_chrdev_region1 设备号设备号分为主设备号和次设备号主设备号表示一类设备次设…

重新下载python以前下的包还用重新安装吗_强制“pip”在切换到其他Python二进制文件后重新编译以前安装的包(numpy)...

这个问题是关于我的特殊问题(我找到了一个解决方法,所以它不是一个紧迫的问题)的问题,也是关于我正在使用的一般过程的问题。设置(工作部分):我在我的Ubuntu 14.04上本地安装了Python 2.7.9,还有一个运行它的virtualenv。一切都与…

github新建仓库推送代码教学

之前一直用gitee,准备转到github。因为一步一步尝试。如果是新手或许文章会有帮助 点击 new 创建 拉代码 Idea 打开 复制一个 pom 文件作为 maven 管理 提交代码 不出意外的出意外,报错 点击authorize JetBrains 失败 分析问题 本质就是没有…

Linux数码管和点阵程序,随笔:python turtle绘制八段数码管和共阳极8x8led点阵

为更新而更新,为保持更新状态而更新。给学生讲解用gpiozero库控制八段管和8x8共阳极LED点阵。已经讲解了单个LED的控制,RGB彩色灯珠的控制,在讲解八段管就很容易理解,多个八段管的讲解稍微麻烦一点,然后LED点阵为了便于…

linux管理外部工具,linux – 除了iptables之外的数据包管理工具?

我正在寻找可以根据一组规则改变网络数据包的有效内容的linux实用程序.理想情况下,我会使用iptables和netfilter内核模块,但它们不支持通用的有效负载调整:iptables会改变各种头域(地址,端口,TOS等),并且可以匹配数据包中的任意字节,但是它显然无法改变数据包内的任…

一个公网ip多少钱_一个丛书书号多少钱

点击上方“蓝字”,发现更多精彩。联系我们,有惊喜!!本站点提供:学术出书、自费出书,出版指南攻略、编审润色书稿等服务。如需了解详情,请加责编微信:xueshuzhishi出版出书&#xff0…

嵌入式linux镜像,使用Openembedded定制嵌入式Linux镜像

关键词:ARM,Linux,Openembedded作者:ByToradex秦海摘要:嵌入式设备采用Embedded Linux操作系统进行开发已经越来越成为主流,但是如何将开发完成的Linux uboot/kernel配置,以及应用程序整合到Embedded Linux镜像中以便在…

pythonhtml生成word_python如何实现word批量转HTML

今天我们说一下使用python将word内容转换成html文件。下面一起来看一下。准备工作使用python类库PyDocX,安装方法(使用pip进行安装),命令如下:类库介绍python-docx是用于创建和更新Microsoft Word(.docx)文件的Python库。它可以针对word做很多…

linux安装 中文乱码怎么解决方法,Linux安装GBK/GB2312程序显示乱码的五种解决方法...

不少用户在Linux系统中安装GBK或GB2312的时候遇到了乱码问题,这主要是系统默认语言是uft8所导致,对于该问题可用五种方法进行解决,接下来是小编为大家收集的Linux安装GBK/GB2312程序显示乱码的五种解决方法,希望能帮到大家。Linux…

关于python序列类型的通用操作符_Python—语法基础(3) 序列类型及操作

序列类型:一维元素向量,元素类型可以不同,通过下标访问序列的特定元素,字符串类型、元组类型、列表类型属于序列类型序列类型通用操作符:x in s         如果x是序列s的元素,返回True,否…

linux 设备驱动总结,linux设备驱动归纳总结(三):3面向对象思想和lseek

linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现一、结构体structfile和struct inode在之前写的函数,全部是定义了一些零散的全局变量。有没有办法整合成到一个结构体当中?这样的话,看起来和用起来都比较方便。接…