点击关注上方“小田学python”,获取更多精彩内容

机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径。

那么多余的内容就不说了,想必大家都明白,网上内容实在太多了。接下来进入正题,第一个机器学习算法——KNN。

01

原理透析 

KNN算法即K-近邻算法,是机器学习算法当中相对较为简单的一个分类算法,它属于上图分类中的监督学习算法,监督学习是指利用一组已知类别的样本进行训练,来推断新的数据,也就是用打过标签的数据来训练。

它的判决是通过特征值的欧几里得距离:

欧式距离是最常见的距离量度,衡量的是多维空间中各个点之间的绝对距离。

具体判别方法是:一个样本在其特征空间里的K个最邻近的样本中进行投票,该样本属于投票数量较多的那个类别,K的取值要结合具体内容来调节。单凭文字看的很懵,那就上图吧:

上图描述的就是一个KNN算法的过程(数据位置随机,仅为介绍原理),其中五角星是待测数据,三角形和正方形分别是两个类别,K-近邻算法是在K个最近的样本中进行投票。例如,设置K=3,那么就计算得所有样本的欧氏距离,进行排序,取最近的3个,那么也就是其中的蓝色圈范围。其中包括两个三角形,一个正方形,其概率也就是:三角形 2/3,正方形 1/3,因此可以判别出该五角星属于三角形一类。

下面通过一个例子告诉你,KNN算法该如何实现:

# 导入包:KNN方法在sklearn下neighbors中

补充:KNN可以做分类问题,以及回归问题

分类问题:from sklearn.neighbors import KNeighborsClassifier回归问题:from sklearn.neighbors import KNeighborsRegressor

为了容易理解,编造少量数据进行演示:

