【机器学习】一文搞懂K近邻算法(KNN)、机器学习预测油井泄漏有效遏制全球变暖

2019 年 1 月 10 日 产业智能官

一文搞懂K近邻算法(KNN),附带多个实现案例

董安勇 AI科技大本营 


简介:本文作者为 CSDN 博客作者董安勇,江苏泰州人,现就读于昆明理工大学电子与通信工程专业硕士,目前主要学习机器学习,深度学习以及大数据,主要使用python、Java编程语言。平时喜欢看书,打篮球,编程。学习为了进步,进步为了更好的学习!


一、KNN回顾


k 近邻学习是一种常用的监督学习方法,比如:判断一个人的人品,只需要观察与他来往最密切的几个人的人品好坏就可以得出,即“近朱者赤,近墨者黑”。


理论/原理:“物以类聚,人以群分”


  • 相同/近似样本在样本空间中是比较接近的,所以可以使用和当前样本比较近的其他样本的目标属性值作为当前样本的预测值。


k 近邻法的工作机制很简单:


  • 给定测试样本,基于某种距离度量(一般使用欧几里德距离)找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测。


二、KNN三要素


1、K值的选择


  • 对于K值的选择,一般根据样本分布选择一个较小的值,然后通过交叉验证来选择一个比较合适的最终值;

  • 当选择比较小的K值的时候,表示使用较小领域中的样本进行预测,训练误差会减小,但是会导致模型变得复杂,容易导致过拟合;

  • 当选择较大的K值的时候,表示使用较大领域中的样本进行预测,训练误差会增大,同时会使模型变得简单,容易导致欠拟合;




2、距离度量


  • 一般使用欧几里德距离

  • 关于距离度量,还有其他方式


3、决策规则


KNN在做回归和分类的主要区别在于最后做预测时的决策方式不同:


(1)分类预测规则:一般采用多数表决法或者加权多数表决法



假设图中 “?”表示待预测样本,红色圆表示一类,蓝色方块表示一类,2和3表示到待预测样本的距离


1. 多数表决法:


  • 每个邻近样本的权重是一样的,也就是说最终预测的结果为出现类别最多的那个类;

  • 如图,待预测样本被预测为红色圆



2. 加权多数表决法:


  • 每个邻近样本的权重是不一样的,一般情况下采用权重和距离成反比的方式来计算,也就是说最终预测结果是出现权重最大的那个类别;

  • 如图,红色圆到待预测样本的距离为3,蓝色方块到待预测样本的距离为2,权重与距离成反比,所以蓝色的权重比较大,待预测样本被预测为蓝色方块。


(2)回归预测规则:一般采用平均值法或者加权平均值法



假设上图中的2和3表示邻近样本的目标属性值(标签值),此时没有类别,只有属性值


1、平均值法


  • 每个邻近样本的权重是一样的,也就是说最终预测的结果为所有邻近样本的目标属性值的均值;

  • 如图,均值为(3+3+3+2+2)/5=2.6


2、加权平均值法



图中,双箭头线上的数表示到待预测样本的距离


  • 每个邻近样本的权重是不一样的,一般情况下采用权重和距离成反比的方式来计算,也就是说在计算均值的时候进行加权操作;

  • 如图,权重分别为(各自距离反比占距离反比总和的比例):

  • 属性值为3的权重:


  • 属性值为2的权重:

  • 待预测样本的加权平均值为:




三、手写 k 近邻算法


实现kNN分类算法的伪代码:


对未知类别属性的数据集中的每个点依次执行一下操作:


(1)计算已知类别数据集中的点与当前点之间的距离

(2)按照距离递增次序排序

(3)选取与当前点距离最小的k个点

(4)确定前k个点所在类别的出现频数

(5)返回当前k个点出现频数最高的类别作为当前点的预测分类


欧氏距离公式:

 

例如求点(1,0,0,1) (1,0,0,1)(1,0,0,1)和(7,6,9,4) (7,6,9,4)(7,6,9,4)之间的距离:

检测分类器效果:

  • 可以使用已知类别的数据(当然不告诉分类器),检验分类器给出的结果是否与已知类别相同,通过大量的测试数据,我们可以计算出分类器的错误率。


以上算法的实现是用于分类的,决策规则使用了多数表决法;此算法通过改变决策规则,同样可以用于回归。


源代码可见:https://github.com/Daycym/Machine_Learning/tree/master/03_KNN;01_k近邻算法.py


四、使用手写k kk 近邻算法的案例


1、案例1:约会网站的配对效果


