初识分类算法(1)------knn近邻算法

例子:某人想要由以下1000行训练样本数据构建一个分类器,将数据分成3类(喜欢,一般,不喜欢)。样本数据的特征有主要有3个,

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

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

C:每周消费冰淇淋公升数

1. 数据的读取

 1 filename=‘D://machine_learn//Ch02//datingTestSet2.txt‘
 2 def file2matrix(filename):
 3     fr = open(filename)
 4     a=fr.readlines()
 5     numberOfLines = len(a)         #get the number of lines in the file
 6     returnMat = zeros((numberOfLines,3))        #prepare matrix to return
 7     classLabelVector = []                       #prepare labels return
 8     index=0
 9     for line in a:
10         line = line.strip()
11         listFromLine = line.split(‘\t‘)
12         returnMat[index,:] = listFromLine[0:3]  #第index行=右边数据
13         classLabelVector.append(int(listFromLine[-1]))
14         index += 1
15     return returnMat,classLabelVector
16 data,labels=file2matrix(filename)

data

2. 数据的归一化处理:由于A的特征值远大于B,C的特征值,因此为了使3个特征转化为真正等权重的特征,需要进行数据标准化操作

1 def autoNorm(dataSet):
2     minVals = dataSet.min(0)                       #矩阵中每一列的最小值
3     maxVals = dataSet.max(0)                       #矩阵中每一列的最大值
4     ranges = maxVals - minVals
5     normDataSet = zeros(shape(dataSet))
6     m = dataSet.shape[0]
7     normDataSet = dataSet - tile(minVals, (m,1))
8     normDataSet = normDataSet/tile(ranges, (m,1))   #element wise divide
9     return normDataSet, ranges, minVals

autoNorm(dataSet)

3.应用kNN算法进行分类

3.1 首先简述knn-算法的思想

3.2 python 实现knn

 1 def classify0(inX, dataSet, labels, k):
 2     dataSetSize = dataSet.shape[0]
 3     diffMat = tile(inX, (dataSetSize,1)) - dataSet
 4     sqDiffMat = diffMat**2
 5     sqDistances = sqDiffMat.sum(axis=1)
 6     distances = sqDistances**0.5
 7     sortedDistIndicies = distances.argsort()
 8     classCount={}
 9     for i in range(k):
10         voteIlabel = labels[sortedDistIndicies[i]]
11         classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
12     sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
13     return sortedClassCount[0][0]

knn-classify0

3.3 在上述数据中应用knn,并且计算出误判率

 1 def datingClassTest():
 2     hoRatio = 0.50      #hold out 10%
 3     datingDataMat,datingLabels = file2matrix(‘datingTestSet2.txt‘)       #load data setfrom file
 4     normMat, ranges, minVals = autoNorm(datingDataMat)
 5     m = normMat.shape[0]
 6     numTestVecs = int(m*hoRatio)
 7     errorCount = 0.0
 8     for i in range(numTestVecs):
 9         classifierResult = classify0(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3)
10         print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, datingLabels[i])
11         if (classifierResult != datingLabels[i]): errorCount += 1.0
12     print "the total error rate is: %f" % (errorCount/float(numTestVecs))
13     print errorCount

datingClassTest

4. 可视化分类结果

 1 import matplotlib
 2 import matplotlib.pyplot as plt
 3 fig=plt.figure()
 4 ax=fig.add_subplot(111)
 5 #ax.scatter(data[:,0],data[:,1])
 6 ax.set_xlabel(‘B‘)
 7 ax.set_ylabel(‘C‘)
 8 ax.scatter(data[:,1],data[:,2],15.0*array(labels),array(labels))
 9 ax.scatter([20,20,20],[1.8,1.6,1.4],15*array(list(set(labels))),list(set(labels)))
10 legends=[‘dislike‘,‘smallDoses‘,‘largeDoses‘]
11 ax.text(22,1.8,‘%s‘ %(legends[0]))
12 ax.text(22,1.6,‘%s‘ %(legends[1]))
13 ax.text(22,1.4,‘%s‘ %(legends[2]))
14 plt.show()

scatter

时间: 2024-11-06 18:12:44

初识分类算法(1)------knn近邻算法的相关文章

机器学习之利用KNN近邻算法预测数据

前半部分是简介, 后半部分是案例 KNN近邻算法: 简单说就是采用测量不同特征值之间的距离方法进行分类(k-Nearest Neighbor,KNN) 优点: 精度高.对异常值不敏感.无数据输入假定 缺点:时间复杂度高.空间复杂度高 1.当样本不平衡时,比如一个类的样本容量很大,其他类的样本容量很小,输入一个样本的时候,K个临近值中大多数都是大样本容量的那个类,这时可能就会导致分类错误.改进方法是对K临近点进行加权,也就是距离近的点的权值大,距离远的点权值小. 2.计算量较大,每个待分类的样本都

