# 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()

python实现knn算法鸢尾花_Python学习之knn实现鸢尾花分类相关推荐

  1. 学python对数学要求吗_python 学习和数学知识 - 文章分类 - 风中小郎君 - 博客园...

    文章分类 - python 学习和数学知识 http://www.cnblogs.com/vamei 摘要:它们的区别在于应用的对象不同.1.map()map() 是一个Series的函数,DataF ...

  2. KNN算法的matlab学习日志123

    KNN算法的matlab学习日志123 K邻近算法--普通的方法入门级通用 本质原理是样本集中的数据与其所属分类存在的对应关系. 首先,了解下K-近邻算法的一般流程: 1.收集数据 2.准备数据 3. ...

  3. 【机器学习】KNN算法实战项目三:金融贷款策略分类

    KNN算法实战项目三:金融贷款策略分类 3 金融贷款策略中的KNN分类 3.1 模块导入与数据加载 3.2 数据EDA 3.2.1 数据预处理 3.2.2 数据可视化 3.2.3 特征工程 3.3 模 ...

  4. 基于python的贝叶斯分类算法预测_python机器学习:朴素贝叶斯分类算法

    大数据挖掘DT机器学习  公众号: datayx 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.而朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法.这 ...

  5. python游戏编程网课_Python 学习最佳方式_创建游戏_编程一个机器人

    Python 是世界上功能最多且最强大的编程语言之一.使用 Python,你可以编写自己的应用程序,创建游戏.设计算法.甚至编程一个机器人.学习 Python 还可以担任软件工程师.Web 开发人员. ...

  6. 机器学习入门 —— 超级详细的KNN算法学习笔记、KNN算法的三要素、KNN算法的优缺点

    文章目录 KNN(K nearest neighbors) K值的选择和影响 k取值偏小 k取值偏大 样本点距离的计算方式 闵可夫斯基距离 曼哈顿距离 欧几里得距离 切比雪夫距离 余弦距离 决策函数的 ...

  7. knn算法实例python_Python实现的knn算法示例

    本文实例讲述了Python实现的knn算法.分享给大家供大家参考,具体如下: 代码参考机器学习实战那本书: 有兴趣你们可以去了解下 具体代码: # -*- coding:utf-8 -*- #! py ...

  8. KNN算法(二) sklearn KNN实践

    上次介绍了KNN的基本原理,以及KNN的几个窍门,这次就来用sklearn实践一下KNN算法. 一.Skelarn KNN参数概述 要使用sklearnKNN算法进行分类,我们需要先了解sklearn ...

  9. python冒泡排序算法思路_Python学习笔记(9)冒泡排序算法

    一.冒泡排序思路(降序) l = [2,5,12,352,1,23,35,63,5,2] # 0-9 对l进行排序 从列表中将第一个数与第二个数进行比较,如果第一个数小于第二个数,则两数交换顺序,再次 ...

最新文章

  1. 9.9元,2顿饭?中国的食品黑科技搞出了可以直接“喝的饭”
  2. sublime 写lua相关的插件 cocos
  3. R 语言开发环境搭建
  4. 为什么你的记忆总会越来越模糊?
  5. find your place
  6. Python ConfigParser的使用
  7. linux go环境安装和基本项目结构
  8. 长路漫漫,唯剑作伴--loadView、viewDidLoad及viewDidUnload的关系
  9. CentOS7 Ambari2.7.5编译
  10. python pymysql_python使用pymysql实现操作mysql
  11. 59. C# -- .NET Framework 常用命名空间总结
  12. springboot使用jsp完成数据的页面展示
  13. Linux Shell编程笔记9 SSH和Screen工具
  14. 阿里代码规范检查自定义规则扩展
  15. 被syn攻击了怎么办,如何预防服务器被被syn攻击
  16. 如何将ppt批量转换成pdf?
  17. 稍加改进的Switch/Case扩展方法
  18. vue实现视频播放器功能,你学会了吗
  19. windows 配置永久路由
  20. el-table表单增加show-summary表尾合计,表格错位和高度计算错误

热门文章

  1. SpringBoot与日志配置
  2. SpringBoot整合oss实现文件的上传,查看,删除,下载
  3. 电子游戏跟计算机有什么关联,电脑和电子游戏对小学生的影响
  4. linux运行程序+后注销,linux – 如果我启动后台进程然后注销,它会继续运行吗?...
  5. oracle常用用户权限,oracle创建新用户及授予常用权限
  6. mysql 分区 性能更差_用案例分析MySQL 5.7分区表性能下降的根本原因
  7. angular html页面嵌套,使用AngularJS来实现HTML页面嵌套的方法
  8. java软件工程_java复习
  9. java存钱_用Java编写银行存钱取钱
  10. linux讲日志暂停,linux – Rsyslog在日志轮换后停止向远程服务器发送数据