本文章主要以sklearn中的Iris鸢尾花数据集为训练对象,练习了PCA和K-近邻算法的使用,以下为笔记内容:

Iris数据集也叫安德森鸢尾花卉数据集,通过测量了三种不同花卉(山鸢尾、变色鸢尾和维吉尼亚鸢尾)的萼片及花瓣的长、宽度得到该数据集,如下:

from sklearn import datasets
iris = datasets.load_iris()
iris.data
Out[1]:
array([[5.1, 3.5, 1.4, 0.2],[4.9, 3. , 1.4, 0.2],[4.7, 3.2, 1.3, 0.2],[4.6, 3.1, 1.5, 0.2],····················     # 数据集是包含150个元素的数组,每个元素包含4个数值,分别表示萼片的长度、宽度和花瓣的长度、宽度。
iris.target
Out[2]:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])  # 数据集包含三种花卉,分别用0,1,2表示
1、主成分分解PCA
任务:观察四个维度对花卉种类的影响
问题:四维空间图像无法展示
解决方案:利用主成分分解进行降维,将花卉的四个维度降至三个维度,利用3D散点图展示主成分对花卉种类的影响。

tip:主成分分析法(Principal Component Analysis)—— 从所有维度中提取出足以描述各数据点特征的新维度,该新维度称为主成分,该方法常用于数据降维

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn import datasets
from mpl_toolkits.mplot3d import Axes3Diris = datasets.load_iris()
species = iris.target# 利用PCA函数降维
x_reduced = PCA(n_components=3).fit_transform(iris.data)#绘制3D图
fig = plt.figure()
ax = Axes3D(fig)
ax.set_title('Iris Dataset By PCA',size=14)
ax.scatter(x_reduced[:,0],x_reduced[:,1],x_reduced[:,2],c=species)
ax.set_xlabel('First eigenvector')
ax.set_ylabel('Secnd eigenvector')
ax.set_zlabel('Third eigenvector')
ax.w_xaxis.set_ticklabels(())
ax.w_yaxis.set_ticklabels(())
ax.w_zaxis.set_ticklabels(())

2、K-近邻分类器

任务:给定一种鸢尾花的数据,给这种花卉分类

解决方法:利用最简单的近邻分类器,近邻算法可搜索训练集,找到与测试集数据最相近的数据并予以匹配

import numpy as np
from sklearn import datasets
# 随机数组初始化
np.random.seed(0)#利用random()函数将iris数据集顺序打乱,因为iris数据集是按照花卉种类顺序采集的
iris = datasets.load_iris()
x = iris.data
y = iris.target
i = np.random.permutation(len(iris.data))#将数据集中前140条作为训练集,后10条作为测试集
x_train = x[i[:-10]]
y_train = y[i[:-10]]
x_test = x[i[-10:]]
y_test = y[i[-10:]]# 导入分类器并用fit()函数训练
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier()
knn.fit(x_train,y_train)

用predict()函数调用knn预测模型,并与实际值比较,结果如下,错误率为10%

knn.predict(x_test)
Out[41]: array([1, 2, 1, 0, 0, 0, 2, 1, 2, 0])
y_test
Out[42]: array([1, 1, 1, 0, 0, 0, 2, 1, 2, 0])

3、决策边界

此外,还可以利用K-近邻分类分别以萼片的长、宽和花瓣的长、宽为轴画出相应的决策边界。以萼片长宽为轴的决策边界如下:

(若以花瓣的长宽为轴,除了x = iris.data[:,2:4] 外,其他代码相同)

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifieriris = datasets.load_iris()
x = iris.data[:,:2] #表示萼片的长度和宽度
y = iris.target #表示花卉种类x_min, x_max = x[:,0].min() - .5, x[:,0].max()+ .5
y_min, y_max = x[:,1].min() - .5, x[:,1].max()+ .5# 绘制网格图
cmap_light = ListedColormap(['#AAAAFF','#AAFFAA','#FFAAAA'])
h = 0.02
xx, yy = np.meshgrid(np.arange(x_min,x_max,h),np.arange(y_min,y_max,h))
knn = KNeighborsClassifier()
knn.fit(x,y)
Z = knn.predict(np.c_[xx.ravel(),yy.ravel()])
Z = Z.reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx,yy,Z,cmap=cmap_light)#画出训练点
plt.scatter(x[:,0],x[:,1],c=y)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())

以萼片数据为轴的决策边界图

