K-邻近算法(kNN)python3.X

原创 2016年08月28日 16:17:44

k-邻近算法(kNN)学习笔记

  • 机器学习主要任务
    在机器学习(Machine Learning)的主要任务就是实现数据的分类,通过给算法输入大量已分类的数据作为算法训练集,使机器能够找到特征与目标变量之间的关系,对未知特征的数据做出正确的判断,这就是分类。机器学习的另外一个重要的任务就是回归,用来预测数值型数据。

  • kNN(K-邻近算法)概念
    k-邻近算法是给算法一个训练样本集,每个样本集都给出了明确的特征和明确的标签。然后输入需要分类的数据,利用算法计算出该数据和样本集各个点之间的距离,取前k个距离最近的点,这就是k-邻近算法的k的含义。最后选择k个最相似数据中出现最多的类型作为新数据的数据类型,这样就是实现了数据分类。

  • k-邻近算法
    在输入训练样本集后,输入需要分类的数据,计算得到该数据与样本集各个点的距离集合,然后对这些数据进行排序。然后选取前k个距离数据(也就是和训练样本集最相似的K个点),得到其中类型出现最多的类型,得到该新数据的分类。代码如下:

    1. 数据输入
      该程序利用 readlines() 读取文本文件,里面包含了训练样本集的特征(程序有3个特征值)和目标类型,然后分别存储在两个列表中。
def file2matrix(filename):
    fr=open(filename)
    arrayOLines=fr.readlines() #读取文件
    numberOfLines=len(arrayOLines)
    retuanMat=zeros((numberOfLines,3))#存储特征数据
    classLabelVector=[]
    index =0
    for line in arrayOLines:
        line =line.strip()
        listFromLine=line.split('\t')
        retuanMat[index,:]=listFromLine[0:3]
        classLabelVector.append(listFromLine[3])#存储类型数据
        index+=1
    return retuanMat,classLabelVector

2.k-邻近主程序
先计算预测点和训练数据点的全部距离,然后进行排序,选取最相近的前k个点。

def classify0 (inX, dataSet, labels, k):
    dataSetSize=dataSet.shape[0]
    diffMat=tile(inX, (dataSetSize,1))-dataSet
    sqDiffMat=diffMat**2
    sqDistance=sqDiffMat.sum(axis=1)
    distances=sqDistance**0.5
    sortedDistIndicies=distances.argsort()
    #以上算法为计算距离算法和排序算法
    classCount={}
    for i in range(k):
        voteIlabel=labels[sortedDistIndicies[i]]
 #选择距离最短的k个点classCount[voteIlabel]=classCount.get(voteIlabel,0)+1
sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]

3.读取文件的yield用法
在函数中含有yield的函数叫做生成器。如下例子:

def count(n):
    print("_1")
    while n>0:
        print("_2")
        yield n
        n-=1
        print("_3")

>>>count(5)#yield生成函数序列,返回一个“generator”类型
<generator object count at 0x04D5FF58>
>>>c=count(5)
>>>c.__next__()#生成器函数只有在调用__next()__方法的时候才开始执行函数里面的语句
_1
_2
5
>>>c.__next__()
_3
_2
4

上面例子在python3.4中全部编译通过,yield生成函数在next()方法下开始执行,遇到yield时停止运行,下次调用next()方法时从yield开始继续执行。

  • 调用readlines()读取数据是一次读取整个文件,如果内存太小那么电脑就会卡顿的很厉害,所以就需要考虑利用上面的yield生成器来读取数据。可以用以下代码实现:
def open_txt(filename)
    with open(filename,'r+') as f:
    line=f.readline()
    while line:
            yield line.strip()
            line=f.readline()

相关文章推荐

K-邻近算法(KNN)

分类解决离散问题,回归解决连续问题 导引: 如何进行电影分类 众所周知,电影可以按照题材分类,然而题材本身是如何定义的?由谁来判定某部电影属于哪 个题材?也就是说同一题材的电影具有哪些公...

KNN(K 邻近算法) 相关知识

KNN(K 邻近算法)主要根据特征之间的距离来进行分类的。

KNN-K邻近算法

KNN-K邻近算法学习笔记(一)kNN算法又称为k最近邻分类算法,是一种监督学习类方法,并且kNN算法不需要预先训练,也就是说kNN算法只有测试过程,没有训练过程。所谓的k最近邻,就是指最接近的k个邻...
  • weq27
  • weq27
  • 2017年04月07日 23:26
  • 230

k邻近算法(kNN)

类别:监督学习---分类 原理:对未知类别属性的数据集中的每个点依次执行以下操作 def classify0(inX, dataSet, labels, k): #1)计算已知类别数据集中的点...

机器学习实战之——KNN k-邻近算法

主要内容 l  K-邻近分类算法——>使用距离测量的方法对物品分类 l  从文本文件中解析和导入数据 l  使用Matplotlib创建扩散图 l  归一化数值   1.    算法概述 这个算法非常...

KNN邻近算法实现

  • 2015年02月27日 16:29
  • 1.1MB
  • 下载

深度学习*学习笔记---之最邻近算法KNN(2)

1、Cover和Hart在1968年提出了最初的邻近算法 2、KNN 算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本...

kNN(邻近算法)算法

  • 2015年05月18日 21:01
  • 2KB
  • 下载

邻近算法KNN

是什么? (kNN,k-NearestNeighbor)是一个无监督的机器学习分类算法所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。kNN算法的核心思想是如...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:K-邻近算法(kNN)python3.X
举报原因:
原因补充:

(最多只允许输入30个字)