参见《机器学习实战》

 # -*- coding:cp936 -*-
#===============================================================================
# 设计KNN最近邻分类器:
# 找出每个元素在数据集中的最近邻的K个数据,统计这K个数据所属的类,所属类最多的那个类就是该元素所属的类
#===============================================================================
import numpy as np def loadHaiLunData(f_name):
with open(f_name) as fHandle:
fLines = fHandle.readlines()
dataLines = len(fLines)
label = []
dataSetMat = np.zeros((dataLines,3))
for i in range(dataLines):
lineList = fLines[i].strip().split('\t')
dataSetMat[i,:] = lineList[0:3]
label.append(int(lineList[-1]))
return dataSetMat,label def dataNorm(dataSet):
numOfEle = dataSet.shape[0]
minEle = dataSet.min(0)
maxEle = dataSet.max(0)
normedData = (dataSet-np.tile(minEle,(numOfEle,1)))/np.tile(maxEle-minEle,(numOfEle,1))
return normedData def classifyKnn(inX, dataSet, label, k):
#===========================================================================
# inX:输入向量
# dataSet:保存数据特征的数组,每一行为若干个特征的参数,与label对应
# label:表明当前这个数据集中的每一个元素属于哪一类
# k:设定最近邻的个数
#=========================================================================== #首先对数据集进行归一化
# dataSet = dataNorm(dataSet)
numOfEle = dataSet.shape[0]
index = 0
diffDistance = dataSet - np.tile(inX, (numOfEle,1))
diffDistance = diffDistance**2
squareDistance = diffDistance.sum(1)
# squareDistance = squareDistance**0.5
knnIndex = squareDistance.argsort()
#统计最近的k个近邻的label,看哪个label类别最多就可将该训练元素判为对应类
staticDict = {}
for i in range(k):
staticDict[label[knnIndex[i]]]=staticDict.get(label[knnIndex[i]],0)+1
itemList = staticDict.items()
argmax = np.argmax(itemList, axis = 0)
return itemList[argmax[1]][0] def testHaiLunClassify(k = 3, hRatio = 0.5):
dataSet,label = loadHaiLunData('datingTestSet2.txt')
# hRatio = 0.5
totalNum = dataSet.shape[0]
testNum = int(totalNum*hRatio)
dataNormed = dataNorm(dataSet)
errorClass = 0
for i in range(testNum):
classRes = classifyKnn(dataNormed[i,:], dataNormed[testNum:,:], label[testNum:], k)
if classRes != label[i]:
errorClass += 1
# print "classify error, No. %d should be label %d but got %d"%(i, label[i],classRes)
errorRate = errorClass/float(testNum)
# print
# print "Error rate: %f"%(errorRate)
return errorRate if __name__ == '__main__':
errorList = []
kRange = range(1,50,1)
for k in kRange:
errorList.append(testHaiLunClassify(k))
print errorList
import matplotlib.pyplot as plt
fig = plt.figure(1)
# ax = fig.add_subplot(111)
plt.plot(kRange, errorList,'rs-')
plt.show()