样本包括3种特征:


  • 每年获得的飞行常客里程数

  • 玩视频游戏所耗时间百分比

  • 每周消费的冰淇淋公升数


样本包括3种标签:


  • 不喜欢的人

  • 魅力一般的人

  • 极具魅力的人


部分数据格式为:



代码可见:02_约会网站的配对效果.py


2、案例2:手写数字识别系统


  • 数据集包括训练集和测试集

  • 数据是32*32的二进制文本文件

  • 需要将文本数据转换为Numpy数组


如下是0的一种表示:



100000000000001100000000000000000
200000000000011111100000000000000
300000000000111111111000000000000
400000000011111111111000000000000
500000001111111111111100000000000
600000000111111100011110000000000
700000001111110000001110000000000
800000001111110000001110000000000
900000011111100000001110000000000
1000000011111100000001111000000000
1100000011111100000000011100000000
1200000011111100000000011100000000
1300000011111000000000001110000000
1400000011111000000000001110000000
1500000001111100000000000111000000
1600000001111100000000000111000000
1700000001111100000000000111000000
1800000011111000000000000111000000
1900000011111000000000000111000000
2000000000111100000000000011100000
2100000000111100000000000111100000
2200000000111100000000000111100000
2300000000111100000000001111100000
2400000000011110000000000111110000
2500000000011111000000001111100000
2600000000011111000000011111100000
2700000000011111000000111111000000
2800000000011111100011111111000000
2900000000000111111111111110000000
3000000000000111111111111100000000
3100000000000011111111110000000000
3200000000000000111110000000000000



预测错误的总数为:10

手写数字识别系统的错误率为:0.010571


代码可见:03_手写数字识别系统.py


五、KD树


KNN算法的重点在于找出K个最邻近的点,主要方法如下:


1、蛮力实现(brute)


  • 计算出待预测样本到所有训练样本的训练数据,然后选择最小的K个距离即可得到K个最邻近点;

  • 当特征数比较多,样本数比较多的时候,算法的执行效率比较低。


2、KD树(KD_Tree)


  • KD_Tree算法中,首先是对训练数据进行建模,构建KD树,然后再根据构建好的模型来获取邻近样本数据

  • KD_Tree是KNN算法中用于计算最近邻的快速、便捷构建方式


除此之外,还有一些从KD_Tree修改后的求解最邻近点的算法,比如:Ball Tree、BBF Tree、MVP Tree等


  • 当样本数据量少的时候,我们可以使用brute这种暴力的方式进行求解最近邻,即计算到所有样本的距离。

  • 当样本量比较大的时候,直接计算所有样本的距离,工作量有点大,所以在这种情况下,我们可以使用kd tree来快速的计算。


(1)KD数的构建


KD树采用从m个样本的n维特征中,分别计算n个特征取值的方差,用方差最大的第 k 维特征作为根节点。对于这个特征,选择取值的中位数作为样本的划分点,对于小于该值的样本划分到左子树,对于大于等于该值的样本划分到右子树,对左右子树采用同样的方式找方差最大的特征作为根节点,递归即可产生KD树。


假设二维样本为:{(2, 3), (5, 4), (9, 6), (4, 7), (8, 1), (7, 2)},下面我们来构建KD树:


1、计算每个特征的方差,取方差最大的作为根节点


方差表示数据的离散程度,离散程度越大,值越大。因此,选择第1维特征x1作为根节点。


2、选取中位数作为划分点


x1取值为2,4,5,7,8,9 2,4,5,7,8,92,4,5,7,8,9中位数取7来划分,小于该值的放在左子树,大于该值的放在右子树



3、特征空间划分:



(2)KD tree查找最近邻


当我们生成KD树以后,就可以取预测测试集里面的样本目标点了。

  • 对于一个目标点,我们首先在KD树里面寻找包含目标点的叶子节点;

  • 以目标点为圆心,以目标点到叶子节点样本实例的距离为半径,得到一个超球体,最近邻的点一定在这个超球体内部;

  • 然后返回叶子节点的父节点,检查另一个子节点包含的超矩形体是否和超球体相交,如果相交就到这个子节点寻找是否有更加近的近邻,有点话就更新最近邻;如果不相交那就直接返回父节点的父节点,在另一个子树继续搜索最近邻;

  • 当回溯到根节点时,算法就结束了,保存最近邻节点就是最终的最近邻。


假设要寻找点(2,2.5) (2,2.5)(2,2.5)的最近邻点:



六、KNN案例


1、鸢尾花数据分类


  • 使用Logistic算法和KNN算法对鸢尾花数据进行分类,比较结果;

  • 具体内容在代码的注释中有介绍;

  • 画出下面两张图,需要将代码整合起来,才能画出来。


