KNN算法的感受 1

本来预计的打算是一天一个十大挖掘算法,然而由于同时要兼顾数据结构面试的事情,所以 很难办到,但至少在回家前要把数据挖掘十大算法看完,过个好年,在course上学习老吴的课程还是帮了我很大的忙,虽然浪费了时间,但是也无形中帮助我 很多,所以说还是很值得的,今天就总结KNN算法的一部分,这部分老吴的课程中没有太多涉及到,所以我又重新关注了一下,下面是我的总结,希望能对大家有 所帮组。

介绍环镜:python2.7  IDLE  Pycharm5.0.3

操作系统:windows

第一步:因为没有numpy,所以要安装numpy,详情见另一篇安装numpy的博客,这里不再多说.

第二步:贴代码:

 1     from numpy import *
 2     import operator
 3     from os import listdir
 5   def classify0(inX, dataSet, labels, k):
 6         dataSetSize = dataSet.shape[0]
 7         diffMat = tile(inX, (dataSetSize,1)) - dataSet
 8         sqDiffMat = diffMat**2
 9         sqDistances = sqDiffMat.sum(axis=1)
10         distances = sqDistances**0.5
11         sortedDistIndicies = distances.argsort()
12         classCount={}
13         for i in range(k):
14             voteIlabel = labels[sortedDistIndicies[i]]
15             classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
16         sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
17         return sortedClassCount[0][0]
18
19   def createDataSet():
20         group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
21         labels = [‘A‘,‘A‘,‘B‘,‘B‘]
22         return group, labels
23
24    def file2matrix(filename):
25         fr = open(filename)
26         numberOfLines = len(fr.readlines())         #get the number of lines in the file
27         returnMat = zeros((numberOfLines,3))        #prepare matrix to return
28         classLabelVector = []                       #prepare labels return
29         fr = open(filename)
30         index = 0
31         for line in fr.readlines():
32             line = line.strip()
33             listFromLine = line.split(‘\t‘)
34             returnMat[index,:] = listFromLine[0:3]
35             classLabelVector.append(int(listFromLine[-1]))
36             index += 1
37         return returnMat,classLabelVector
38
39     def autoNorm(dataSet):
40         minVals = dataSet.min(0)
41         maxVals = dataSet.max(0)
42         ranges = maxVals - minVals
43         normDataSet = zeros(shape(dataSet))
44         m = dataSet.shape[0]
45         normDataSet = dataSet - tile(minVals, (m,1))
46         normDataSet = normDataSet/tile(ranges, (m,1))   #element wise divide
47         return normDataSet, ranges, minVals
48
49     def datingClassTest():
50         hoRatio = 0.50      #hold out 10%
51         datingDataMat,datingLabels = file2matrix(‘datingTestSet2.txt‘)       #load data setfrom file
52         normMat, ranges, minVals = autoNorm(datingDataMat)
53         m = normMat.shape[0]
54         numTestVecs = int(m*hoRatio)
55         errorCount = 0.0
56         for i in range(numTestVecs):
57             classifierResult = classify0(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3)
58             print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, datingLabels[i])
59             if (classifierResult != datingLabels[i]): errorCount += 1.0
60         print "the total error rate is: %f" % (errorCount/float(numTestVecs))
61         print errorCount
62
63     def img2vector(filename):
64         returnVect = zeros((1,1024))
65         fr = open(filename)
66         for i in range(32):
67             lineStr = fr.readline()
68             for j in range(32):
69                 returnVect[0,32*i+j] = int(lineStr[j])
70         return returnVect
71
72     def handwritingClassTest():
73         hwLabels = []
74         trainingFileList = listdir(‘trainingDigits‘)           #load the training set
75         m = len(trainingFileList)
76         trainingMat = zeros((m,1024))
77         for i in range(m):
78             fileNameStr = trainingFileList[i]
79             fileStr = fileNameStr.split(‘.‘)[0]     #take off .txt
80             classNumStr = int(fileStr.split(‘_‘)[0])
81             hwLabels.append(classNumStr)
82             trainingMat[i,:] = img2vector(‘trainingDigits/%s‘ % fileNameStr)
83         testFileList = listdir(‘testDigits‘)        #iterate through the test set
84         errorCount = 0.0
85         mTest = len(testFileList)
86         for i in range(mTest):
87             fileNameStr = testFileList[i]
88             fileStr = fileNameStr.split(‘.‘)[0]     #take off .txt
89             classNumStr = int(fileStr.split(‘_‘)[0])
90             vectorUnderTest = img2vector(‘testDigits/%s‘ % fileNameStr)
91             classifierResult = classify0(vectorUnderTest, trainingMat, hwLabels, 3)
92             print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, classNumStr)
93             if (classifierResult != classNumStr): errorCount += 1.0
94         print "\nthe total number of errors is: %d" % errorCount
95         print "\nthe total error rate is: %f" % (errorCount/float(mTest))  

  第三步:通过命令行交互

(1):先将上述代码保存为kNN.py

(2):再在IDLE下的run菜单下run一下,将其生成python模块

(3): import  kNN(因为上一步已经生成knn模块)
      (4): kNN.classify0([0,0],group,labels,3) (讨论[0,0]点属于哪一个类)

注:其中【0,0】可以随意换

即【】内的坐标就是我们要判断的点的坐标:

