机器学习笔记(三):NumPy、Matplotlib、kNN算法 | 凌云时刻
凌云时刻 · 技术
导读:NumPy是Python中的一个类库,它支持高阶维度数组(矩阵)的创建及各种操作、运算,是我们在机器学习中经常会使用的一个类库。这一节再看一些NumPy的矩阵用法。
作者 | 计缘
来源 | 凌云时刻(微信号:linuxpk)
numpy.random
NumPy也提供了生成随机数和随机元素数组的方法,我们来看一下:
|
如果我们希望每次使用随机方法生成的结果都是一样的,一般调试时候有这个需求,此时NumPy的random()
方法也提供了方便简单的方式,既随机种子的概念:
|
指定均值和标准差生成随机数数组或矩阵
我们先来看看均值、方差、标准差的概念。均值很好理解,就是所有样本数据的平均值,描述了样本集合的中间点:
方差是衡量样本点和样本期望值相差的度量值:
标准差描述的是样本集合的各个样本点到均值的距离之平均:
标准差也就是对方差开根号。举个例子,[0, 8, 12, 20]
和[8, 9, 11, 12]
,两个集合的均值都是10,但显然两个集合的差别是很大的,计算两者的标准差,前者是8.3后者是1.8,显然后者较为集中,标准差描述的就是这种散布度或者叫做波动大小。综上,方差的意义在于描述随机变量稳定与波动、集中与分散的状况。标准差则体现随机变量取值与其期望值的偏差。
NumPy也提供了指定均值和标准差生成随机数的方法,我们来看一下:
|
查看数组维度
|
numpy.array的数据访问
|
切片
Python中,有一个获取数组片段非常方便的方法,叫做切片,numpy.array
中同样支持切片,我们来看一下:
|
一般将高维矩阵降为低维矩阵其实也是使用切片来处理:
|
另外需要注意的是通过切片获取NumPy的数组或者矩阵的子数组,子矩阵是通过引用方式的,而Python中的数组通过切片获取的子数组是拷贝方式的。NumPy主要是考虑到性能效率问题。我们来看一下:
|
改变数组维度
NumPy也提供了修改数组维度的方法,我们来看看:
|
数组合并操作
NumPy也提供两个数组合并的操作:
|
多维数组也支持合并:
|
上面的示例都是同维度的数组进行合并,那么不同维度的数组如何合并呢,我们来看一下:
|
其实NumPy提供了更智能的不同维度数组合并的方法,我们来看一下:
|
数组分割操作
有合并自然就会有分割,我们来看看NumPy提供的分割方法:
|
和合并一样,分割也有更快接的方法:
|
矩阵运算
NumPy中提供了完整的矩阵的运算,我们从加减法来看一下:
|
下面我们再来看看数乘:
|
我们再来看看矩阵的转置:
|
聚合操作
NumPy中有很多对数组的聚合操作方法,我们先来看看一维数组:
|
我们再来看看矩阵的聚合操作:
|
索引和排序的相关操作
NumPy提供了一系列对数组索引操作的方法,我们来看一下:
|
我们再来看看排序:
|
NumPy的Fancy Indexing
一般情况下我们访问NumPy数组的数据,可以使用索引,甚至可以用步长来取:
|
但是有时候我们需要取数组中没有什么规律的元素,比如元素之间步长不等的,这就需要用到NumPy提供的Fancy Indexing机制来获取了:
|
除了使用指定索引以外,我们还可以使用布尔数组或者矩阵来使用Fancy Indexing,我们来看一下:
|
Matplotlib
在Python中,除了有NumPy这种对数组操作的类库,还有一个类一个在机器学习中使用比较广泛的类库是Matplotlib,这是一个绘制二维图像的类库,我们来看一下:
|
|
|
|
|
|
|
|
|
以上都是利用matplotlib画折线图,下面来看看如何画散点图:
|
|
|
|
基于Scikit Learn的数据探索
Scikit-learn是Python语言中专门针对机器学习应用而发展起来的一款开源框架,其中有一个模块叫Datasets,它提供了机器学习的一些常用的数据集以及产生数据集的方法,比如波士顿房价数据集、乳腺癌数据集、糖尿病数据集、手写字体数据集、鸢尾花数据集等等。这一小节我们就通过Scikit Learn的Datasets来初步对机器学习的数据进行探索。
我们使用NumPy和Matplotlib对Scikit Learn Datasets中的鸢尾花这个数据集进行探索:
|
从上面的示例可以看到鸢尾花这个字典一共包含五种信息,我们逐一来看看这五种信息:
|
DESCR
详细的描述了鸢尾花这个数据集一共有150组数据,每组数据有4个特征,分别是萼片的长度和厚度、花瓣的长度和厚度,还有3种鸢尾花的类别以及这些数据的统计信息和详细的解释说明。
|
可以看到data
中的数据就是萼片长度、厚度,花瓣长度、厚度的值。是一个150行,4列的矩阵。
|
下面我们用Matplotlib,用图将鸢尾花的数据展示出来,这样就能更直观的来分析这些数据。
|
|
|
|
kNN算法
kNN算法又称k近邻算法,是k-Nearest Neighbors的简称,该算法是监督学习中解决分类问题的算法,也是需要数据知识最少的一个算法,但是效果往往不差,能较好的解释机器学习算法使用过程中的很多细节问题,并且能很好的刻画机器学习应用的流程。
kNN算法解释
上图描述了肿瘤大小和时间的二维关系图,圆点的颜色表示肿瘤的性质是良性还是恶性。
此时又有一个病人的数据采集到,那么我们如何判断这个病人的肿瘤是良性还是恶性呢?
首先我们必须取一个k
值,至于这个k
值是该如何取后续会讲,这里比如我们取k=3
,这个k
值的作用就是基于新来的这个点,找到离它最近的k
个点,这里也就是找到离绿色点最近的三个点:
然后根据这三个代表的特征进行投票,票数最多的特征就是这个绿色点的特征,这个示例中离绿色点最近的三个点都是蓝色点,既恶性肿瘤,那么可判定绿色点代表的肿瘤性质有很高的概率也是恶性。
欧拉距离
kNN算法中唯一用到的数学知识就是如何求点与点之间的距离,在这里我们先使用最普遍的欧拉距离来进行计算,欧拉距离的公式如下:
二维:
三维:
N维(N个特征):
=
用大白话解释就是两个点的所有相同维度之差求平方,然后全部相加再开方。有兴趣的话大家可以再深入研究一下点与点间距离的计算。
编码实现kNN算法
首先我们来准备一下数据:
|
我们将这些样本数据绘制出来看看:
|
下面再创建一组数据,来模拟需要被分类的数据:
|
我们现在就要通过kNN算法来分析这个绿点属于哪个类别,虽然从图上我们已经可以看得出。
我们先来通过欧拉距离公式求出所有点与绿点的距离:
|
现在我们就求出了所有点与绿点的距离,但是求出距离并不能表示出每个距离对应点的类别,所以还需要知道这每个距离对应的是哪个点:
|
从上面的结果可以看到,距离绿点最近的点是X_train
中的第8行样本。那么接下来我们看看如何通过k
值获取这些点的类别:
|
到目前位置,我们就判断出了绿点有很大概率类别属于1,这个过程就是kNN算法的核心过程。
总结
在下一篇笔记中,将会介绍Scikit Learn中是如何封装kNN算法的,以及我们会自己封装一个kNN算法,以及对分类准确度评定,超参数,数据归一化等知识点的讲解。
END
往期精彩文章回顾
机器学习笔记(二):矩阵、环境搭建、NumPy
机器学习笔记(一):机器的学习定义、导数和最小二乘
Kafka从上手到实践 - 实践真知:搭建Kafka相关的UI工具
Kafka从上手到实践 - Kafka集群:启动Kafka集群
Kafka从上手到实践 - Kafka集群:Kafka Listeners
Kafka从上手到实践 - Kafka集群:配置Broker
Kafka从上手到实践:搭建Zookeeper集群
Kafka从上手到实践-Zookeeper CLI:CRUD zNode
Kafka从上手到实践 - 初步认知:Zookeeper
Kafka从上手到实践:Kafka Java Consumer
长按扫描二维码关注凌云时刻
每日收获前沿技术与科技洞见
机器学习笔记(三):NumPy、Matplotlib、kNN算法 | 凌云时刻相关推荐
- 算法图解第十章笔记与习题(KNN算法)
算法图解第十章笔记与习题(KNN算法) 文章目录 算法图解第十章笔记与习题(KNN算法) 10.1 KNN算法 10.2特征提取 10.3 回归 10.4 小结 练习 习题10.1: 习题10.2: ...
- 神经网络与机器学习 笔记—LMS(最小均方算法)和学习率退火
神经网络与机器学习 笔记-LMS(最小均方算法)和学习率退火 LMS算法和Rosenblatt感知器算法非常想,唯独就是去掉了神经元的压制函数,Rosenblatt用的Sgn压制函数,LMS不需要压制 ...
- 机器学习笔记三—卷积神经网络与循环神经网络
系列文章目录 机器学习笔记一-机器学习基本知识 机器学习笔记二-梯度下降和反向传播 机器学习笔记三-卷积神经网络与循环神经网络 机器学习笔记四-机器学习可解释性 机器学习笔记五-机器学习攻击与防御 机 ...
- 机器学习入门 —— 超级详细的KNN算法学习笔记、KNN算法的三要素、KNN算法的优缺点
文章目录 KNN(K nearest neighbors) K值的选择和影响 k取值偏小 k取值偏大 样本点距离的计算方式 闵可夫斯基距离 曼哈顿距离 欧几里得距离 切比雪夫距离 余弦距离 决策函数的 ...
- 机器学习小组系列笔记---(一)knn算法
一.本周学习内容 知识点描述:用代码打开AI的大门 本周是机器学习小组第一期的第一周,我们这周从最简单的机器学习算法"K-近邻算法"开始,通过代码走进机器学习的大门,搞定传统机器学 ...
- 机器学习笔记(一) KNN K-最近邻
零.摘要 本篇文章主要讲述KNN算法(K-nearest neighbor)的原理与技术细节,并简单提及了数据预处理的方法. 主要参考资料: 斯坦福CS231n课程笔记:分类 <机器学习> ...
- 机器学习与深度学习——通过knn算法分类鸢尾花数据集iris求出错误率并进行可视化
什么是knn算法? KNN算法是一种基于实例的机器学习算法,其全称为K-最近邻算法(K-Nearest Neighbors Algorithm).它是一种简单但非常有效的分类和回归算法. 该算法的基本 ...
- 阿旭机器学习实战【2】KNN算法进行人体动作识别
本系列文章为机器学习实战内容,旨在通过实战的方式学习各种机器学习算法的知识,更易于掌握和学习,更过干货内容持续更新- 目录 人类动作识别问题描述 导入相关数据并查看数据信息 构建KNN算法模型并查看准 ...
- 机器学习笔记(十)---- KNN(K Nearst Neighbor)
KNN是一种常见的监督学习算法,工作机制很好理解:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个"邻居"的信息来进行预测.总结一句话就是&quo ...
- 机器学习之手写字识别(Knn算法应用)
手写字识别 对手写字体图片进行识别最重要的一点就是要将其转化为二值化(就是就是将图像上的像素点或灰度值设置为0或1,其呈现就是非黑即白)后的数据,然后再进行处理,在手写体处理中,二值化就是有手写笔画的 ...
最新文章
- 中国电子学会图形化四级编程题:程序优化
- Xamarin提示Build-tools版本过老
- AOP原理-创建AOP代理--AnnotationAwareAspectJAutoProxyCreator【InstantiationAwareBeanPostProcessor】的作用
- 【Python】调用百度云API驾驶行为分析 Driver Behavior
- 数学之美 系列十三 信息指纹及其应用
- VTK:Qt之ShareCameraQt
- 树的宽度 递归法和非递归法
- Vue全家桶实战03_【从入门到放弃系列】
- python面向对象属性_Python面向对象属性
- 关闭layui的弹出层,还会遮罩后面的界面
- mysql 数值型注入_slq-注入总结(中)
- 如何在 Mac 上使用“备忘录”管理扫描文稿?
- 标准时间标准Time Zone: GMT,UTC,DST,CST
- ssm启动不报错_搭建ssm+maven环境,启动报错,说spring监听无法实例化,求解?
- [android 游戏源码]-体育游戏-疯狂足球源码
- #IB TWS编程手记——03-关于IB合约的一二三
- python在直方图上画折线图_Python 中 plt 画柱状图和折线图
- 每日学点python之六(列表与元组)
- webStrom找回删除的文件
- (转)日期插件layDate的使用