代码可见:https://github.com/Daycym/Machine_Learning;02_Logistic回归05_鸢尾花数据分类.py,以及03_KNN目录下04_鸢尾花数据分类.py


2、信贷审批

具体内容将在代码中介绍


代码可见:https://github.com/Daycym/Machine_Learning;02_Logistic回归03_信贷审批.py,以及03_KNN目录下05_信贷审批.py


七、总结


  • 本篇主要通过简单的暴力求解的方式实现KNN算法,有助于理解KNN算法

  • 后面又介绍了KD树找K个最近邻,此算法是最快捷的

  • 最后通过sklearn库下的KNeighborsClassifier实现了两个案例,来属性KNN模型的构建



原文链接:

https://blog.csdn.net/Daycym/article/details/84452786




机器学习预测油井泄漏,有效遏制全球变暖


全球智能化商业

导读:佛蒙特大学(University of Vermont)的研究人员使用机器学习算法来判断天然气和油井何时会泄漏甲烷,已经实现87%的准确度。甲烷是一种非常强效的温室气体,对全球变暖的影响是二氧化碳的90多倍。


▍图片来源于网络


在科学家利用人工智能识别石油和气井中温室气体的泄漏情况后,这一技术将在遏制全球变暖方面发挥关键作用。

 

佛蒙特大学(University ofVermont)进行了一项研究,使用机器学习算法来预测油井是否会排放甲烷。由于甲烷是一种非常强效的温室气体,在排放后的头20年里,其对全球变暖的影响是二氧化碳的90多倍。

 

该研究测试了加拿大阿尔伯塔省的38391口井,能够以87%的准确率确定哪些油井漏气,哪些正常。研究者表示:“鉴于甲烷是导致全球变暖的一个重要因素,这是一个应该加以利用和重视的信息。”



甲烷对全球变暖的影响


数十年来,美国能源部的大气辐射测量(ARM)设施一直在收集地球大气的综合观测数据。

 

在最新研究中,科学家对高度校准的长期测量结果进行了分析,将甲烷导致的温室效应变化独立出来,首次获得了甲烷导致温室效应增加的直接观测数据。发表于4月2日的《自然·地球科学》杂志中的研究称,21世纪初,大气中甲烷的浓度停滞不前,温室效应也遵循同样的模式;但从2007年开始,甲烷浓度开始上升的同时,其导致的温室效应也水涨船高。

 

研究主要作者、伯克利实验室研究科学家丹·费尔德曼说:“来自实验室的测量、理论和模型,都认为甲烷是一种重要的温室气体,但我们一直持怀疑态度。最新研究直接计算了随着甲烷浓度不断增加,会如何导致地球大气层温室效应的与日俱增。”


▍图片来源于网络



机器学习识别甲烷泄漏


佛蒙特大学研发的机器学习算法分析得出了16个特征,通过对这些特征的分析,研究者可以预测油井是否有破裂和泄漏的风险。

 

机器学习算法识别的三个关键特征揭示了油井的易损状况:偏离垂直钻井线的油井;历史悠久、尚未引入现代钻井技术之前开掘的油井;环面较大的油井——套管越大,需要的水泥体积越大,这就增加了产生空隙的可能性。

 

通过机器学习算法,研究人员获得了油井状况的详细信息,包括4000正在开采的油井中石油或天然气的流体性质。对于这些油井,机器学习算法识别甲烷泄漏的准确率为87%。另有包含28500口油井的大样本,当中流体性质尚不清楚,机器算法的判断准确率约为62%。


▍图片来源于网络



人工智能扮演关键角色


阿尔伯塔省的公司被要求在开始作业前测试油井,以确定它们是否产生空隙并泄漏了甲烷,员工还被要求必须仔细记录每口井的施工特征。

 

Anthony Ingraffea教授是康奈尔大学土木和环境工程学院的教授,他是石油和天然气井设计和建造方面的专家。针对这一研究,他说:“省和州的监管机构从来没有足够的检查人员或财政拨款来定位泄漏油井,更不用说修复了。佛蒙特大学这项研究对政府来说是无价的,因为他们现在可以将检查重点放在最可能现在泄漏或即将泄漏的油井上。”

 

研究人员表示,该机器算法统计出的结论还有助于为设计和建造新油井提供理论支撑,将油井泄露的可能性降至最低。据悉,在阿尔伯达省的油井数据库中,大约有12.5%的油井在投产时发生泄漏。

  

▍图片来源于网络

 

