zoukankan      html  css  js  c++  java
  • KNN算法基本原理与sklearn实现

    '''
    KNN 近邻算法,有监督学习算法
    用于分类和回归
    思路:
        1.在样本空间中查找 k 个最相似或者距离最近的样本
        2.根据这 k 个最相似的样本对未知样本进行分类
    步骤:
        1.对数据进行预处理
            提取特征向量,对原来的数据重新表达
        2.确定距离计算公式
            计算已知样本空间中所有样本与未知样本的距离
        3.对所有的距离按升序进行排列
        4.选取与未知样本距离最小的 k 个样本
        5.统计选取的 k 个样本中每个样本所属类别的出现概率
        6.把出现频率最高的类别作为预测结果,未知样本则属于这个类别
    程序要点:
    1.创建模型需要用到的包
    sklearn.neighbors.KNeighborsClassifier
    2.创建模型,k = 3
    knn = KNeighborsClassifier(n_neighbors = 3)
        n_neighbors 数值不同,创建的模型不同
    3.训练模型,进行拟合
    knn.fit(x,y)
        x 为二维列表数据
            x = [[1,5],[2,4],[2.2,5],
                 [4.1,5],[5,1],[5,2],[5,3],[6,2],
                 [7.5,4.5],[8.5,4],[7.9,5.1],[8.2,5]]
        y 为一维分类数据,将数据分为 0 1 2 三类
            y = [0,0,0,
                 1,1,1,1,1,
                 2,2,2,2]
    4.进行预测未知数据,返回所属类别
    knn.predict([[4.8,5.1]])
    5.属于不同类别的概率
    knn.predict_proba([[4.8,5.1]])
    '''
    from sklearn.neighbors import KNeighborsClassifier
    # 导包
    x = [[1,5],[2,4],[2.2,5],
         [4.1,5],[5,1],[5,2],[5,3],[6,2],
         [7.5,4.5],[8.5,4],[7.9,5.1],[8.2,5]]
    # 设置分类的数据
    y = [0,0,0,
         1,1,1,1,1,
         2,2,2,2]
    # 对 x 进行分类,前三个分为 0类,1类和2类
    knn = KNeighborsClassifier(n_neighbors=3)
    # 创建模型 k = 3
    knn.fit(x,y)
    # 开始训练模型
    '''
    KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
                         metric_params=None, n_jobs=None, n_neighbors=3, p=2,
                         weights='uniform')
    '''
    knn.predict([[4.8,5.1]])
    # array([1]) 预测 4.8,5.1 在哪一个分组中
    knn = KNeighborsClassifier(n_neighbors=9)
    # 设置参数 k = 9
    knn.fit(x,y)
    '''
    KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
                         metric_params=None, n_jobs=None, n_neighbors=9, p=2,
                         weights='uniform')
    '''
    knn.predict([[4.8,5.1]])
    # array([1])
    knn.predict_proba([[4.8,5.1]])
    # 属于不同类别的概率
    # array([[0.22222222, 0.44444444, 0.33333333]])
    # 返回的是在不同组的概率
    '''
    总结:
         knn = KNeighborsClassifier(n_neighbors=3) 
         使用 KNeighborsClassifier 创建模型 n_neighbors 为 k  
         使用 knn.fit() 进行预测
              第一个参数为 二维列表
              第二个参数为 一维列表
         使用 predict_proba([[num1,num2]])
         查看num1,num2 在模型中出现的概率
    '''

    2020-04-10

  • 相关阅读:
    Android数据存储之Application
    contentOffset、contentSize和contentInset
    block
    IOS中的深拷贝和浅拷贝
    手势图的设计原理(2)拖拽、捏合、轻扫、旋转
    深浅拷贝的应用-copy、mutableCopy
    手势图的设计原理(1)建立、开始、移动、结束、点击、长按
    UIView
    MVC-Model
    UIPageControl页面控制的控件
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12672247.html
Copyright © 2011-2022 走看看