• K近邻算法


    一、简介

    1968年,Cover和Hart最早提出了K-近邻算法。

    以下引用自百度百科:

    K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。
    该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

    假设两个样本为m(m1,m2,m3)n(n1,n2,n3),则距离公式为

    \begin{align}\notag \sqrt{(m1-n1)^{2}+(m2-n2)^{2}+(m3-n3)^{2}} \end{align}

    主要思想: - 物以类聚,人以群分 - 少数服从多数

    二、优缺点

    1. 优点

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

    2. 缺点

    • 计算量大,内存开销大
    • 必须指定K值,K值选择不当会影响精度
    • 当样本数量不平衡时, 即一种样本容量很大, 而其他几种容量很小时, 当输入一个新样本时, 该样本的近邻中容量大的样本占多数, 会产生误差。

    三、API

    	sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, algorithm='auto')
    

    n_neighbors:使用的邻居数,整形,可选,默认为5
    algorithm:用于计算最近邻居的算法,可选,{'auto', 'ball_tree', 'kd_tree', 'brute'}

    • ball_tree:使用BallTree
    • kd_tree:使用KDTree
    • brute:使用暴力算法
    • auto:根据传递给fit方法的值来决定最合适的算法。

    四、简单示例

    数据选择scikit-learn提供的鸢尾花数据集。

    	from sklearn.datasets import load_iris
    

    从上图可以看出,鸢尾花数据集由150个样本组成。
    包含三种鸢尾花,分别为山鸢尾(Iris-Setosa)、变色鸢尾(Iris-Versicolour)和维吉尼亚鸢尾(Iris-Virginica),每种鸢尾花包含50个样本。
    每个样本包含4个特征,分别为萼片长度(sepal length)、萼片宽度(sepal width)、花瓣长度(petal length)和花瓣宽度(petal width)。

    维吉尼亚鸢尾 变色鸢尾 山鸢尾

    下面附上代码:

    from sklearn.datasets import load_iris
    from sklearn.preprocessing import StandardScaler
    from sklearn.model_selection import train_test_split
    from sklearn.neighbors import KNeighborsClassifier
    
    
    # 实例化数据集
    li = load_iris()
    
    # 分割数据集到训练集和测试集
    x_train,x_test,y_train,y_test = train_test_split(li.data,li.target,test_size=0.25)
    
    # 将数据进行标准化
    stds = StandardScaler()
    x_train = stds.fit_transform(x_train)
    x_test = stds.transform(x_test)
    
    # KNN算法进行预测
    knn = KNeighborsClassifier(n_neighbors=5)
    knn.fit(x_train,y_train)
    
    # 得出准确率
    print("准确率为:",knn.score(x_test,y_test))
    

    程序输出结果如下图,由于分割训练集和测试集是随机分割,所以每次准确率不一样。


    不管前方的路有多苦,只要走的方向正确,不管多么崎岖不平,都比站在原地更接近幸福。 ——《千与千寻》

  • 相关阅读:
    Linux系统配置(防火墙)
    读取数据库中的json格式的字符串数据时cJSON解析后总会出现很多反斜杠的问题
    std::map添加一个类类型
    RabbitVCS SVN:提交失败,工作副本已经锁定
    Qt输入法
    二叉树是逻辑结构 与定时 小顶堆
    Kettle 的 安装 及 简单使用
    删除 canal 实例
    /opt/module/canal/conf/canal.properties
    Mac VMware 虚拟机 对应 win 的三种 网络模式
  • 原文地址:https://www.cnblogs.com/dblsha/p/10135484.html
Copyright © 2020-2023  润新知