文章目录

  • 源码
    • 优势
    • 局限
    • 代码
  • API
  • 实现原理
    • 预处理
      • 创建标记和颜色生成器
      • 确定坐标轴数据范围
      • 基于数据范围创建网格坐标
      • 获得预测结果的三维网格坐标
    • 绘制
      • 绘制等高线图
      • 绘制样本分布散点图
      • 高亮测试集
  • 示例
    • SVM最大边界
    • 设定截止参数的SVM

源码

源码来自Python Machine Learning 3rd,Chapter 3,自己加入了一些理解和修改

优势

  • 适用于大多数分类算法模型,对不同参数的统一模型都能够绘制出不同的决策边界
  • 高亮测试集样本
  • 默认支持5种分类情况,可拓展

局限

  • 只能够适用于二维特征向量的数据可视化
  • 只适用于监督学习分类问题,包括线性回归,逻辑回归,SVM,KNN,决策树,随机森林等等

代码

from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt
%matplotlib inline
def plot_decision_regions(X, y, classifier, test_idx=None, resolution=0.02):# setup marker generator and color mapmarkers = ('s', 'x', 'o', '^', 'v')colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')cmap = ListedColormap(colors[:len(np.unique(y))]) # colors that need in classfication## plot the decision surface# get the range of axesx1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1# create meshgrid coordinates for plotting contourxx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),np.arange(x2_min, x2_max, resolution))# get predicted Z, which determine how the boundary will be likeZ = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)Z = Z.reshape(xx1.shape)# plot the contourplt.contourf(xx1, xx2, Z, alpha=0.3, cmap=cmap)plt.xlim(xx1.min(), xx1.max())plt.ylim(xx2.min(), xx2.max())# scatter plot the data pointsfor idx, cl in enumerate(np.unique(y)):plt.scatter(x=X[y==cl, 0], y=X[y==cl, 1],alpha=0.8, c=colors[idx],marker=markers[idx], label=cl,edgecolor='black')# highlight test examples if test_idx:# plot all examplesX_test, y_test = X[test_idx, :], y[test_idx]plt.scatter(X_test[:, 0], X_test[:, 1],c='', edgecolor='black', alpha=1.0,linewidth=1, marker='o',s=100, label='test set')

API

  • X = 输入特征数据集
  • y = 输入分类结果
  • classifier = 分类器,比如KNN,随机数等,一般直接与sklearn里面的算法库对接,如: s k l e a r n . e n s e m b l e . R a n d o m F o r e s t C l a s s i f i e r sklearn.ensemble.RandomForestClassifier sklearn.ensemble.RandomForestClassifier
  • resolution = 分辨率,决定网格坐标间的距离,越小数据分布展示原准确,绘图算力成本高

实现原理

原理是基于网格的等高线图,但是等高线图不一定画出来的图一定是等高线,边界线的分布根本上还是根据预测结果来分布的,预测结果的模型分布呈线性,那么实际画出来的结果仍然是线性的

预处理

绘制之前创建用于绘图的必要组件

创建标记和颜色生成器

注意颜色需要生成cmap,标记则不需要

markers = ('s', 'x', 'o', '^', 'v')
colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
cmap = ListedColormap(colors[:len(np.unique(y))]) # colors that need in classfication

确定坐标轴数据范围

x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1

一般而言对最值进行加减一处理更好

基于数据范围创建网格坐标

xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),np.arange(x2_min, x2_max, resolution))

使用meshgrid创建网格坐标(网格坐标原理不明),这里创建的是用来确定坐标轴的所有坐标,数据点就分布在这些网格点上,resolution参数确定了网格分布的距离

获得预测结果的三维网格坐标

Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
Z = Z.reshape(xx1.shape)

使用模型(classifier)获得预测结果不必多说了,获得结果之后使用reshape方法将结果z也转换为网格坐标

绘制

获得了绘制所需要的数据坐标和生成器后,开始绘制

绘制等高线图

plt.contourf(xx1, xx2, Z, alpha=0.3, cmap=cmap)
plt.xlim(xx1.min(), xx1.max())
plt.ylim(xx2.min(), xx2.max())

绘制等高线图:

  • 设置透明度alpha
  • 注册cmap

绘制样本分布散点图

for idx, cl in enumerate(np.unique(y)):plt.scatter(x=X[y==cl, 0], y=X[y==cl, 1],alpha=0.8, c=colors[idx],marker=markers[idx], label=cl,edgecolor='black')

很标准的绘制样本点的方法

  • 使用enumerate方法绘制每个类的样本点
  • 使用标记和颜色生成器,这里idx最大值为4,适用于5种分类,拓展生成器就可拓展适宜的分类结果

高亮测试集

if test_idx:X_test, y_test = X[test_idx, :], y[test_idx]plt.scatter(X_test[:, 0], X_test[:, 1],c='', edgecolor='black', alpha=1.0,linewidth=1, marker='o',s=100, label='test set')

也是绘制散点图,设置直径s透明度alpha=1并且设定边框edgecolor,这样就能够完成圆圈的效果

