zoukankan      html  css  js  c++  java
  • 【笔记】初探KNN算法(1)

    KNN算法(1)

    全称是K Nearest Neighbors
    k近邻算法:

    • 思想简单
    • 需要的数学知识很少
    • 效果不错
    • 可以解释机器学习算法使用过程中的很多细节问题
    • 更加完整的刻画机器学习应用的流程

    其思想总的来说就是在多个样本之间进行比较,越相似的话,新的样本就有更高的概率属于这个类别,一般用来解决分类问题,关于操作流程,简单来说,就是一个新样本进入以后,我们需要k个邻居(距离最近的样本)来判断猜测新样本的符合的类别

    对于两个特征点的距离计算,可以使用欧拉距离,但是往往算的是不止三维的,所以可以使用

    关于基础部分
    例子:
    假设有10个样本
    他们的位置分别在

    设置X_train和y_train

    然后进行可视化

      plt.scatter(X_train[y_train==0,0],X_train[y_train==0,1],color="g")
      plt.scatter(X_train[y_train==1,0],X_train[y_train==1,1],color="r")
    

    设置一个新的样本

      x = np.array([8.0,3.4])
    

    再在此基础上重新可视化

      plt.scatter(X_train[y_train==0,0],X_train[y_train==0,1],color="g")
      plt.scatter(X_train[y_train==1,0],X_train[y_train==1,1],color="r")
      plt.scatter(x[0],x[1],color="b")
    

    找出新样本的位置

    KNN算法的简单流程

    求出新样本到各个样本的距离

      distances = [sqrt(np.sum((x_train - x)**2)) for x_train in X_train]
    

    得出索引

    设置一个nearest用来存放

    设置k=6
    设置一个topK_y用来找出k范围中的种类

      topK_y = [y_train[i] for i in nearest[:k]]
    

    使用Counter(topK_y),来对种类进行一个整合划分,可看做一个字典

    最后

      votes = Counter(topK_y)
    

    就可以得出大致结果

    最后设置predict_y用来存放最终结果

    您能读到这儿,我呢是发自真心的感谢您,若要转载,还望请您带上链接
  • 相关阅读:
    Oracle 安装安全补丁过程中出现的问题
    Oracle 设置日志模式
    Oracle 设置archivelog错误解决方案
    sum() over() 函数的使用
    C盘清理,移动node 依赖和缓存文件
    ol设置最佳可视范围和限制缩放
    flex弹性布局模式下文字超出显示省略号
    查看svn本地账户和密码
    flutter apk启动闪退问题
    More than one file was found with OS independent path 'lib/armeabi-v7a/libflutter.so'
  • 原文地址:https://www.cnblogs.com/jokingremarks/p/14274515.html
Copyright © 2011-2022 走看看