• K最近邻


    k算法实现的步骤:
    第一:确定K值(就是指最近邻居的个数)。一般是一个奇数,因为测试样本个数有限,
    第二:确定度量的长度,也就是余弦值,根据公式来算:
     
     
    然后根据这个距离,排序大小,从中选出前k个值出来进行比较,然后根据字典的形式进行根据值进行获取相对应的类别,然后进行类别的统计。
    最后,统计完类别的数量之后,则进行排序,按从小到大进行排序,然后得到第一个值对应的类别,则测试样点就是哪个类别。
     具体代码如下:
    # -*- coding: utf-8 -*-
    import sys
    import os
    import time
    from numpy import *
    import numpy as np
    import matplotlib.pyplot as plt
    import operator
    from test1 import *
    # 夹角余弦距离公式
    def cosdist(vector1,vector2):
        return dot(vector1,vector2)/(linalg.norm(vector1)*linalg.norm(vector2))
    
    # kNN分类器
    # 测试集:testdata
    # 训练集:trainSet
    # 类别标签:listClasses
    # k:k个邻居数
    def classify(testdata, trainSet, listClasses, k):
          # 返回样本集的行数
        #dataSetSize = trainSet.shape[0]
        dataSetSize=len(trainSet)#计算出训练集文本数,上面这两种方法都可以
        # 计算测试集与训练集之间的距离:夹角余弦
        #print(dataSetSize)
        classcount={}
        distances = array(zeros(dataSetSize))
        print(distances)
        for i in range(dataSetSize):
            distances[i]=cosdist(testdata,trainSet[i])
        print(distances)
        sortdistances=argsort(distances)
        print(sortdistances)
        for indx in range(k):
            votelabel=listClasses[sortdistances[indx]]
            classcount[votelabel]=classcount.get(votelabel,0)+1
            print(classcount)
        print(classcount)
        sortedclasscount=sorted(classcount.items(),key=operator.itemgetter(1),reverse=True)
        return sortedclasscount[0][0]
    
        #d = sorted(s.iteritems(), key=lambda t: t[1], reverse=False)
    dataSet,listClasses = loadDataSet()
    nb = NBayes()
    nb.train_set(dataSet,listClasses)
    k = 3
    print(classify(nb.tf[3], nb.tf, listClasses, k))
  • 相关阅读:
    爬取校园新闻首页的新闻
    网络爬虫基础练习
    【mongoDB实战】mongo集群---主从复制篇
    【mongoDB实战】聚合管道--$unwind
    【mongoDB实战】聚合管道--$unwind
    【mongoDB实战】mongoDB数据导入和导出
    【mongoDB实战】mongoDB数据导入和导出
    【mongoDB实战】mongoDB数据备份和还原
    【mongoDB实战】mongoDB数据备份和还原
    【Restful】三分钟彻底了解Restful最佳实践
  • 原文地址:https://www.cnblogs.com/caicaihong/p/5769759.html
Copyright © 2020-2023  润新知