#!/usr/bin/env python

#-*-coding:utf-8-*-

#knn 的具体实现

import csv

import random

import math

import operator

#导入数据集 文件名,split区分那个集

def loadDataset(filename,split,trainintset=[],testSet=[]):

with open(filename,'rb') as csvfile:

lines=csv.reader(csvfile)

dataset=list(lines)

for x in range(len(dataset)-1):

for y in range(4):

dataset[x][y]=float(dataset[x][y])

if random.random()

trainingSet.append(dataset[x])

else:

testSet.append(dataset[x])

#计算距离

def euclideanDistance(instance1,instance2,length):

distance=0

for x in range(length):

distance+=pow((instance1[x]-instance2[x]),2)

return math.sqrt(distance)

#得到相邻的k个邻居

def getNeighbors(trainingSet,testInstance,k):

distance=[]

length=len(testInstance)-1

#测试集的维度

for x in range(len(trainingSet)):

dist=euclideanDistance(testInstance,trainingSet[x],length)

distance.append((trainingSet[x],dist))

distance.sort(key=operatos.itemgetter(1))

neighbors=[]

for x in range(k):

neighbors.append(distances[x][0])

return neighbors

#得到那个类占大多数

def getResponse(neighbors):

classVotes={}

for x in range(len(neighbors)):

response=neighbors[x][-1]

if response in classVotes:

classVotes[response]+=1

else:

classVotes[response]=1

sortedVotes=sorted(classVotes.iteritems(),key=operator.itemgetter(1),reverse=True)

#按降序排列

return sortedVotes[0][0]

#准确率

def getAccuracy(testSet,predictions):

correct=0

for x in range(len(testSet)):

if testSet[x][-1]==predictions[x]:

correct+=1

return (correct/float(len(testSet)))*100.0

def main():

trainingSet=[]

testSet=[]

split=0.67

loadDataset(r'data.txt',split,trainingSet,testSet)

print('Train set: '+repr(len(trainingSet)))

print('Test set: '+repr(len(testSet)))

predictions=[]

k=3

for x in range(len(testSet)):

neighbors=getNeighbors(trainingSet,testSet[x],k)

result=getResponse(neighbors)

predictions.append(result)

print('> predicted='+repr(result)+', actual='+repr(testSet[x][-1]))

accuracy=getAccuracy(testSet,predictions)

print('Accuracy: '+repr(accuracy)+'%')

main()

#!/usr/bin/env python#-*-coding:utf-8-*-#knn实现手写数字识别#1建立工程并导入sklearn包‘import numpy as npfrom os import listdir #使用listdir模块,用于访问本地文件from sklearn import neighbors#2加载训练数据#将加载的32*32的图片矩阵展开成一列向量def img2vector(fileName): retMat=np.zeros([1024],int)#定义返回的矩阵,大小为1*1024 fr=open(fileName)#打开包含32*32大小的数字文件 lines=fr.readlines()#读取文件的所有行 for i in range(32):#遍历文件所有行 for j in range(32):#并将01数字存放在retMat中 retMat[i*32+j]=lines[i][j] return retMat#定义加载训练数据的函数readDataSet;def readDataSet(path): fileList=listdir(path)#获取文件夹下的所有文件 numFiles=len(fileList)#统计需要读取的文件的数目 dataSet=np.zeros([numFiles,1024],int)#用于存放所有的数字文件 hwLabels=np.zeros([numFiles])#用于存放对应的标签(与神经网络的不同) for i in range(numFiles):#遍历所有的文件 filePath=fileList[i]#获取文件名称/路径 digit=int(filePath.split('_')[0])#通过文件名获取标签 hwLabels[i]=digit#直接存放数字,并非one-hot向量 dataSet[i]=img2vector(path+'/'+filePath)#读取文件内容 return dataSet,hwLabelstrain_dataSet,train_hwLabels=readDataSet('digits/trainingDigits/')#训练的图片,对应的标签#3构建KNN分类器knn=neighbors.KNeighborsClassifier(algorithm='kd_tree',n_neighbors=3)knn.fit(train_dataSet,train_hwLabels)#加载测试集dataSet,hwLabels=readDataSet('digits/testDigits/')#构建好的knn分类器对测试集进行预测,并计算预测的错误率res=knn.predict(dataSet)#对测试集进行预测error_num=np.sum(res!=hwLabels)#统计分类错误的数目num=len(dataSet)#测试集的数目print('Total num:',num,' wrong num:', error_num,' WrongRate:',error_num/float(num))