k-近邻分类的Python实现的更多相关文章

  1. K近邻分类算法实现 in Python

    K近邻(KNN):分类算法 * KNN是non-parametric分类器(不做分布形式的假设,直接从数据估计概率密度),是memory-based learning. * KNN不适用于高维数据(c ...

  2. 每日一个机器学习算法——k近邻分类

    K近邻很简单. 简而言之,对于未知类的样本,按照某种计算距离找出它在训练集中的k个最近邻,如果k个近邻中多数样本属于哪个类别,就将它判决为那一个类别. 由于采用k投票机制,所以能够减小噪声的影响. 由 ...

  3. 查看neighbors大小对K近邻分类算法预测准确度和泛化能力的影响

    代码: # -*- coding: utf-8 -*- """ Created on Thu Jul 12 09:36:49 2018 @author: zhen &qu ...

  4. 机器学习经典算法具体解释及Python实现--K近邻(KNN)算法

    (一)KNN依旧是一种监督学习算法 KNN(K Nearest Neighbors,K近邻 )算法是机器学习全部算法中理论最简单.最好理解的.KNN是一种基于实例的学习,通过计算新数据与训练数据特征值 ...

  5. Python机器学习基础教程-第2章-监督学习之K近邻

    前言 本系列教程基本就是摘抄<Python机器学习基础教程>中的例子内容. 为了便于跟踪和学习,本系列教程在Github上提供了jupyter notebook 版本: Github仓库: ...

  6. 机器学习PR:k近邻法分类

    k近邻法是一种基本分类与回归方法.本章只讨论k近邻分类,回归方法将在随后专题中进行. 它可以进行多类分类,分类时根据在样本集合中其k个最近邻点的类别,通过多数表决等方式进行预测,因此不具有显式的学习过 ...

  7. 基本分类方法——KNN(K近邻)算法

    在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...

  8. (数据挖掘-入门-6)十折交叉验证和K近邻

    主要内容: 1.十折交叉验证 2.混淆矩阵 3.K近邻 4.python实现 一.十折交叉验证 前面提到了数据集分为训练集和测试集,训练集用来训练模型,而测试集用来测试模型的好坏,那么单一的测试是否就 ...

  9. 数据挖掘算法(一)--K近邻算法 (KNN)

    数据挖掘算法学习笔记汇总 数据挖掘算法(一)–K近邻算法 (KNN) 数据挖掘算法(二)–决策树 数据挖掘算法(三)–logistic回归 算法简介 KNN算法的训练样本是多维特征空间向量,其中每个训 ...

  10. 机器学习--K近邻 (KNN)算法的原理及优缺点

    一.KNN算法原理 K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法. 它的基本思想是: 在训练集中数据和标签已知的情况下,输入测试数据,将测试数据的特征与训练集中对 ...

随机推荐

  1. mysql.zip免安装版配置

    MYSQL ZIP免安装版配置 1. 下载MySQL 选择自己想要的.本次安装.我使用的是mysql-5.6.17-winx64  地址:http://dev.mysql.com/downloads/ ...

  2. sentos 上安装vnc图形界面

    一.安装gnome图形化桌面   CentOS 6.3 64位 #yum groupinstall -y "X Window System" #yum groupinstall - ...

  3. [machine learning] Loss Function view

    [machine learning] Loss Function view 有关Loss Function(LF),只想说,终于写了 一.Loss Function 什么是Loss Function? ...

  4. HDU 1429 胜利大逃亡(续)(三维BFS)

    题目链接 题意 : 中文题不详述. 思路 : 这个题和1885差不多一样的,所以我直接改了改那个代码就交上了,链接 #include <stdio.h> #include <stri ...

  5. Spring MVC 与 web开发

    转载:http://coderbee.net/index.php/java/20140719/959 项目组用了 Spring MVC 进行开发,觉得对里面的使用方式不是很满意,就想,如果是我来搭建开 ...

  6. C++拷贝对象

    简介 对象的创建中,常常有这样的需求,就是把对象复制一份. 而复制有三种方法: 1.通过初始化来复制 例如:Object o1(10); Object o2=o1; 2.通过赋值来复制 例如:Obje ...

  7. [ASP.NET MVC] 利用动态注入HTML的方式来设计复杂页面

    原文:[ASP.NET MVC] 利用动态注入HTML的方式来设计复杂页面 随着最终用户对用户体验需求的不断提高,实际上我们很多情况下已经在按照桌面应用的标准来设计Web应用,甚至很多Web页面本身就 ...

  8. Autodesk 2015全套密钥

    Below is a list for collecting all the Autodesk 2015 Product Keys:      [*]AutoCAD 2015 001G1      [ ...

  9. Exynos 4412的启动过程分析[2]

    做实验时我们是把 bin 文件烧入SD卡,比如前面做的汇编流水灯实验. 问:是谁把这些指令从 SD 卡读出来执行? 答:是固化在芯片内部ROM上的代码---它被称为iROM ,iROM是厂家事先烧写在 ...

  10. poj 1611 The Suspects(简单并查集)

    题目:http://poj.org/problem?id=1611 0号是病原,求多少人有可能感染 #include<stdio.h> #include<string.h> # ...