data = pd.DataFrame([[

那么接下来就可以通过特征值来训练模型,当然电影名称不能用来判断,就选用“武打镜头”和“接吻镜头”来分析,“分类情况”是已经打好的标签。

X = data[[

接下来开始训练模型,至于参数问题,我使用的jupyter,通过shift+tab可以显示需要传的参数,其他环境也有自己的方式,可以试着摸索一下。

# 创建对象并训练模型

训练好模型就可以测试一下了,看看到底准确与否。

# 武打镜头:100,接吻镜头:3 显然我们自己可以判断出这是个动作片

下面可以解析一下它是怎么做到的。已知KNN是利用欧式距离判别,那么就手动的计算下。

# 欧式距离公式

可以看到动作片的投票占到了0.6,爱情片占0.4,knn的预测还有一个函数predict_proba,即为预测概率值。

.6,爱情片的概率为0

上述内容已经完整的走了一遍KNN算法的过程。但是其中有一些缺陷,再拿回来前面的一幅图看一下。

可以看到,我还画了一个红色的圈,也就是选取K=7的时候,所取到的最近邻样本,这时候再看投票比例:正方形 4/7,三角形 3/7,五角星判决为正方形,不再是K取3时的三角形。这就是它的一个缺陷:不稳定,而且KNN的时间复杂度和空间复杂度都很高,因为它要遍历所有的样本,计算欧氏距离。那么它解决不了的问题还有其他算法来解决,所以也不用担心啦。

02

实战演练 

实战演练选取的是一个十分经典的案例——手写数字识别(MNIST)。不出意外,后续讲解其他算法同样会用到这个例子。

数据集包括训练集 6w 条数据,测试集 1w 条数据。(需要数据可以公众号后台添加小田微信)

import numpy 
# pandas读取训练数据,并查看其内容

查看数据,可以观察到,表中第一列是对应数字的标签,后面的就是该数字图像的像素点(因为照片四周是空白的,也即是0)。

数据共 6w 条,第一列是标签,那么后面784列便是数字的特征值(即28X28的图片展开为一维)。接下来就是拆分成上面所提到的特征值和标签:

# 拆分为第一列的标签值和后面784列的特征值

下面开始训练数据:

%%time

高估了我电脑的性能,尽然用了一分钟。后面进行预测的时候耗时将更多,大家想测试的话可以截取其中部分数据进行建模。下面开始检验模型:

test_data = pd.read_csv(
%%time
Wall time: 20min 42s(不出意外,尽然二十分钟,同时也可以看到该算法的复杂度,曾经用神经网络跑这个数据集用了近十分钟)。
# 计算一下上述模型的准确率
还有一个命令knn.scorere(X_test, y_test),它既进行了预测,同时计算出准确率。上述就是一个完整的过程。不过其中还有可以优化的地方,毕竟上面的耗时、准确度还有待提高。

jupyter中shift+tab,查看其中的参数,包括例如投票的权重(weights)、算法(algorithm)、多进程(n_jobs)等,以上参数需要自己协调,找到最合适的,可以降低计算时间,提高准确率。

还在用Matplotlib? 又一可视化神器pyecharts登场

一文理清面向对象(封装、继承、多态)+ 实战案例

足球运动员的数据分析实战(python)

k近邻算法_【机器学习】K近邻算法(KNN)相关推荐

  1. 机器学习算法_机器学习之EM算法和概率图模型

    [晓白]今天我准备更新Machine Learning系列文章希望对机器学习复习和准备面试的同学有帮助!之前更新了感知机和SVM,决策树&代码实战,关注我的专栏可以的文章哦!今天继续更新EM算 ...

  2. cart算法_机器学习十大算法之一——决策树CART算法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第23篇文章,我们今天分享的内容是十大数据挖掘算法之一的CART算法. CART算法全称是Classification ...

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

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

  4. k均值算法 二分k均值算法_使用K均值对加勒比珊瑚礁进行分类

    k均值算法 二分k均值算法 Have you ever seen a Caribbean reef? Well if you haven't, prepare yourself. 您见过加勒比礁吗? ...

  5. kmeans中的k的含义_聚类分析:kmeans 算法簇个数的确定

    kmeans算法是无监督聚类学习中最常见.最常用的算法之一,其基本原理如下: 1.随机初始化k个聚类中心点,并计算数据中每个点到k个点的距离: 2.将每个数据点分到距离聚类中心点最近的聚类中心中: 3 ...

  6. 最小径集的算法_机器学习的利器——集成算法

    最近在打算法竞赛的时候用到了集成算法,效果还不错,索性就总结了一篇集成算法的文章,希望能帮到正在转行的数据分析师们. 集成算法核心思想 集成算法的核心思想是通过构建并结合多个学习器来完成学习任务,也就 ...

  7. ccxt k线数据_机器学习系列:深度探秘K线结构新维度

    标星★公众号,第一时间获取最新研究 来源:光大证券金工团队独家授权 作者:胡骥聪 近期原创文章: ♥ 基于无监督学习的期权定价异常检测(代码+数据) ♥ 5种机器学习算法在预测股价的应用(代码+数据) ...

  8. em算法怎么对应原有分类_机器学习基础-EM算法

    EM算法也称期望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是很多机器学习领域算法的基础,比如隐式马尔科夫算法(HMM), LDA主题模型的变分推断等等.本文就对 ...

  9. matlab中k-means算法_机器学习 | KMeans聚类分析详解

    大量数据中具有"相似"特征的数据点或样本划分为一个类别.聚类分析提供了样本集在非监督模式下的类别划分.聚类的基本思想是"物以类聚.人以群分",将大量数据集中相似 ...

  10. kmeans聚类算法_机器学习/算法校招面试考点汇总(附面试题和答案)【持续更新】_笔经面经...

    以下不作为机器学习/算法工程师的学习路径,只是汇总的校招机器学习/算法工程师面试考点(因为还有笔试考点,后面结合在一起给大家学习路径),后续会为大家更新10w+字数的机器学习/算法工程师校招面试题库, ...

最新文章

  1. Java进程占用内存超高分析
  2. boost::type_erasure模块Associated types相关的测试程序
  3. IOS And WCF 上传文件
  4. Spring boot Mybatis 整合(完整版)
  5. 特斯拉上海超级工厂Model Y日产量达到1000辆 超过Model 3
  6. REDHAT5.6dhcp服务器及dhcp中继代理配置
  7. selenium ie 模拟request pahonjs
  8. Android Paint中setTextSize
  9. 14_python_练习题——excel操作
  10. python 爬取加密视频,爬虫:解决视频遇到m3u8加密
  11. Android音频术语
  12. python怎么写入txt文件_python 如何将数据写入本地txt文本文件的实现方法
  13. java 源文件存储_JAVA源文件的编写与保存
  14. vue 点击某一行的按钮,获取当前行的数据
  15. ICLR 2020|PairNorm: Tackling Oversmoothing in GNNs
  16. Decoda1.17重编译实录
  17. unity UGUI 九宫格 拉伸
  18. 手把手教你如何用Python从PDF文件中导出数据(附链接)
  19. 维基百科简体中文语料训练word2vec词向量
  20. 史上最简单的,最直接的sass的安装教程

热门文章

  1. 爬取评分网站上面的商家信息
  2. QGraphicsScene设置SceneRect
  3. 群脉冲(EFT)异常整改记录
  4. 浅谈国内大型B2B平台有哪些
  5. Java利用while求一等比数列_UPC-6760 Problem H  九连环  【重庆OI2018】等比数列求和JAVA高精度...
  6. web上渐进使用jQuery Mobile中animate相关CSS
  7. ZigBee组网总结
  8. 独特的建模软件-----Fusion360
  9. html say样式,saylove.html
  10. ArcMap和ArcGIS Pro加载星图地球wmts数据服务