#!/usr/bin/env python

#-*-coding:utf-8-*-

#knn算法实例鸢尾花预测

from sklearn import neighbors

from sklearn import datasets

knn=neighbors.KNeighborsClassifier()

#加载数据

iris=datasets.load_iris()

#打印数据

print(iris)

#训练KNN分类器

knn.fit(iris.data,iris.target)

#KNN实验

predictedLabel=knn.predict([[0.1,0.2,0.3,0.4]])

print(predictedLabel)

结果解释:

鸢尾花的数据集

数据代表花瓣的长宽,花萼的长宽

预测目标target

预测结果【0】

#!/usr/bin/env python

#-*-coding:utf-8-*-

#knn实现手写数字识别

#1建立工程并导入sklearn包‘

import numpy as np

from os import listdir #使用listdir模块,用于访问本地文件

from sklearn import neighbors

#2加载训练数据

#将加载的32*32的图片矩阵展开成一列向量

def img2vector(fileName):

retMat=np.zeros([1024],int)#定义返回的矩阵,大小为1*1024

fr=open(fileName)#打开包含32*32大小的数字文件

lines=fr.readlines()#读取文件的所有行

for i in range(32):#遍历文件所有行

for j in range(32):#并将01数字存放在retMat中

retMat[i*32+j]=lines[i][j]

return retMat

#定义加载训练数据的函数readDataSet;

def readDataSet(path):

fileList=listdir(path)#获取文件夹下的所有文件

numFiles=len(fileList)#统计需要读取的文件的数目

dataSet=np.zeros([numFiles,1024],int)#用于存放所有的数字文件

hwLabels=np.zeros([numFiles])#用于存放对应的标签(与神经网络的不同)

for i in range(numFiles):#遍历所有的文件

filePath=fileList[i]#获取文件名称/路径

digit=int(filePath.split('_')[0])#通过文件名获取标签

hwLabels[i]=digit#直接存放数字,并非one-hot向量

dataSet[i]=img2vector(path+'/'+filePath)#读取文件内容

return dataSet,hwLabels

train_dataSet,train_hwLabels=readDataSet('digits/trainingDigits/')

#训练的图片,对应的标签

#3构建KNN分类器

knn=neighbors.KNeighborsClassifier(algorithm='kd_tree',n_neighbors=3)

knn.fit(train_dataSet,train_hwLabels)

#加载测试集

dataSet,hwLabels=readDataSet('digits/testDigits/')

#构建好的knn分类器对测试集进行预测,并计算预测的错误率

res=knn.predict(dataSet)#对测试集进行预测

error_num=np.sum(res!=hwLabels)#统计分类错误的数目

num=len(dataSet)#测试集的数目

print('Total num:',num,' wrong num:', error_num,' WrongRate:',error_num/float(num))

结果解释:

预测实例946, wrong num 为10 WrongRate 为 0.010570824524312896