>>> kNN.classify0([0,0],group,labels,3)
‘B‘
>>> kNN.classify0([0,1],group,labels,3)
‘B‘
>>> kNN.classify0([0.6,0.6],group,labels,3)
‘A‘

时间: 2024-08-08 09:39:18

KNN算法的感受 1的相关文章

KNN算法的感受 2

(1):先将上述代码保存为kNN.py (2):再在IDLE下的run菜单下run一下,将其生成python模块 (3):import  kNN(因为上一步已经生成knn模块) (4):kNN.classify0([0,0],group,labels,3) (讨论[0,0]点属于哪一个类) 注:其中[0,0]可以随意换 即[]内的坐标就是我们要判断的点的坐标: >>> kNN.classify0([0,0],group,labels,3) 'B' >>> kNN.cla

Machine Learning In Action 第二章学习笔记: kNN算法

本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数字识别 通过“约会对象”功能,基本能够了解到kNN算法的工作原理.“手写数字识别”与“约会对象预测”使用完全一样的算法代码,仅仅是数据集有变化. 约会对象预测 1 约会对象预测功能需求 主人公“张三”喜欢结交新朋友.“系统A”上面注册了很多类似于“张三”的用户,大家都想结交心朋友.“张三”最开始通过自己筛选的

KNN算法--物以类聚,人以群分

KNN(K Nearest Neighbors,K近邻 )算法是机器学习所有算法中理论最简单,最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>=1)个距离最近的邻居进行分类判断(投票法)或者回归.如果K=1,那么新数据被简单分配给其近邻的类.KNN算法算是监督学习还是无监督学习呢?首先来看一下监督学习和无监督学习的定义.对于监督学习,数据都有明确的label(分类针对离散分布,回归针对连续分布),根据机器学习产生的模型可以将新数据分到一个明确的类

Python KNN算法

机器学习新手,接触的是<机器学习实战>这本书,感觉书中描述简单易懂,但对于python语言不熟悉的我,也有很大的空间.今天学习的是k-近邻算法. 1. 简述机器学习 在日常生活中,人们很难直接从原始数据本身获得所需信息.而机器学习就是把生活中无序的数据转换成有用的信息.例如,对于垃圾邮件的检测,侦测一个单词是否存在并没有多大的作用,然而当某几个特定单词同时出现时,再辅以考虑邮件的长度及其他因素,人们就可以更准确地判定该邮件是否为垃圾邮件. 机器学习分为监督学习和无监督学习,其中: (1)监督学

Opencv学习之路—Opencv下基于HOG特征的KNN算法分类训练

在计算机视觉研究当中,HOG算法和LBP算法算是基础算法,但是却十分重要.后期很多图像特征提取的算法都是基于HOG和LBP,所以了解和掌握HOG,是学习计算机视觉的前提和基础. HOG算法的原理很多资料都可以查到,简单来说,就是将图像分成一个cell,通过对每个cell的像素进行梯度处理,进而根据梯度方向和梯度幅度来得到cell的图像特征.随后,将每个cell的图像特征连接起来,得到一个BLock的特征,进而得到一张图片的特征.Opencv当中自带HOG算法,可以直接调用,进行图像的特征提取.但

k-Means和KNN算法简述

k-means 算法 k-means 算法接受输入量 k :然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高:而不同聚类中的对象相似度较小.聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的. k-means 算法的工作过程说明如下:首先从n个数据对象任意选择 k 个对象作为初始聚类中心:而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类:然后再计算每个所获新聚类

MLlearning(1)——kNN算法

这篇文章讲kNN(k近邻,k-Nearest Neighbour).这是一种lazy-learning,实现方便,很常用的分类方法.约定n为样本集中的样本数,m为样本的维度,则这个算法的训练复杂度为0,未加优化(线性扫描)的分类时间复杂度为,kd-Tree优化后复杂度可降为. 思路.优点及缺陷 该方法的思路是:如果一个样本在特征空间中的 k 个最相似即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别.kNN 算法中,所选择的邻居都是已经正确分类的对象.该方法在分类决策上只

KNN算法与Kd树

最近邻法和k-近邻法 下面图片中只有三种豆,有三个豆是未知的种类,如何判定他们的种类? 提供一种思路,即:未知的豆离哪种豆最近就认为未知豆和该豆是同一种类.由此,我们引出最近邻算法的定义:为了判定未知样本的类别,以全部训练样本作为代表点,计算未知样本与所有训练样本的距离,并以最近邻者的类别作为决策未知样本类别的唯一依据.但是,最近邻算法明显是存在缺陷的,比如下面的例子:有一个未知形状(图中绿色的圆点),如何判断它是什么形状? 显然,最近邻算法的缺陷--对噪声数据过于敏感,为了解决这个问题,我们可

KNN算法的理解

一.算法 1.kNN算法又称为k近邻分类(k-nearest neighbor classification)算法. 最简单平庸的分类器或许是那种死记硬背式的分类器,记住全部的训练数据.对于新的数据则直接和训练数据匹配,假设存在同样属性的训练数据,则直接用它的分类来作为新数据的分类.这样的方式有一个明显的缺点,那就是非常可能无法找到全然匹配的训练记录. kNN算法则是从训练集中找到和新数据最接近的k条记录.然后依据他们的主要分类来决定新数据的类别.该算法涉及3个主要因素:训练集.距离或相似的衡量