精华内容
下载资源
问答
  • 最邻近算法

    千次阅读 2018-06-14 14:42:07
    1, 最邻近算法
    展开全文
  • 最邻近算法KNN识别字符最邻近算法KNN识别字符最邻近算法KNN识别字符最邻近算法KNN识别字符
  • 最邻近算法 / K邻近算法 / KNN。 找到离「当前点」最近的「K个数据点」,然后根据「少数服从多数」原则,对「当前点」进行分类。 如果K取值太小,可能导致过度拟合。即,如果邻近样本是「噪声」,则会对训练结果...

    最邻近算法 / K邻近算法 / KNN

    • 找到离「当前点」最近的「K个数据点」,然后根据「少数服从多数」原则,对「当前点」进行分类。

      • 如果K取值太小,可能导致过度拟合。即,如果邻近样本是「噪声」,则会对训练结果造成影响——训练结果在训练集中表现变好,但在测试集中表现变差——近似误差减少,估计误差增大

      • 如果K值取值太大,将导致欠拟合。即,远处「不相似的数据」对训练结果产生影响——近似误差增大,估计误差减小

        ——关于近似误差和估计误差

    • 因为要计算所有点的距离,如果采用「欧氏距离」,则时间复杂度为O(N2)O(N^2)

      • 根据排列组合公式,从N个点中挑出2个进行组合:PN2=N!(N2)!=N×(N1)=N2NP_N^2=\frac{N!}{(N-2)!}=N\times(N-1)=N^2-N共要计N2NN^2-N次,所以时间复杂度为O(N2)O(N^2)

        ——关于计算距离


    K Dimensional Tree / KD Tree / KD树

    Reference
    k-d tree算法原理及实现
    从K近邻算法、距离度量谈到KD树、SIFT+BBF算法

    构建KD树

    1. xx轴作为分隔超平面的法向量,数据集的中位点作为根节点。于是根据根节点xx轴的值,能将集合左右两个子集,即左子树和右子树。
    2. yy轴作为分隔超平面的法向量,找到每个子集的中位点,则该中位点,分别作为根节点的左子树节点和右子树节点。这次根据左右子树节点的yy轴将剩余集合进行划分
      1. 中位点,相当于中位数的概念,但是在KD树中,所有节点必须是存在的数据点,因此这里用中位点表示
    3. 重复以上步骤:循环的选取坐标轴,作为分割超平面的法向量。找到集合中的中位点,将集合拆分,直到无法继续拆分为止。

    详细说明:

    1. 对于一个由n维数据构成的数据集,我们首先寻找方差最大的那个维度,设这个维度是dd,然后找出在维度dd上所有数据项的中位数mm,按mm划分数据集,一分为二,记这两个数据子集为DlD_l,DrD_r。建立树节点,存储这次划分的情况(记录划分的维度dd以及中位数mm);
    2. DlD_l,DrD_r重复进行以上的划分,并且将新生成的树节点设置为上一次划分的左右孩子;
    3. 递归地进行以上两步,直到不能再划分为止(所谓不能划分是说当前节点中包含的数据项的数量小于了我们事先规定的阈值,不失一般性,我在此篇博客中默认这个阈值是2,也就是说所有叶子节点包含的数据项不会多于2条),不能再划分时,将对应的数据保存至最后的节点中,这些最后的节点也就是叶子节点。
      ——Kd-tree原理与实现

    搜索KD树

    现有查询点QQ,目的是在KD树中找到点QQ的最近邻点

    1. 向下搜索:首先从根节点开始查找,根据当前节点对应的维度,判断点QQ属于根节点的左叶子还是右叶子,并将其加入查询路径。依次往下查找,直到搜索到最后一个节点,此时得到查询路径<根节点AA,中位点BB,中位点CC,最后叶子节点DD>,此时查询点QQ与末尾节点DD处于同一个区域。

      1. 虽然是同一个区域,但不一定是距离最短的,最邻近肯定距离查询点更近,应该位于以查询点QQ为圆心且通过叶子节点的圆域内
    2. 向上回溯:为了确定查询点QQ的最邻近点,需要按照查询路径<根节点AA,中位点BB,中位点CC,最后叶子节点DD>,计算查询点QQ与各点的距离,直到回溯到根节点

      1. 如果点QQ距离叶子节点D的距离比较近,离上一个中位点比较远,则可以继续按照查询路径向上回溯,计算下一个中位点
      2. 如果点QQ距离路径上的中位点CC比较近,则需要计算QCQC的距离和QQ到中位点CC所在超平面的距离SS,如果QC>SQC>S,则说明在中位点C的另一侧还可能存在更近的点,因此需要重复【步骤1】,前往另一侧进行向下查询(即以两点的距离为半径画圆,看是否与超平面相交)
    3. 回溯到根节点后结束搜索,将记录的最邻近点取出

      • 目前有如下图所示的KD树(2维KD树)
        图片出处:https://blog.csdn.net/v_JULY_v/article/details/8203674
    • 同样先进行二叉查找,先从(7,2)查找到(5,4)节点,在进行查找时是由y = 4为分割超平面的,由于查找点为y值为4.5,因此进入右子空间查找到(4,7),形成搜索路径<(7,2),(5,4),(4,7)>,但(4,7)与目标查找点的距离为3.202,而(5,4)与查找点之间的距离为3.041,所以(5,4)为查询点的最近点;
    • 以(2,4.5)为圆心,以3.041为半径作圆,如下图所示。可见该圆和y = 4超平面交割,所以需要进入(5,4)左子空间进行查找,也就是将(2,3)节点加入搜索路径中得<(7,2),(2,3)>;于是接着搜索至(2,3)叶子节点,(2,3)距离(2,4.5)比(5,4)要近,所以最近邻点更新为(2,3),最近距离更新为1.5;
    • 回溯查找至(5,4),直到最后回溯到根结点(7,2)的时候,以(2,4.5)为圆心1.5为半径作圆,并不和x = 7分割超平面交割,如下图所示。至此,搜索路径回溯完,返回最近邻点(2,3),最近距离1.5。
    展开全文
  • sklearn k最邻近算法

    2018-11-09 17:24:55
    k最邻近算法可以说是一个非常经典而且原理十分容易理解的算法,可以应用于分类和聚合。 优点 :  1、简单,易于理解,易于实现,无需估计参数,无需训练;  2、适合对稀有事件进行分类;  3、特别适合于多...

    1、介绍

    k最邻近算法可以说是一个非常经典而且原理十分容易理解的算法,可以应用于分类和聚合。

    优点

             1、简单,易于理解,易于实现,无需估计参数,无需训练;

             2、适合对稀有事件进行分类;

             3、特别适合于多分类问题(multi-modal,对象具有多个类别标签), kNN比SVM的表现要好;

    缺点

             1、对规模超大的数据集拟合时间较长,对高维数据拟合欠佳,对稀疏数据集束手无策

             2、当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该类样本并不接近目标样本

    2、代码实际应用

    • 分类
    from sklearn.datasets import make_blobs
    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.model_selection import train_test_split
    import matplotlib.pyplot as plt
    from matplotlib.colors import ListedColormap
    import numpy as np
    
    X, y = make_blobs(n_samples=500, centers=5, random_state=8)
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y)
    markers = ('s', 'x', 'o', '^', 'v')
    colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
    cmap = ListedColormap(colors[:len(np.unique(y_train))])
    
    clf = KNeighborsClassifier()
    clf.fit(X_train, y_train)
    
    X_min, X_max = X_train[:, 0].min() - 1, X_train[:, 0].max() + 1
    y_min, y_max = X_train[:, 1].min() - 1, X_train[:, 1].max() + 1
    
    xx, yy = np.meshgrid(np.arange(X_min, X_max, .02), np.arange(y_min, y_max, .02))
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)
    
    plt.pcolormesh(xx, yy, Z, cmap=plt.cm.spring)
    
    plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cmap)
    # for idx, cl in enumerate(np.unique(y_train)):
    #     plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cmap)
        # plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cmap, edgecolors='y', marker=markers[idx], alpha=0.8, linewidths=1)
    
    print("模型的正确率:{:.2f}".format(clf.score(X_test, y_test)) )
    plt.xlim(xx.min(), xx.max())
    plt.ylim(yy.min(), yy.max())
    plt.title("Classifier:KNN")
    plt.show()
    • 回归
    from sklearn.datasets import make_regression
    from sklearn.neighbors import KNeighborsRegressor
    
    import matplotlib.pyplot as plt
    import numpy as np
    
    # 生成随机回归数据
    X, y = make_regression(n_features=1, n_informative=1, noise=50, random_state=8)
    
    reg = KNeighborsRegressor(n_neighbors=2)
    reg.fit(X, y)
    # 随机产生x的预测值,根据训练模型来预测y的值
    z = np.linspace(-3, 3, 200).reshape(-1, 1)
    plt.scatter(X, y, c='orange', edgecolors='k')
    
    plt.plot(z, reg.predict(z), c='k', linewidth=3)
    print("模型评分:{:.2f}".format(reg.score(X, y)))
    plt.title('KNN Regressor')
    plt.show()
    • 分类实际应用:将酒分类
    from sklearn.datasets import load_wine
    from sklearn.model_selection import train_test_split
    from sklearn.neighbors import KNeighborsClassifier
    import numpy as np
    
    wine_dataset = load_wine()
    
    print(wine_dataset['data'].shape)
    X_train, X_test, y_train, y_test = train_test_split(wine_dataset['data'], wine_dataset['target'], random_state=0)
    
    print(X_train.shape)
    print(X_test.shape)
    print(y_train.shape)
    print(y_test.shape)
    
    clf = KNeighborsClassifier(n_neighbors=7)
    clf.fit(X_train, y_train)
    
    print("测试数据集得分: {:.2f}".format(clf.score(X_test, y_test)))
    
    X_new = np.array([[13.2, 2.77, 2.51, 18.5, 96.6, 1.04, 2.55, 0.57, 1.47, 6.2, 1.05, 3.33, 820]])
    
    prediction = clf.predict(X_new)
    print("预测新红酒的分类为:{}".format(wine_dataset['target_names'][prediction]))

     

    展开全文
  • K-最邻近算法(KNN算法)

    2019-11-30 19:27:07
    K-最邻近算法是一种分类算法,假设有一个训练集DDD,DDD包含n个训练样例,现有一个测试样例sss,计算sss与训练集DDD中每个样例的相似度,找出k个与sss最相似的样本,这k个样本中哪个类别占比最多则作为测试样例sss的...

    概述

    K-最邻近算法是一种分类算法,假设有一个训练集DDDD包含n个训练样例,现有一个测试样例ss,计算ss与训练集DD中每个样例的相似度,找出k个与ss最相似的样本,这k个样本中哪个类别占比最多则作为测试样例ss的类别。一般用欧几里得距离衡量相似度,其定义为:
    dist(s,di)=l=1m(alail)2dist(s,d_i)=\sqrt{\sum_{l=1}^{m}(a_{l}-a_{il})^2}
    其中did_i指样本集DD中第ii个样本,ala_l指样例ssll个属性值,aila_{il}指样例did_i中第ll个属性值。

    例子

    以下表人员信息作为样本数据,只用身高属性作为距离计算属性,采用K-最邻近算法对<Pat,女,1.6>进行分类
    在这里插入图片描述

    • 计算测试样本身高属性到每个训练样本身高属性的欧几里得距离:
    • 按距离递增排序
    • 取前5个样本构成样本集合,依据类别比例确定测试样本类别
      下表计算了测试样例,与每个样例的距离
      在这里插入图片描述
      按距离递增排序,取前5个样例组成一个集合
      在这里插入图片描述
      其中4个样例属于”矮“,1个样例属于"中等",所以最终认为测试样例<Pat,女,1.6>为矮个。

    鸢尾植物例子

    # -*- coding: utf-8 -*-
    # 如果你的程序(包括注释)中包含中文,请加上上面这一行,用于指明编码(utf-8)。
    # #号开头的行都是注释。
    
    # 如何编辑本程序:
    #     用任何文本编辑器均可编辑。
    
    # 如何运行本程序:
    #     在终端中,运行:python p405_exercises.py
    
    # 本程序实现一个简单的分类算法(kNN,k-最近邻算法)。
    #
    # 你有两个数据集(训练集和检验集):
    #   训练集:data/iris.training.arff
    #   检验集:data/iris.test.arff
    # 这两个文件的格式是一样的。每一行数据代表一个数据对象,包括
    # 四个属性(分别是花萼和花瓣的长度和宽度,均为实数)和
    # 一个类别(鸢尾花的子类别,字符串)。
    # 文件中以%或@开头的行或空行均应忽略。
    #
    # kNN算法如下:
    # (1)对于测试集中的每个数据对象,计算它与训练集中每个对象之间的差异,
    # 即它的四个属性与训练集中每个对象的四个属性之间的欧几里得距离:
         # dist(x, y) = math.sqrt((x1-y1)**2 + (x2-y2)**2 + (x3-y3)**2 + (x4-y4)**2)
    # 其中x1,...,x4 和 y1,...,y4 分别是两个对象的四个属性值。
    # (2)将这些距离按从低到高排序,选择k个距离最短(即最近邻)的训练数据,
    # 将这k个训练数据的主要类别作为测试数据的类别(分类结果)。
    # (3)将分类结果与真实类别进行比较。统计正确分类的数目和比例。
    #
    # TODO: 选择 k=1,3,5,7,9,记录正确分类的百分比(保留小数点后两位):
    #   k       准确率
    #   1       ?
    #   3       ?
    #   5       ?
    #   7       ?
    #   9import math
    
    
    def dist(obj1, obj2):
        '''计算并返回两个数据对象之间的距离。
        '''
        # 计算并返回一个实数。
        x1 = float(list(obj1.values())[0][0])
        x2 = float(list(obj1.values())[0][1])
        x3 = float(list(obj1.values())[0][2])
        x4 = float(list(obj1.values())[0][3])
        y1 = float(list(obj2.values())[0][0])
        y2 = float(list(obj2.values())[0][1])
        y3 = float(list(obj2.values())[0][2])
        y4 = float(list(obj2.values())[0][3])
        return  math.sqrt((x1-y1)**2 + (x2-y2)**2 + (x3-y3)**2 + (x4-y4)**2)
    
    def read_data(filename):
        '''从training_filename文件中读取训练数据,
        保存在一个列表中,读取结束后返回该列表。
        '''
        data_list = []
        # 类别:
        with open(filename) as f :
            for line in f:
                line.strip()
                line = line.split("\n")
                # 从文件中读取训练数据并填入training_list。
                if line[0].endswith('Iris-setosa') or line[0].endswith('Iris-versicolor') or line[0].endswith('Iris-virginica'):
                    line = line[0].split(',')
                    data = {line[4]:[line[0],line[1],line[2],line[3]]} 
                    data_list.append(data)
        return data_list
    
    def sort_by_distance(list_data):
        for i in range(len(list_data)):
            for j in range(i+1,len(list_data)):
                if list_data[i][1] > list_data[j][1]:
                    temp = list_data[i]
                    list_data[i] = list_data[j]
                    list_data[j] = temp
        return list_data
    
    def classify(training_list, test_obj, k):
        '''kNN算法。
        training_list: 训练数据集。
        test_obj: 一个测试数据对象。
        k:kNN参数。
        返回:测试对象的类别。
        '''
        result = list()
        for eachTestData in test_obj:
            data_list = list()
            for eachTrainingData in training_list:
                distance = dist(eachTestData,eachTrainingData)
                d = list(eachTrainingData.keys())[0],distance
                # print(d)
                data_list.append(d)
            # print(data_list)
            #对列表按照距离排序
            data_list =  sort_by_distance(data_list)
            # print(data_list)
            c1 = 0 
            c2 = 0
            c3 = 0
            for i in range(k):
                if data_list[i][0] == 'Iris-setosa':
                    c1+=1
                elif data_list[i][0] == 'Iris-versicolor':
                    c2+=1
                elif data_list[i][0] == 'Iris-virginica':
                    c3+=1
            if max(c1,c2,c3) == c1:
                result.append('Iris-setosa')
            elif max(c1,c2,c3) == c2:
                result.append('Iris-versicolor')
            elif max(c1,c2,c3) == c3:
                result.append('Iris-virginica')
        return result
    
    if __name__ == '__main__':
        K = ''
        result_list = list()
        title = "{0}       {1}".format('K','准确率')
        result_list.append(title+'\n')
        filePath1 = input("请输入训练集绝对路径:\n")
        filePath2 = input("请输入测试集绝对路径:\n")
        while(True):
            try:
                training_list = read_data(filePath1)#'D:/python_course/data/iris.training.arff'
                test_list = read_data(filePath2)#'D:/python_course/data/iris.test.arff'
            except FileNotFoundError:
                msg = '对不起输入路径有误,或文件不存在.'
                print(msg)
                break
            else:
                K = input("请输入K值,选择k=1,3,5,7,9,输入其他值退出:\n")
                if(K.isdigit()):
                    K = int(K)
                else:
                    break
                label = classify(training_list, test_list, K)
                counter = 0
                for i in range(len(label)):
                    if label[i] == list(test_list[i].keys())[0]:
                        counter+=1
                rate = round((counter/len(test_list))*100,2)
                result = "{0}       {1}%".format(K,rate)
                print(title)
                print(result)
                result_list.append(result+'\n')
                file_name = 'D:/python_course/data/result.txt'
                with open(file_name, 'a') as f:
                    f.seek(0)
                    f.truncate()   #清空文
                    for each in result_list:
                        f.write(each)             
    

    训练集

    % 1. Title: Iris Plants Database
    % 
    % 2. Sources:
    %      (a) Creator: R.A. Fisher
    %      (b) Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)
    %      (c) Date: July, 1988
    % 
    % 3. Past Usage:
    %    - Publications: too many to mention!!!  Here are a few.
    %    1. Fisher,R.A. "The use of multiple measurements in taxonomic problems"
    %       Annual Eugenics, 7, Part II, 179-188 (1936); also in "Contributions
    %       to Mathematical Statistics" (John Wiley, NY, 1950).
    %    2. Duda,R.O., & Hart,P.E. (1973) Pattern Classification and Scene Analysis.
    %       (Q327.D83) John Wiley & Sons.  ISBN 0-471-22361-1.  See page 218.
    %    3. Dasarathy, B.V. (1980) "Nosing Around the Neighborhood: A New System
    %       Structure and Classification Rule for Recognition in Partially Exposed
    %       Environments".  IEEE Transactions on Pattern Analysis and Machine
    %       Intelligence, Vol. PAMI-2, No. 1, 67-71.
    %       -- Results:
    %          -- very low misclassification rates (0% for the setosa class)
    %    4. Gates, G.W. (1972) "The Reduced Nearest Neighbor Rule".  IEEE 
    %       Transactions on Information Theory, May 1972, 431-433.
    %       -- Results:
    %          -- very low misclassification rates again
    %    5. See also: 1988 MLC Proceedings, 54-64.  Cheeseman et al's AUTOCLASS II
    %       conceptual clustering system finds 3 classes in the data.
    % 
    % 4. Relevant Information:
    %    --- This is perhaps the best known database to be found in the pattern
    %        recognition literature.  Fisher's paper is a classic in the field
    %        and is referenced frequently to this day.  (See Duda & Hart, for
    %        example.)  The data set contains 3 classes of 50 instances each,
    %        where each class refers to a type of iris plant.  One class is
    %        linearly separable from the other 2; the latter are NOT linearly
    %        separable from each other.
    %    --- Predicted attribute: class of iris plant.
    %    --- This is an exceedingly simple domain.
    % 
    % 5. Number of Instances: 150 (50 in each of three classes)
    % 
    % 6. Number of Attributes: 4 numeric, predictive attributes and the class
    % 
    % 7. Attribute Information:
    %    1. sepal length in cm
    %    2. sepal width in cm
    %    3. petal length in cm
    %    4. petal width in cm
    %    5. class: 
    %       -- Iris Setosa
    %       -- Iris Versicolour
    %       -- Iris Virginica
    % 
    % 8. Missing Attribute Values: None
    % 
    % Summary Statistics:
    %  	           Min  Max   Mean    SD   Class Correlation
    %    sepal length: 4.3  7.9   5.84  0.83    0.7826   
    %     sepal width: 2.0  4.4   3.05  0.43   -0.4194
    %    petal length: 1.0  6.9   3.76  1.76    0.9490  (high!)
    %     petal width: 0.1  2.5   1.20  0.76    0.9565  (high!)
    % 
    % 9. Class Distribution: 33.3% for each of 3 classes.
    
    @RELATION iris
    
    @ATTRIBUTE sepallength	REAL
    @ATTRIBUTE sepalwidth 	REAL
    @ATTRIBUTE petallength 	REAL
    @ATTRIBUTE petalwidth	REAL
    @ATTRIBUTE class 	{Iris-setosa,Iris-versicolor,Iris-virginica}
    
    @DATA
    5.1,3.5,1.4,0.2,Iris-setosa
    4.9,3.0,1.4,0.2,Iris-setosa
    4.6,3.1,1.5,0.2,Iris-setosa
    5.0,3.6,1.4,0.2,Iris-setosa
    4.6,3.4,1.4,0.3,Iris-setosa
    5.8,4.0,1.2,0.2,Iris-setosa
    5.7,4.4,1.5,0.4,Iris-setosa
    5.4,3.9,1.3,0.4,Iris-setosa
    5.1,3.5,1.4,0.3,Iris-setosa
    5.7,3.8,1.7,0.3,Iris-setosa
    5.1,3.8,1.5,0.3,Iris-setosa
    5.4,3.4,1.7,0.2,Iris-setosa
    5.1,3.7,1.5,0.4,Iris-setosa
    4.6,3.6,1.0,0.2,Iris-setosa
    5.1,3.3,1.7,0.5,Iris-setosa
    4.8,3.4,1.9,0.2,Iris-setosa
    4.8,3.1,1.6,0.2,Iris-setosa
    5.4,3.4,1.5,0.4,Iris-setosa
    5.2,4.1,1.5,0.1,Iris-setosa
    5.5,4.2,1.4,0.2,Iris-setosa
    4.9,3.1,1.5,0.1,Iris-setosa
    5.0,3.2,1.2,0.2,Iris-setosa
    5.5,3.5,1.3,0.2,Iris-setosa
    4.9,3.1,1.5,0.1,Iris-setosa
    4.4,3.0,1.3,0.2,Iris-setosa
    5.1,3.4,1.5,0.2,Iris-setosa
    5.0,3.5,1.3,0.3,Iris-setosa
    4.5,2.3,1.3,0.3,Iris-setosa
    4.4,3.2,1.3,0.2,Iris-setosa
    5.0,3.5,1.6,0.6,Iris-setosa
    4.9,2.4,3.3,1.0,Iris-versicolor
    6.6,2.9,4.6,1.3,Iris-versicolor
    5.2,2.7,3.9,1.4,Iris-versicolor
    5.0,2.0,3.5,1.0,Iris-versicolor
    5.9,3.0,4.2,1.5,Iris-versicolor
    6.0,2.2,4.0,1.0,Iris-versicolor
    6.1,2.9,4.7,1.4,Iris-versicolor
    5.6,2.9,3.6,1.3,Iris-versicolor
    6.7,3.1,4.4,1.4,Iris-versicolor
    5.6,3.0,4.5,1.5,Iris-versicolor
    6.4,2.9,4.3,1.3,Iris-versicolor
    6.6,3.0,4.4,1.4,Iris-versicolor
    6.8,2.8,4.8,1.4,Iris-versicolor
    6.7,3.0,5.0,1.7,Iris-versicolor
    6.0,2.9,4.5,1.5,Iris-versicolor
    5.7,2.6,3.5,1.0,Iris-versicolor
    5.5,2.4,3.8,1.1,Iris-versicolor
    5.5,2.4,3.7,1.0,Iris-versicolor
    5.8,2.7,3.9,1.2,Iris-versicolor
    6.0,2.7,5.1,1.6,Iris-versicolor
    5.4,3.0,4.5,1.5,Iris-versicolor
    6.0,3.4,4.5,1.6,Iris-versicolor
    6.7,3.1,4.7,1.5,Iris-versicolor
    6.3,2.3,4.4,1.3,Iris-versicolor
    5.6,3.0,4.1,1.3,Iris-versicolor
    5.5,2.5,4.0,1.3,Iris-versicolor
    5.5,2.6,4.4,1.2,Iris-versicolor
    6.1,3.0,4.6,1.4,Iris-versicolor
    5.8,2.6,4.0,1.2,Iris-versicolor
    5.0,2.3,3.3,1.0,Iris-versicolor
    7.3,2.9,6.3,1.8,Iris-virginica
    6.7,2.5,5.8,1.8,Iris-virginica
    7.2,3.6,6.1,2.5,Iris-virginica
    6.5,3.2,5.1,2.0,Iris-virginica
    6.4,2.7,5.3,1.9,Iris-virginica
    6.8,3.0,5.5,2.1,Iris-virginica
    5.7,2.5,5.0,2.0,Iris-virginica
    5.8,2.8,5.1,2.4,Iris-virginica
    6.4,3.2,5.3,2.3,Iris-virginica
    6.5,3.0,5.5,1.8,Iris-virginica
    7.7,3.8,6.7,2.2,Iris-virginica
    7.7,2.6,6.9,2.3,Iris-virginica
    6.0,2.2,5.0,1.5,Iris-virginica
    6.9,3.2,5.7,2.3,Iris-virginica
    5.6,2.8,4.9,2.0,Iris-virginica
    7.7,2.8,6.7,2.0,Iris-virginica
    7.4,2.8,6.1,1.9,Iris-virginica
    7.9,3.8,6.4,2.0,Iris-virginica
    6.4,2.8,5.6,2.2,Iris-virginica
    6.3,2.8,5.1,1.5,Iris-virginica
    6.1,2.6,5.6,1.4,Iris-virginica
    7.7,3.0,6.1,2.3,Iris-virginica
    6.3,3.4,5.6,2.4,Iris-virginica
    6.4,3.1,5.5,1.8,Iris-virginica
    6.0,3.0,4.8,1.8,Iris-virginica
    6.9,3.1,5.4,2.1,Iris-virginica
    6.7,3.1,5.6,2.4,Iris-virginica
    6.9,3.1,5.1,2.3,Iris-virginica
    5.8,2.7,5.1,1.9,Iris-virginica
    6.8,3.2,5.9,2.3,Iris-virginica
    % END
    
    
    

    测试集

    @RELATION iris
    
    @ATTRIBUTE sepallength	REAL
    @ATTRIBUTE sepalwidth 	REAL
    @ATTRIBUTE petallength 	REAL
    @ATTRIBUTE petalwidth	REAL
    @ATTRIBUTE class 	{Iris-setosa,Iris-versicolor,Iris-virginica}
    
    @DATA
    4.7,3.2,1.3,0.2,Iris-setosa
    5.4,3.9,1.7,0.4,Iris-setosa
    5.0,3.4,1.5,0.2,Iris-setosa
    4.4,2.9,1.4,0.2,Iris-setosa
    4.9,3.1,1.5,0.1,Iris-setosa
    5.4,3.7,1.5,0.2,Iris-setosa
    4.8,3.4,1.6,0.2,Iris-setosa
    4.8,3.0,1.4,0.1,Iris-setosa
    4.3,3.0,1.1,0.1,Iris-setosa
    5.0,3.0,1.6,0.2,Iris-setosa
    5.0,3.4,1.6,0.4,Iris-setosa
    5.2,3.5,1.5,0.2,Iris-setosa
    5.2,3.4,1.4,0.2,Iris-setosa
    4.7,3.2,1.6,0.2,Iris-setosa
    5.1,3.8,1.9,0.4,Iris-setosa
    4.8,3.0,1.4,0.3,Iris-setosa
    5.1,3.8,1.6,0.2,Iris-setosa
    4.6,3.2,1.4,0.2,Iris-setosa
    5.3,3.7,1.5,0.2,Iris-setosa
    5.0,3.3,1.4,0.2,Iris-setosa
    7.0,3.2,4.7,1.4,Iris-versicolor
    6.4,3.2,4.5,1.5,Iris-versicolor
    6.9,3.1,4.9,1.5,Iris-versicolor
    5.5,2.3,4.0,1.3,Iris-versicolor
    6.5,2.8,4.6,1.5,Iris-versicolor
    5.7,2.8,4.5,1.3,Iris-versicolor
    6.3,3.3,4.7,1.6,Iris-versicolor
    5.8,2.7,4.1,1.0,Iris-versicolor
    6.2,2.2,4.5,1.5,Iris-versicolor
    5.6,2.5,3.9,1.1,Iris-versicolor
    5.9,3.2,4.8,1.8,Iris-versicolor
    6.1,2.8,4.0,1.3,Iris-versicolor
    6.3,2.5,4.9,1.5,Iris-versicolor
    6.1,2.8,4.7,1.2,Iris-versicolor
    5.6,2.7,4.2,1.3,Iris-versicolor
    5.7,3.0,4.2,1.2,Iris-versicolor
    5.7,2.9,4.2,1.3,Iris-versicolor
    6.2,2.9,4.3,1.3,Iris-versicolor
    5.1,2.5,3.0,1.1,Iris-versicolor
    5.7,2.8,4.1,1.3,Iris-versicolor
    6.3,3.3,6.0,2.5,Iris-virginica
    5.8,2.7,5.1,1.9,Iris-virginica
    7.1,3.0,5.9,2.1,Iris-virginica
    6.3,2.9,5.6,1.8,Iris-virginica
    6.5,3.0,5.8,2.2,Iris-virginica
    7.6,3.0,6.6,2.1,Iris-virginica
    4.9,2.5,4.5,1.7,Iris-virginica
    6.3,2.7,4.9,1.8,Iris-virginica
    6.7,3.3,5.7,2.1,Iris-virginica
    7.2,3.2,6.0,1.8,Iris-virginica
    6.2,2.8,4.8,1.8,Iris-virginica
    6.1,3.0,4.9,1.8,Iris-virginica
    6.4,2.8,5.6,2.1,Iris-virginica
    7.2,3.0,5.8,1.6,Iris-virginica
    6.7,3.3,5.7,2.5,Iris-virginica
    6.7,3.0,5.2,2.3,Iris-virginica
    6.3,2.5,5.0,1.9,Iris-virginica
    6.5,3.0,5.2,2.0,Iris-virginica
    6.2,3.4,5.4,2.3,Iris-virginica
    5.9,3.0,5.1,1.8,Iris-virginica
    % END
    
    展开全文
  • import pandas as pd import numpy as np #使用pandas 读取data train = pd.read_csv("iris-data-training.csv",encoding = "GBK") test = pd.read_csv("iris-data-testing.csv", encoding = "GBK") ...
  • 学习使用K最邻近算法创建分类系统 学习特征抽取 学习回归 学习K最邻近算法的应用案例和局限性 创建推荐系统 如果我们建立一个电影推荐系统,可以将用户放在多维坐标系中,我们认为用户在坐标系中的位置取决于其喜好...
  • 邻近算法,或者说是K最邻近算法,是一个相对简单的多分类算法,其基本工作原理为: 首先我们存在一个训练集,训练集中的每个图片都存在标签(已知图片属于哪一类).对于我们输入的没有标签的数据,我们将新数据中的每个...
  • FLANN快速近似最邻近算法官方指导文档IntroductionQuick Start 快速学习Downloading and compiling FLANN 下载和编译Upgrading from a previous version 版本升级Compiling FLANN with multithreading support 多...
  • C++实现K最邻近算法, 使用KD树来实现, 在面对大量数据时可以提高搜索效率. 代码干净, 整洁, 有注释, 可直接使用.
  • K_最邻近算法:k最邻近算法又称为knn算法,是一种有监督的机器学习算法。k_邻近算法的核心思想是:未标记的样本类别,由距离其最近的k个邻居投票决定。距离计算一般采用欧式距离或者曼哈顿距离。 具体原理如下: ...
  • 最邻近算法(K-Nearest Neighbor,KNN) 1、算法综述 Cover和Hart在1968年提出了最初的邻近算法 分类(Classification)算法 输入给予实例的学习(Instance-based learning),懒惰学习(lazy learning) ...
  • 通过本篇,学习特征抽取、回归,了解K最邻近算法(k-nearest neighbours,KNN)的应用场景及局限性。 一 水果识别例子 比如有两种水果,柚子跟橙子。通常我们认为柚子比橙子更大,更红。 如果判断这个水果是...
  • k最邻近算法

    2019-11-05 11:25:58
    输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前κ个相似的数据,这就是k-近邻算法...
  • K最邻近算法

    2020-09-24 09:43:56
    目录 1 使用make_blobs生成的数据集 1 使用make_blobs生成的数据集 X[:,0]指的是 二维数组中的第一列 而X[1:5]指的是一维数组从索引1至索引4(即 左含右不含) ... X[:5]是 从索引0至索引4 ...
  •  k最邻近算法(k-Nearest Neighbor, KNN),是机器学习分类算法中最简单的一类。假设一个样本空间被分为几类,然后给定一个待分类的特征数据,通过计算距离该数据的最近的k个样本来判断这个数据属于哪一类。如果...
  • KNN最邻近算法

    2018-04-30 23:23:56
    KNN算法是在预测的时候才进行运算的。简要介绍步骤就是,准备好一堆样本,想象一下每个样本在空间分布,它的坐标就是他的几个特征值。 当需要预测时,求出与样本距离最近的几个点,通过这几个点来判断预测点的分类...
  • 1.6. 最邻近算法

    千次阅读 2017-08-07 18:18:55
    非监督最邻近法是许多其他学习算法的基础,特别是流行学习方法及谱聚类方法. 基于临近的监督分类主要在一下两方面具有优势: 具有离散标签数据的`分类`和 连续标签数据的`回归`.. The principle behind nearest ...
  • 最邻近算法补充(K-Nearest Neighbor,KNN) 1、训练数据集?测试数据集? 我们在使用机器学习算法训练好模型以后,是否直接投入真实环境中使用呢?其实并不是这样的,在训练好模型后我们往往需要对我们所建立的模型做...
  • 现尝试采用最邻近算法KNN,取前10列字符作为训练数据,然后识别字母表中的字符。 创建训练数据 首先通过获取前10列字符的轮廓外接矩形,将字符裁剪出作为训练样本建立图库。 #include &lt;string&gt;...
  • K-最邻近算法总结

    2017-06-24 10:21:01
    该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据...
  • 一种常用的基于内容的分类算法-----k--最邻近算法(KNN),利用KNN算法并且结合结合改进的词特征权值计算方法和文本相似度的计算方法完成了文本的自动分类.通过KNN方法分类之后的结果的查准率、查全率得以明显提高...
  • TF入门之最邻近算法

    2019-07-13 13:04:17
    source from ...import numpy as np import tensorflow as tf # 通过最邻近的点来决定样本的种类,没有训练过程吗,就是求最小距离 from tensorflow.examples.tutorials.mnist import input_da...
  • K-最邻近算法

    千次阅读 2014-01-13 17:45:29
    该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据...
  • 什么是图像分类 图像分类是计算机视觉中真正核心的一类任务,分类系统接收一些输入图像,并且系统已经确定了分类或者标签的集合,计算机的任务就是...我们在解决图像识别问题时,并没有什么直接了当的算法(比如我们...
  • KNN(最邻近算法

    2019-06-02 23:43:50
    属于监督学习、分类算法 算法原理 通过预测点计算距离训练样本点之间的距离,获取前k个最近的距离的训练样本点,通过该k个训练样本点所属分类投票来决定该预测点的种类(k一般取值为奇数)。(距离衡量可以为欧式...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,873
精华内容 749
关键字:

最邻近算法