佛蒙特大学的研究者表示,随着现有油井的逐渐老化,甲烷泄漏问题需要得到更多重视。他说:“考虑到油井很可能会随着年龄的增长而老化,现有研究结果可能会低估最终会发生故障和泄漏的油井数量。”






工业互联网




产业智能官  AI-CPS


加入知识星球“产业智能研究院”:先进产业OT(工艺+自动化+机器人+新能源+精益)技术和新一代信息IT技术(云计算+大数据+物联网+区块链+人工智能)深度融合,在场景中构建状态感知-实时分析-自主决策-精准执行-学习提升的机器智能认知计算系统实现产业转型升级、DT驱动业务、价值创新创造的产业互联生态链



版权声明产业智能官(ID:AI-CPS)推荐的文章,除非确实无法确认,我们都会注明作者和来源,涉权烦请联系协商解决,联系、投稿邮箱:erp_vip@hotmail.com。





登录查看更多
0

相关内容

“知识神经元网络”KNN(Knowledge neural network)是一种以“神经元网络”模型 为基础的知识组织方法。 在“知识神经元网络”KNN 中,所谓的“知识”,是描述一个“知识”的文本,如一个网页、Word、PDF 文档等。
【元图(Meta-Graph):元学习小样本连接预测】
专知会员服务
64+阅读 · 2020年5月31日
【新书】Pro 机器学习算法Python实现,379页pdf
专知会员服务
199+阅读 · 2020年2月11日
【华侨大学】基于混合深度学习算法的疾病预测模型
专知会员服务
96+阅读 · 2020年1月21日
专知会员服务
116+阅读 · 2019年12月24日
金融时序预测中的深度学习方法:2005到2019
专知会员服务
166+阅读 · 2019年12月4日
【机器学习课程】Google机器学习速成课程
专知会员服务
164+阅读 · 2019年12月2日
新书《面向机器学习和数据分析的特征工程》,419页pdf
专知会员服务
142+阅读 · 2019年10月10日
备战AI求职季 | 100道机器学习面试题(上)
七月在线实验室
9+阅读 · 2019年3月16日
kNN算法——帮你找到身边最相近的人
云栖社区
4+阅读 · 2018年9月3日
BAT机器学习面试题1000题(331~335题)
七月在线实验室
12+阅读 · 2018年8月13日
K近邻算法入门
论智
5+阅读 · 2018年3月18日
Machine Learning:十大机器学习算法
开源中国
21+阅读 · 2018年3月1日
BAT机器学习面试题1000题(316~320题)
七月在线实验室
14+阅读 · 2018年1月18日
机器学习面试题精讲(一)
七月在线实验室
4+阅读 · 2018年1月11日
机器学习算法比较
我爱机器学习
4+阅读 · 2016年12月11日
Arxiv
110+阅读 · 2020年2月5日
Federated Learning for Mobile Keyboard Prediction
Arxiv
5+阅读 · 2018年11月8日
Arxiv
6+阅读 · 2018年8月27日
Arxiv
4+阅读 · 2018年3月19日
VIP会员
相关VIP内容
【元图(Meta-Graph):元学习小样本连接预测】
专知会员服务
64+阅读 · 2020年5月31日
【新书】Pro 机器学习算法Python实现,379页pdf
专知会员服务
199+阅读 · 2020年2月11日
【华侨大学】基于混合深度学习算法的疾病预测模型
专知会员服务
96+阅读 · 2020年1月21日
专知会员服务
116+阅读 · 2019年12月24日
金融时序预测中的深度学习方法:2005到2019
专知会员服务
166+阅读 · 2019年12月4日
【机器学习课程】Google机器学习速成课程
专知会员服务
164+阅读 · 2019年12月2日
新书《面向机器学习和数据分析的特征工程》,419页pdf
专知会员服务
142+阅读 · 2019年10月10日
相关资讯
备战AI求职季 | 100道机器学习面试题(上)
七月在线实验室
9+阅读 · 2019年3月16日
kNN算法——帮你找到身边最相近的人
云栖社区
4+阅读 · 2018年9月3日
BAT机器学习面试题1000题(331~335题)
七月在线实验室
12+阅读 · 2018年8月13日
K近邻算法入门
论智
5+阅读 · 2018年3月18日
Machine Learning:十大机器学习算法
开源中国
21+阅读 · 2018年3月1日
BAT机器学习面试题1000题(316~320题)
七月在线实验室
14+阅读 · 2018年1月18日
机器学习面试题精讲(一)
七月在线实验室
4+阅读 · 2018年1月11日
机器学习算法比较
我爱机器学习
4+阅读 · 2016年12月11日
Top
微信扫码咨询专知VIP会员