关闭

【机器学习算法-python实现】KNN-k近邻算法的实现(附源码)

标签: 机器学习numpypythonknn
13257人阅读 评论(1) 收藏 举报
分类:

(转载请注明出处:http://blog.csdn.net/buptgshengod)

1.背景

    今后博主会每周定时更新机器学习算法及其python的简单实现。今天学习的算法是KNN近邻算法。KNN算法是一个监督学习分类器类别的算法。

    

     什么是监督学习,什么又是无监督学习呢。监督学习就是我们知道目标向量的情况下所使用的算法,无监督学习就是当我们不知道具体的目标变量的情况下所使用的。而监督学习又根据目标变量的类别(离散或连续)分为分类器算法和回归算法。

    

       k-Nearest Neighbor。k是算法中的一个约束变量,整个算法的总体思想是比较简单的,就是将数据集的特征值看作是一个个向量。我们给程序一组特征值,假设有三组特征值,就可以看做是(x1,x2,x3)。系统原有的特征值就可以看做是一组组的(y1,y2,y3)向量。通过求两向量间的距离,我们找出前k个距离最短的y的特征值对。这些y值所对应的目标变量就是这个x特征值的分类。

公式:


2.python基础之numpy

   
     numpy是python的一个数学计算库,主要是针对一些矩阵运算,这里我们会大量用到它。 介绍一下本章代码中用到的一些功能。

arry:是numpy自带的数组表示,比如本例中的4行2列数字可以这样输入

group=array([[9,400],[200,5],[100,77],[40,300]])


shape:显示(行,列)例:shape(group)=(4,2)


zeros:列出一个相同格式的空矩阵,例:zeros(group)=([[0,0],[0,0],[0,0],[0,0]])


tile函数位于python模块 numpy.lib.shape_base中,他的功能是重复某个数组。比如tile(A,n),功能是将数组A重复n次,构成一个新的数组


sum(axis=1)矩阵每一行向量相加


3.数据集


 


4.代码

    
代码分三个函数,分别是

创建数据集:

createDataset

from __future__ import division
from numpy import *
import operator



def createDataset():
        group=array([[9,400],[200,5],[100,77],[40,300]])
        
        labels=['1','2','3','1']
        return group,labels  

数据归一化:

autoNorm

def autoNorm(dataSet):
    minVals = dataSet.min(0)
    maxVals = dataSet.max(0)
    ranges = maxVals - minVals
    normDataSet = zeros(shape(dataSet))
  
    m = dataSet.shape[0]
    normDataSet = dataSet - tile(minVals, (m,1))
    #print normDataSet
    normDataSet = normDataSet/tile(ranges, (m,1)) #element wise divide
   # print normDataSet
    return normDataSet, ranges, minVals

分类函数:

classify

def classify(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]
    diffMat = tile(inX, (dataSetSize,1)) - dataSet
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances**0.5
    sortedDistIndicies = distances.argsort()
     
    classCount={}          
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]
        
        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]


5.显示结果

 


  


6.代码下载










3
1
查看评论

常见机器学习算法的Python实现

内容 K近邻算法 感知机 朴素贝叶斯分类器 决策树(Decision Tree) 随机森林(Random Forests) 支持向量机(Support Vector Machine) 线性回归(Linear Regression) 逻辑斯蒂回归(Logistic Regression) Baggi...
  • WiseDoge
  • WiseDoge
  • 2017-02-25 08:45
  • 583

机器学习算法-朴素贝叶斯Python实现

引文:前面提到的K最近邻算法和决策树算法,数据实例最终被明确的划分到某个分类中,下面介绍一种不能完全确定数据实例应该划分到哪个类别,或者说只能给数据实例属于给定分类的概率。基于贝叶斯决策理论的分类方法之朴素贝叶斯 优点:在数据较少的情况下仍然有效,可以处理多类别问题 缺点:对于输入数据的准备方式较为...
  • Dream_angel_Z
  • Dream_angel_Z
  • 2015-05-28 12:59
  • 5624

kNN-k近邻算法

一、kNN算法的思想 kNN算法作为机器学习算法中非常有效比较容易掌握的算法,其基本思想是采用测量不同特征值之间的距离的方法进行分类。KNN属于监督学习算法,它的工作原理是:存在一个样本数据集,训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集中每一个数据与所属分类的对应关系...
  • kaishihaohaozuoshi
  • kaishihaohaozuoshi
  • 2016-11-28 10:05
  • 199

【机器学习】k-近邻算法(kNN) 学习笔记

【机器学习】k-近邻算法(kNN) 学习笔记标签(空格分隔): 机器学习kNN简介kNN算法是做分类问题的。思想如下:KNN算法的思想总结一下:就是在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对应的特征进行相互比较,找到训练集中与之最为相似的前K个数据,则该测试数据对应...
  • fuxuemingzhu
  • fuxuemingzhu
  • 2017-04-03 19:31
  • 670

无公式无代码白话机器学习入门算法KNN(K近邻算法)

学习机器学习的基本算法的时候
  • njustzj001
  • njustzj001
  • 2015-06-13 16:00
  • 946

10 种机器学习算法的要点(附 Python )

10 种机器学习算法的要点(附 Python 和 R 代码) 阅读英文原文,请访问如下链接 http://www.analyticsvidhya.com/blog/2015/08/common-machine-learning-algorithms/ Introduction ...
  • phoenixtree7
  • phoenixtree7
  • 2016-07-20 14:36
  • 1763

python 机器学习算法实现 深度学习笔记

点击打开链接
  • sinat_36458870
  • sinat_36458870
  • 2017-04-21 10:33
  • 2191

K-近邻算法python实现

机器学习经典算法:K-近邻算法python实现
  • huruzun
  • huruzun
  • 2014-10-05 21:02
  • 1584

k近邻法的实现:kd树

最近在看李航博士写的《统计学习方法》一书,
  • wenwuchige
  • wenwuchige
  • 2014-04-14 15:40
  • 1523

机器学习python算法评估矩阵

#分类算法矩阵!! from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.linea...
  • mlp750303040
  • mlp750303040
  • 2018-01-21 17:25
  • 28
    我的微信公众号

    作者公众号:凡人机器学习

    凡人机器学习

    机器学习微信交流群
    为了方便大家学习与交流,凡人云近日已开通机器学习社群! 分享“凡人机器学习”公众号名片到40人以上的大群并截图给小助手,小助手就会拉你入群 在这里你可以得到: 1.各种学术讨论 2.最新的资料分享 3.不定期的征文以及联谊活动! 小助手微信号:meiwznn
    作者新书《机器学习实践应用》

    主要讲述算法和业务的结合,适合初学者

    机器学习实践应用

    京东地址

    个人资料
    • 访问:839150次
    • 积分:11217
    • 等级:
    • 排名:第1692名
    • 原创:235篇
    • 转载:40篇
    • 译文:0篇
    • 评论:460条
    博客专栏
    统计