机器学习-KNN近邻算法

参看文章: <机器学习-周志华> <机器学习实战-Peter Harrington> <统计学习方法-李航> 算法介绍: k近邻学习是一种常用的监督学习方法,其工作机制如下,给定测试样本,基于某种距离度量(曼哈顿距离.欧氏距离.切比雪夫距离.Lp距离.Minkowski距离)找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测. argmax(f(x))是使得 f(x)取得最大值所对应的变量点x 投票法: 在分类任务中使用,选择k个样本出现最多的

machine_learning-knn算法具体解释(近邻算法)

近邻算法是机器学习算法中的入门算法,该算法用于针对已有数据集对未知数据进行分类. 该算法核心思想是通过计算预測数据与已有数据的相似度猜測结果. 举例: 如果有例如以下一组数据(在下面我们统一把该数据作为训练数据): 身高 年龄 国籍 170 23 中国 180 21 美国 185 22 俄国 175 24 中国 120 23 日本 我们将该组数据的前两列作为一个特征值.最后一项作为一个待分类结果.当数据量足够大时,能够通过该数据便可得出较为精确的分类. 比如我们拿到測试数据.年龄23岁,身高17

[Machine :Learning] kNN近邻算法

from numpy import * import operator def createDataSet() : group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 1.1]]) labels = ['A', 'A', 'B', 'B'] return group, labels ''' tile(array, (intR, intC): 对矩阵进行组合,纵向复制intR次, 横向复制intC次 比如 : tile([1,2,3], (3, 2

K近邻(k-Nearest Neighbor,KNN)算法,一种基于实例的学习方法

1. 基于实例的学习算法 0x1:数据挖掘的一些相关知识脉络 本文是一篇介绍K近邻数据挖掘算法的文章,而所谓数据挖掘,就是讨论如何在数据中寻找模式的一门学科. 其实人类的科学技术发展的历史,就一直伴随着数据挖掘,人们一直在试图中数据中寻找模式, 猎人在动物迁徙的行为中寻找模式 农夫在庄稼的生长中寻找模式 政客在选民的意见上寻找模式 恋人在对方的反应中寻找模式 企业家的工作是要辨别出机会,寻找出那些可以转变为有利可图的生意的行为中的一些模式,也即所谓的成功的模式,并且利用这些机会 科学家的工作是理

从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 从K近邻算法.距离度量谈到KD树.SIFT+BBF算法 前言 前两日,在微博上说:“到今天为止,我至少亏欠了3篇文章待写:1.KD树:2.神经网络:3.编程艺术第28章.你看到,blog内的文章与你于别处所见的任何都不同.于是,等啊等,等一台电脑,只好等待..”.得益于田,借了我一台电脑(借他电脑的时候,我连表示感谢,他说“能找到工作全靠你的博客,这点儿小忙还说,不地道”,有的时候,稍许感受到受人信任也是一种压力,愿我不辜负大家对我的信任)

K近邻算法

1.1.什么是K近邻算法 何谓K近邻算法,即K-Nearest Neighbor algorithm,简称KNN算法,单从名字来猜想,可以简单粗暴的认为是:K个最近的邻居,当K=1时,算法便成了最近邻算法,即寻找最近的那个邻居.为何要找邻居?打个比方来说,假设你来到一个陌生的村庄,现在你要找到与你有着相似特征的人群融入他们,所谓入伙. 用官方的话来说,所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居),这K个实例的多数属

k近邻算法理论(一)

时间 :2014.07.05 地点:基地 ----------------------------------------------------------------------------------- 一.简述 K近邻法(k-nearest neighbor,kNN)是一种基本分类与回归方法.k近邻的输入为实例的特征向量,对应特征空间中的点,输出为实例的类别.k近邻算法的基本思想是:给定训练数据集,实例类别已定,在对目标实例进行分类时,我们根据与目标实例k个最近邻居的训练实例的类别,通过

机器学习随笔01 - k近邻算法

算法名称: k近邻算法 (kNN: k-Nearest Neighbor) 问题提出: 根据已有对象的归类数据,给新对象(事物)归类. 核心思想: 将对象分解为特征,因为对象的特征决定了事对象的分类. 度量每个特征的程度,将其数字化. 所有特征值构成元组,作为该对象的坐标. 计算待检测对象和所有已知对象的距离,选择距离最接近的k个已知对象 (k近邻中的k来源于此). 这k个对象中出现次数最多的分类就是待检测对象的分类. 重要前提: 需要有一批已经正确归类了的对象存在.也就是通常说的训练数据. 重