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

标签: 机器学习 numpy python knn
13647人阅读 评论(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.代码下载










查看评论

机器学习算法——归一化数值

#coding=utf-8 __author__ = 'whf' import numpy from kNN import file2matrix from numpy import * def a...
  • BehandTheTime
  • BehandTheTime
  • 2015-10-02 10:14:02
  • 1898

机器学习实战 第二章KNN(1)python代码及注释

#coding=utf8 #KNN.py from numpy import * import operator def createDataSet(): group=array([[1.0,1....
  • fenfenmiao
  • fenfenmiao
  • 2016-08-09 19:26:11
  • 3829

机器学习实战——K-近邻算法【2:改进约会网站配对效果】

机器学习实战学习笔记系列 机器学习实战——K-近邻算法【1:从文本中解析数据并可视化】 机器学习实战——K-近邻算法【2:改进约会网站配对效果】 首先准备数据,将数据特征归一化 采用下列公式将任意...
  • xiao_lxl
  • xiao_lxl
  • 2017-08-08 15:57:05
  • 294

2_6最近邻算法kNN(k_nearest_neighbor)——handwritingClassTest_2_6

声明:《机器学习实战》代码详细注释和重构,以及相关的函数、模块和算法的解释;本文为博主原创文章,未经博主允许不得转载。 手写数字识别系统的测试代码(程序清单2-6) *#代码:Peter Gong_...
  • weixin_34450046
  • weixin_34450046
  • 2017-04-24 21:13:54
  • 308

机器学习系列(9)_机器学习算法一览(附Python和R代码)

写这篇文章的目的,就是希望它可以让有志于从事数据科学和机器学习的诸位在学习算法的路上少走些路。我会在文章中举例一些机器学习的问题,你们也可以在思考解决这些问题的过程中得到启发。我也会写下对于各种机器学...
  • yaoqiang2011
  • yaoqiang2011
  • 2016-04-19 16:04:48
  • 33830

小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码)

编译 | 林椿眄出品 | AI科技大本营(公众号ID:rgznai100)【AI科技大本营导读】Python 被称为是最接近 AI 的语言。最近一位名叫Anna-Lena Popkes的小姐姐在Git...
  • dQCFKyQDXYm3F8rB0
  • dQCFKyQDXYm3F8rB0
  • 2018-03-30 00:00:00
  • 135

《机器学习实战》--KNN

一、瞎扯 先拉一下仇恨,这篇文章是在喝着走亲戚时带来的饮料,单曲循环着成龙版本的《拯救》的情况下完成的,哈哈,过年难免有些活的太潇洒,于是还是需要写些代码,看些书来收收心,另外新的一年开始了,也...
  • wlmnzf
  • wlmnzf
  • 2016-02-09 01:08:17
  • 932

k-邻近算法学习笔记

k-邻近算法
  • zhouheng2018
  • zhouheng2018
  • 2017-05-28 22:26:12
  • 133

机器学习热门算法代码实现python,附简易数据集

  • 2015年06月20日 08:52
  • 30.98MB
  • 下载

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

内容 K近邻算法 感知机 朴素贝叶斯分类器 决策树(Decision Tree) 随机森林(Random Forests) 支持向量机(Support Vector Machine) 线性回归(Li...
  • WiseDoge
  • WiseDoge
  • 2017-02-25 08:45:24
  • 925
    统计

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

    机器学习实践应用

    京东地址

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

    凡人机器学习

    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 89万+
    积分: 1万+
    排名: 1617
    博客专栏