示例

SVM最大边界

设定截止参数的SVM

棒棒的二维数据可视化分类模型相关推荐

  1. Tikz作图教程:pgfplots宏包二维数据可视化的数据导入方法

    pgfplots 绘图思想简介 下面一段介绍来自pgfplots说明文档的引言部分,它对pgfplots的绘图思想作了清晰地描述: 科研工作者在交流研究结果.论文时,将数据可视化往往是必要和方便的. ...

  2. 从1维到6维,一文读懂多维数据可视化策略

    本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载 选自towardsdatascience 作者:Dipanjan Sarkar 参与:Jane W.乾树.黄小天 数 ...

  3. 图像特征分析方法---- 多维数据可视化方法

    多维数据可视化方法 2017-09-21 17:12 来源:炼数成金订阅号 原标题:多维数据可视化方法,看这一篇就够了 多维数据可视化是指通过一些手段将高维的数据展示在二维的平面中. 在进行探索性数据 ...

  4. 【数据挖掘】数据挖掘总结 ( K-Means 聚类算法 | 二维数据的 K-Means 聚类 ) ★

    文章目录 一. K-Means 聚类算法流程 二. 二维数据的 K-Means 聚类 1. 第一次迭代 2. 第二次迭代 参考博客 : [数据挖掘]聚类算法 简介 ( 基于划分的聚类方法 | 基于层次 ...

  5. 【数据挖掘】K-Means 二维数据聚类分析 ( K-Means 迭代总结 | K-Means 初始中心点选择方案 | K-Means 算法优缺点 | K-Means 算法变种 )

    文章目录 K-Means 二维数据 聚类分析 数据样本及聚类要求 二维数据曼哈顿距离计算 K-Means 算法 步骤 第一次迭代 : 步骤 ( 1 ) 中心点初始化 第一次迭代 : 步骤 ( 2 ) ...

  6. Python-深度学习-学习笔记(13):keras搭建卷积神经网络(对二维数据进行一维卷积)

    Python-深度学习-学习笔记(13):keras搭建卷积神经网络(对二维数据进行一维卷积) 卷积神经网络进行图像分类是深度学习关于图像处理的一个应用,卷积神经网络的优点是能够直接与图像像素进行卷积 ...

  7. 【机器学习】python使用matplotlib进行二维数据绘图并保存为png图片

    端到端机器学习导航: [机器学习]python借助pandas加载并显示csv数据文件,并绘制直方图 [机器学习]python使用matplotlib进行二维数据绘图并保存为png图片 [机器学习]p ...

  8. 二维数据输入到matlab cnn网络训练

    如果是三维图片数据,需要另外的方法 matlab搭建cnn分类自己的图片数据 对于二维数据,数据结构也有一定的要求: 原始数据结构(未划分训练和测试): 划分数据集并改变维度: %% random s ...

  9. Python一维二维数据的格式化和处理

    本章导言 什么是数据格式化 前言: -学完本章,看待数据会有一种规范/格式化的视角 -方法论:从Python角度理解文件和数据表示 -实践能力:学会编写带有文件输入输出的程序 1. 数据组织的维度 维 ...

最新文章

  1. Udacity机器人软件工程师课程笔记(三十五) - SLAM - 基于网格的FastSLAM
  2. 360安全卫士 导致MySQL 5.0.24 自动关闭
  3. 《阿里巴巴Android开发手册》正式发布
  4. 深入剖析js命名空间函数namespace
  5. java中 怎么获取bean_java普通类如何得到spring中的bean类
  6. PythonRabbitmq文档阅读笔记-生产者数据直接送入队列消费者消费
  7. 内网DNS地址自己定
  8. golang下载网站的实例的办法
  9. 软回车和硬回车 MS高级office
  10. 语音识别中特征提取MFCC、FBANK、语谱图特征提取
  11. 手机中的RAM和ROM分别对应电脑的内存和硬盘
  12. 【硬核技术文】研发绩效,AI算法的完美舞台
  13. 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
  14. struct所占的内存
  15. AI Conference:2018, 不容错过的世界人工智能大会 | 抢票
  16. 51单片机(四)—— 51单片机仿真芯片的使用
  17. linux dns chroot,chroot环境下dns解析不好用
  18. 解决win10下samba不能访问
  19. IDEA 导入外来jar包并生效(同 Eclipse 中 buid path 效果)
  20. Python——标准库函数

热门文章

  1. http状态码(204,304, 404, 504,502)
  2. **Java程序员装机必备软件**
  3. 怎么禁用笔记本触摸板
  4. linux 笔记本禁用触摸板
  5. 推荐人工智能编程的必读书籍
  6. 小米公司不管老用户的手机了。小米1
  7. html页面和手机比例一致 一比一自适应 Mixed Content: The page at ‘xxx‘ was loaded over HTTPS, but requested an insec
  8. 国防科大计算机科学与技术专业排名,国防科技大学王牌专业排名
  9. 汇编中的test和cmp指令[Z]
  10. 频谱 功率谱 功率谱密度