<基础原理进阶>机器学习算法python实现【1】--分类简谈&KNN算法
2017-05-17 10:02
1511 查看
#####################
适合对算法的数学描述有一定理解的童鞋看~~
对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值选择了一系列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可以随意改变,越复杂得到的乐趣越多。
天空鱼
适合对算法的数学描述有一定理解的童鞋看~~
对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 CS231c import numpy as np import operator def 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, labels def 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实现【5】--文本分析之支持向量机SVM(下)
- <基础原理进阶>机器学习算法python实现【4】--文本分析之支持向量机SVM【上】
- <基础原理进阶>机器学习算法python实现【3】--文本分析之朴素贝叶斯分类器
- <基础原理进阶>机器学习算法python实现【2】--ForwardPass&BackPropagation
- KNN分类算法原理与Python+sklearn实现根据身高和体重对体型分类
- <Python><有监督>kNN--近邻分类算法
- KNN算法原理(python代码实现)
- 分类算法系列2----逻辑回归Logistic原理和Python实现
- OC基础:内存(进阶):retain.copy.assign的实现原理 分类: ios学习 OC 2015-06-26 17:36 58人阅读 评论(0) 收藏
- 分类算法-----朴素贝叶斯原理和python实现
- 深度学习基础系列(四)之 用 python 实现 KNN 算法
- 在opencv3中实现机器学习算法之:利用最近邻算法(knn)实现手写数字分类
- 机器学习算法原理总结系列---算法基础之(4)最邻近规则分类(K-Nearest Neighbor)
- KNN分类算法及python代码实现
- 机器学习算法之KNN算法,python实现
- KNN最邻近规则分类算法实践实现【Python实现】
- 【机器学习算法实现】kNN算法__手写识别——基于Python和NumPy函数库
- KNN(k-近邻)分类算法讲解与实现(python)
- 机器学习之KNN算法原理及Python实现方法详解
- K-Nearest Neighbor(KNN) 最邻近分类算法及Python实现方式