<基础原理进阶>机器学习算法python实现【1】--分类简谈&KNN算法
来源:互联网 发布:cad看图软件 mac 免费 编辑:程序博客网 时间:2024/05/21 17:46
#####################
适合对算法的数学描述有一定理解的童鞋看~~
对TensorFlow中直接封装好的算法的具体Python实现等等,补充另一个分类中的知识
参考书籍: 《机器学习实战》等
有些代码我自己也有问题,思考中已经解答的问题和一些坑我会注意说明的。也欢迎大家提出问题,相互交流进步
学习之后记录博客,对自己起到supervised learning的作用 :)
大家一起学习,进步,享受深度学习的乐趣吧!
需要引用的数据集,以及完整代码,放在github上,与这个的标题一一对应的~
https://github.com/Skyorca/csdn-
#####################
上次说过了supervised learning的回归(连续),这次来谈谈分类。最近开始学习computer vision的内容,其核心就是image classification。所以不得不看了看分类问题。最基本的算法就是KNN算法。它的核心思想是本身的属性由所属的“小圈子”决定,即nearest neighbour。这个算法看起来很奇怪,因为它的本身并没有包含任何训练的内容,而是在每次输入一个数据时,才发挥 一次“分类器”的作用,进行一个输出。是一个懒惰算法。以图片为例,假设某个训练集的graph是3*3*3(RGB)的三维矩阵,每一层都有9个pixel,强度为[0,255]之间的一个值;比如说它一共1000张图,已经分为ABCDE五类(labels)。也许我们会用一个normalization的过程,将[0,255]之间的数转换成[-1,1]之间的数,这个是预处理数据的过程。接下来进入算法部分:
1. 对于一个输入图,计算它的3*3矩阵的每一个点与每一张训练集的图矩阵对应位置的点的距离。一般我们采用欧式距离,就是我们平常在坐标系中算的点距离,差值平方之和,得到距离的3*3矩阵(当然,实际可能还要考虑通道厚度那块儿)
2.将这个矩阵上的九个数值加起来得到距离。由于有1000张训练图,所以会有1000个距离。从小到大进行排序,根据k值选择从小开始的k个距离。每个距离对应着label中的某一类。然后进行投票,选择这k个中票数最多的一个类别。注意投票可以优化成加权投票,对于距离越近的给的权重越大。
#K-NN classification for graphs# Stanford CS231cimport numpy as npimport operatordef create_data_set(): group = np.array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]]) labels = ['A', 'A', 'B', 'B'] return group, labelsdef knn(input_data, dataset, labels, k): #note that dataset is the group we generated from the above #doing distance dataset_size = dataset.shape[0] diff_mat = np.tile(input_data, (dataset_size, 1)) - dataset sqDiff_mat = diff_mat**2 sqDistances = sqDiff_mat.sum(axis=1) distances = sqDistances**0.5 sortedDistance = distances.argsort() classCount={} #vote for i in range(k): voteLabel = labels[sortedDistance[i]] classCount[voteLabel] = classCount.get(voteLabel, 0)+1 #sort and select k sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True) return sortedClassCount[0][0]group, labels = create_data_set()print knn([0.5, 0.5], group, labels, 3)
排序的过程,思想大概如下:我通过k值选择了一系列label: ABBCDDECCCBA......那么怎么统计每个label出现次数并对它排序选择出现频率最大的那个呢?这里先组成一个字典,每个key是label,value是出现次数,然后逆序排序,第一个就是需要的label。比如:dict={A:3, B:2, C:8, D:1, E:2},处理之后变成[[C, 8], [A, 3], [B, 2], [E, 2], [D, 1]],相当于5*2矩阵。所以选取[0][0]即为label C.
对于不同的input_data, 会选出不同的label。
[0.5, 0.5] B
[0.8, 0.8] A
[1.2, 1.2] A
......
这里的group, label, input可以随意改变,越复杂得到的乐趣越多。
天空鱼
- <基础原理进阶>机器学习算法python实现【1】--分类简谈&KNN算法
- <基础原理进阶>机器学习算法python实现【3】--文本分析之朴素贝叶斯分类器
- 机器学习基础KNN分类算法
- Python机器学习实战kNN分类算法
- python 机器学习KNN分类算法
- <基础原理进阶>机器学习算法python实现【0】回归简谈&三种梯度下降算法
- 机器学习KNN算法原理及实现
- Python机器学习(二)--kNN算法实现
- 机器学习之PYTHON实现KNN算法
- 【机器学习】使用python实现kNN算法
- 机器学习KNN python算法实现
- 机器学习之KNN算法python实现
- Knn算法(机器学习)入门(Python实现)
- <基础原理进阶>机器学习算法python实现【2】--ForwardPass&BackPropagation
- Python实现kNN分类算法
- kNN分类算法python实现
- KNN分类算法Python实现
- 用Python开始机器学习(4:KNN分类算法)
- 采集存储
- 安卓各种调试问题合辑[不定时更新]
- Android WebView加载网页进度监听
- Error:Execution failed for task ':app:mergeDebugResources'解决办法
- 使用kermit串口工具时出现 /dev/ttyS0 is not a terminal device 错误
- <基础原理进阶>机器学习算法python实现【1】--分类简谈&KNN算法
- AIX安装配置参考
- SAP ABAP Programming Tutorials
- maven生命周期管理
- variables_to_restore函数的用法
- Python:关于cookies
- 父容器display:flex后,子元素的内部元素height:100%无效解决方法
- JSP-2
- WannaCry只是个开始?信息时代你急需的安全书单