knn算法java版_KNN算法的实现详解相关推荐

  1. 独家总结 | KNN算法Python实现(附代码详解及注释)

    ↑ 点击上方[计算机视觉联盟]关注我们 上一篇已经介绍KNN算法的基本原理,这篇就不再赘述(公式太多,读不懂? 一文带你领略KNN近邻算法~简单易懂) 纸上得来终觉浅,仅仅懂了原理还不够,要用代码实践 ...

  2. Java版skiplist跳表详解

    skiplist简介 skiplist 是 一个概率型数据结构,查找.删除.插入的时间复杂度都是O(logN). skiplist是由多层有序的链表组成的,来加快查找速度. 其中第0层包含了所有元素, ...

  3. 二分搜索算法的实现详解

    二分搜索算法实现 问题引入:聚会上猜数,大家为了缩短游戏进程,增加游戏刺激度,往往会采用"猜中间数"的方法,不断取中间数来使得猜数范围快速缩小,而二分算法就是基于这样的思想(不是事 ...

  4. java 随机金额_java_微信随机生成红包金额算法java版,最近几年玩得最疯狂的应该是 - phpStudy...

    微信随机生成红包金额算法java版 最近几年玩得最疯狂的应该是发红包了,尤其是过年的时候特别受欢迎,下面写了红包的随机算法,其实挺简单的,仅是提供一种思路,希望可以给大家一些启发. public cl ...

  5. JAVA中希尔排序去的讲解_java 中基本算法之希尔排序的实例详解

    java 中基本算法之希尔排序的实例详解 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shel ...

  6. 最小生成树Prim算法Java版

    最小生成树Prim算法Java版 算法描述: 在一个加权连通图中,顶点集合V,边集合为E 任意选出一个点作为初始顶点,标记为visit,计算所有与之相连接的点的距离,选择距离最短的,标记visit. ...

  7. Java算法:华为机试算法(下),华为算法Java版,牛客网华为算法73~108题

    接上篇:Java算法:华为机试算法(中),华为算法Java版,牛客网华为算法55~72题   HJ73 计算日期到天数转换 计算日期到天数转换 题目描述 根据输入的日期,计算是这一年的第几天.. 测试 ...

  8. Java并发编程最佳实例详解系列

    Java并发编程最佳实例详解系列: Java并发编程(一)线程定义.状态和属性 Java并发编程(一)线程定义.状态和属性 线程是指程序在执行过程中,能够执行程序代码的一个执行单元.在java语言中, ...

  9. 【JVM】对象存活判定算法、GC算法、STW、GC种类详解

    [JVM]对象存活判定算法.GC算法.STW.GC种类详解 文章目录 [JVM]对象存活判定算法.GC算法.STW.GC种类详解 GC主要关注的区域 垃圾标记阶段:对象存活判断 标记阶段:引用计数算法 ...

最新文章

  1. [OS] 进程间通信--管道
  2. Pwn环境配置(三)——ubuntu环境搭建
  3. 【北航oj】(线段树取模运算)
  4. 阿里云大数据利器之-RDS迁移到Maxcompute实现动态分区
  5. 输入输出数组元素的函数重载_C ++函数重载| 查找输出程序| 套装3
  6. 汇编语言调用c语言ads,ADS1.2 在汇编代码中调用C函数
  7. 日志单例log4cpp简述
  8. LintCode 字符串查找
  9. 算法移植优化(七)cmake常用函数记录
  10. Android 系统(40)Handler的基本概念
  11. box-sizing的类型
  12. Chatbot ⾖瓣电影爬⾍简析
  13. TMOD、SCON、PCON寄存器的配置
  14. w10系统怎样打开计算机策略,Win10系统组策略在哪里打开
  15. CEikEdwin 助手
  16. java怎么才能学透彻?
  17. 科大奥锐干涉法测微小量实验的数据,大学物理实验报告答案大全(实验数据)
  18. Java / Tensorflow - API 调用 pb 模型使用 GPU 推理
  19. java窗体背景图片_java 窗体设置背景图片问题 (附上登陆界面代码,我想加个背景图...
  20. JavaScript学习第十三天

热门文章

  1. 目标检测——夏侯南溪模型搭建篇(legacy)
  2. 【已解决】ModuleNotFoundError: No module named ‘web’的解决办法:
  3. [转]MyBatis传入多个参数的问题 - mingyue1818
  4. 学生信息管理系统问题集锦(三)
  5. 敏捷开发一千零一问系列之十七:长期受制于强势客户怎么办?(上)
  6. 下一次装mysql 试一下这个方法
  7. SDN第5次上机作业
  8. Python实现查询12306火车票信息
  9. bzoj 4401: 块的计数
  10. python Image 安装