以花瓣为轴的决策边界图

Iris鸢尾花卉数据集算法练习——PCA和K近邻分类器相关推荐

  1. K近邻分类器(李飞飞CS231n学习笔记---lecture2:K最近邻算法)

    在讲解K近邻分类器之前,我们先来看一下最近邻分类器(Nearest Neighbor Classifier),它也是K = 1时的K近邻分类器. 目录 最近邻分类器 定义 存在问题 K近邻分类器(KN ...

  2. 白话机器学习算法理论+实战之K近邻算法

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,比如我之前写过的一篇十大机器学习算法的小总结,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑 ...

  3. 【白话机器学习】算法理论+实战之K近邻算法

    作者1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻 ...

  4. 机器学习算法(7)——K近邻(KNN)、K-means、模糊c-均值聚类、DBSCAN与层次与谱聚类算法

    1.K-近邻算法(KNN)概述 (有监督算法,分类算法) 最简单最初级的分类器是将全部的训练数据所对应的类别都记录下来,当测试对象的属性和某个训练对象的属性完全匹配时,便可以对其进行分类.但是怎么可能 ...

  5. k近邻算法_图穷匕见:K近邻算法与手写数字识别

    机器学习算法是从数据中产生模型,也就是进行学习的算法.我们把经验提供给算法,它就能够根据经验数据产生模型.在面对新的情况时,模型就会为我们提供判断(预测)结果.例如,我们根据"个子高.腿长. ...

  6. k近邻算法_机器学习之K近邻分类算法的实现

    K近邻算法(k-nearest neighbors, KNN)是最基本的机器学习算法之一.所谓的K,就是距离最近的K个邻居的意思.其实,KNN在我们平常的生活中也会不自主的应用,比如,俗语说的&quo ...

  7. k近邻算法_【白话机器学习】算法理论+实战之K近邻算法

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支 ...

  8. python 机器学习——K 近邻分类理论及鸢尾( Iris )数据集实例操作

    K 近邻分类理论及鸢尾( Iris )数据集实例操作 一.K 近邻分类理论 二.K 近邻分类实例操作 (1)导入数据 划分训练集测试集 (3)数据标准化 (4)用 K 近邻法建立模型 (5)性能评估 ...

  9. 数据分析(Python)入门—鸢尾植物数据集处理

    专栏文章目录 一.数据分析(Python)入门--鸢尾植物数据集处理 文章目录 专栏文章目录 一.背景解析-数据集介绍 二.快速进入任务 1.导入模型库 2.读取鸢尾植物数据集(iris.csv)为d ...

最新文章

  1. Linux ssh/scp/docker学习
  2. linux 内核 初始化失败,300分求内核初始化及启动中出现的问题,
  3. ajax——实现三级联动下拉列表
  4. Windows安装python 虚拟环境,Virtualenv
  5. 粒子群算法tsp java_粒子群算法解决TSP问题汇总.doc
  6. NO.1_python_scrapy组成爬取多页数据连接数据库配置文件书写
  7. 集合总结(Collection)
  8. hashmap有关问题与计算
  9. nginx优化(经典)
  10. java数组的声明学号姓名线性结构_20172302 《Java软件结构与数据结构》实验一:线性结构实验报告...
  11. 深入理解Linux-hostname
  12. 每日算法系列【LeetCode 943】最短超级串
  13. MyEclipse—如何在MyEclipse中创建servlet3.0
  14. Linux驱动中delayed_workqueue使用:
  15. 神经网络的分类及其不同的应用场景
  16. java根据经纬度得出中心点的经纬度
  17. 【CDH安装】scm_prepare_database.sh使用
  18. 技术人如何打造个人品牌?
  19. 基于Hadoop豆瓣电影数据分析(综合实验)
  20. Java数组:一维数组的定义和赋值

热门文章

  1. Docker 容器文件拷贝及目录挂载
  2. Java学习第二十四天
  3. 基于tp5 微信公众号模板消息
  4. 图像和像素(Images and Pixels)
  5. java如何做聚类分析_K-means算法的Java实现 聚类分析681个三国武将
  6. android键盘坏了怎么办,手机虚拟键盘失灵怎么办
  7. 手机屏幕按键测试软件,涨见识了——手机居然能作为维修检测工具来用!
  8. 【快应用】如何去掉快应用页面的menuBar
  9. 运用js计算个人税收
  10. [顺序刷] M6/M8/M11/E12/E14