KNN算法的代码实现
# -*- coding: utf-8 -*-
"""
Created on Wed Mar 7 09:17:17 2018
@author: admin
"""
#######################################################
#kNN cluster
#author:niucas
#date:2-18-03-07
#homePage:http://www.cnblogs.com/PiPifamily/
#email:maowankui@163.com
#命名规则采用驼峰命名
#######################################################
#导入对应的包
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import operator
############
#准备数据
############
def creatDataSet():
'''
函数的作用是创建一个训练数据集,并且对应各个数据的label(标签)
'''
testData = np.array([
[1.0,1.1],
[1.0,1.1],
[0.,0.],
[0.,0.1]
])
testLabel = ['A','A','B','B']
return testData,testLabel
def classify(inData,dataSet,labels,k):
'''
此函数是用来进行分类;
参数定义如下:
inData:输入数据
dataSet:训练数据集
labels:训练数据对应的labels
k:选取的K值
'''
dataSetSize = dataSet.shape[0]
#第一步计算欧式距离
diff = np.tile(inData,(dataSetSize,1)) - dataSet #训练数据集每个对象与测试数据的差值
distance = ((diff**2).sum(axis=1)) ** 0.5#求差值的平方和
#############
#开始进行投票
#############
sortedDistIndex = np.argsort(distance) #将欧式距离进行升序排列,结果对应的是索引号
#存放最终结果的字典,初始化
classCount = {}
#投票就是计算前K个值中,概率的最大的类,哪个labels值最大
for i in range(k):
voteLabel = labels[sortedDistIndex[i]]
#print(voteLabel)
classCount[voteLabel] = classCount.get(voteLabel,0) + 1
#将classCount中的分类结果进行排序,返回得票数最高的label
sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1), reverse = True)#降序排列,默认是升序排列
# class = max(classCount.items(),Key = lambda x : x[1])[0]
return sortedClassCount[0][0]
if __name__ == "__main__":
#导入数据
dataSet,labels = creatDataSet()
inData = [0.1,0.1]
#简单分类
className = classify(inData,dataSet,labels,3)
print('the class of test sample is %s' % className)
#从文件中读取数据
def readFile(filepath):
'''
从文件中读取数据,并存储为矩阵形式
'''
#path = "E:\\1\ML\ML Data\machinelearninginaction\Ch02\datingTestSet.txt"
file = open(filepath)
dataSetLine = len(file.readlines()) #获取样本的行数
newDataMat = np.zeros((dataSetLine,3)) #初始化一个矩阵存放训练数据
newDataLabel = [] #创建一个list存放标签
index = 0
for line in file.readlines():
line = line.strip().split('\t')
#把分割好的数据放入数据集中,index是样本的下标
newDataMat[index,:] = line[0:3]
#把样本中的标签放到数据集中
newDataLabel = newDataLabel.append(int(line[-1]))
index += 1
return newDataMat,newDataLabel
#filepath = "E:\\1\ML\ML Data\machinelearninginaction\Ch02\datingTestSet.txt"
#Mat,Label = readFile(filepath)
def autoNormal(dataSet):
'''
数据集归一化处理
归一化是因为数据集中的‘每个月飞行里程数远大于其他的特征参数’,通过归一化
处理后可以将不同的特征数值转化为0-1之间的数值
'''
#step01:获取每一列的最小值和最大值
minValue = dataSet.min(0)
maxValue = dataSet.max(0)
#step02:最大值与最小值之间做差
diffValue = maxValue -minValue
#step03:新建一个等shape的矩阵,存放归一化后的数据
normalDataMat = np.zeros(dataSet.shape)
#step04:计算归一化后的矩阵
m = dataSet.shape[0]
normalDataMat = dataSet - np.tile(minValue,(m,1))
normalDataMat = normalDataMat/(np.tile(diffValue,(m,1)))
return normalDataMat,diffValue,minValue
def classTest():
'''
将原始数据的10%用作测试数据,其余90%用作训练数据
'''
testRatio = 0.10 #测试数据集比例10%
#导入数据归一化处理
path = "E:\\1\ML\ML Data\machinelearninginaction\Ch02\datingTestSet.txt"
testDataMat,testDataLabel = readFile(path)
norData,diffVal,minVal = autoNormal(testDataMat)
#确定测试集数目
m = norData.shape[0]#数据集的行数,代表数据大小
numTestDataset = int(m*testRatio)#测试数据集大小
#错误率
errorRatio = 0.0
#
print(norData)
#
for i in range(numTestDataset):
classifyResult = classify(norData[i,:],norData[numTestDataset:m,:],testDataLabel[numTestDataset,m],3)
print("分类器返回值:%d,真实的结果应该是:%d" % (classifyResult,testDataLabel[i]))
if (classifyResult != testDataLabel[i]):
errorRatio += 1.0
print(errorRatio)
classTest()
KNN算法的代码实现的更多相关文章
- 机器学习——KNN算法(k近邻算法)
一 KNN算法 1. KNN算法简介 KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分 ...
- 机器学习之KNN算法
1 KNN算法 1.1 KNN算法简介 KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属 ...
- 运用kNN算法识别潜在续费商家
背景与目标 Youzan 是一家SAAS公司,服务于数百万商家,帮助互联网时代的生意人私有化顾客资产.拓展互联网客群.提高经营效率.现在,该公司希望能够从商家的交易数据中,挖掘出有强烈续费倾向的商家, ...
- k-近邻算法python代码实现(非常全)
1.k近邻算法是学习机器学习算法最为经典和简单的算法,它是机器学习算法入门最好的算法之一,可以非常好并且快速地理解机器学习的算法的框架与应用.它是一种经典简单的分类算法,当然也可以用来解决回归问题.2 ...
- 算法代码[置顶] 机器学习实战之KNN算法详解
改章节笔者在深圳喝咖啡的时候突然想到的...之前就有想写几篇关于算法代码的文章,所以回家到以后就奋笔疾书的写出来发表了 前一段时间介绍了Kmeans聚类,而KNN这个算法刚好是聚类以后经常使用的匹配技 ...
- KNN算法java实现代码注释
K近邻算法思想非常简单,总结起来就是根据某种距离度量检测未知数据与已知数据的距离,统计其中距离最近的k个已知数据的类别,以多数投票的形式确定未知数据的类别. 一直想自己实现knn的java实现,但限于 ...
- kNN算法基本原理与Python代码实践
kNN是一种常见的监督学习方法.工作机制简单:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k各训练样本,然后基于这k个“邻居”的信息来进行预测,通常,在分类任务中可使用“投票法”,即选择这k ...
- KNN算法原理(python代码实现)
kNN(k-nearest neighbor algorithm)算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性 ...
- 具体knn算法概念参考knn代码python实现
具体knn算法概念参考knn代码python实现上面是参考<机器学习实战>的代码,和knn的思想 # _*_ encoding=utf8 _*_ import numpy as npimp ...
随机推荐
- 8Manage:物流CRM,深度挖掘快递企业下一站蓝海!
[导读]网购的普及加快了快递物流服务在中国的发展,而物流行业也开始展露出自身巨大的发展潜力和进步空间.其中,作为物流行业根本核心的物流客户关系管理开始引起了管理者的注意,如何升级用户物流服务体验,把握 ...
- highCharts实现简单柱形图
js: function chart(data,title){ $('#container').highcharts({ chart: { type: 'bar' }, title: { text: ...
- 关于使用Ajax请求json数据,@RequestMapping返回中文乱码的几种解决办法
一.问题描述: 使用ajax请求json数据的时候,无论如何返回的响应编码都是ISO-8859-1类型,因为统一都是utf-8编码,导致出现返回结果中文乱码情况. $.ajax({ type:&quo ...
- 伯克利推出世界最快的KVS数据库Anna:秒杀Redis和Cassandra
天下武功,唯快不破. 伯克利 RISE 实验室推出了最新的键值存储数据库 Anna,提供了惊人的存取速度.超强的伸缩性和史无前例的一致性保证.Jeff Dean 说,当一个系统增长到十倍规模时,就需要 ...
- github远程仓库初始化配置
github远程仓库的提交一般是通过shell进行,windows下有Git Bash工具(https://git-for-windows.github.io/) 由于本地Git仓库和GitHub仓库 ...
- linux 记录用户操作日志
将以下加入到/etc/profile 最后 history USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]/ ...
- php文件上传原理详解(含源码)
1.文件上传原理 将客户端的文件上传到服务器,再将服务器的临时文件上传到指定目录 2.客户端配置 提交表单 表单的发送方式为post 添加enctype="multipart/form-da ...
- 解决新电脑的系统安装问题:针对BIOS的UEFI模式
安装win7或win8系统时UEFI和Legacy模式的设置 新的的笔记本或台式机主板都开始支持UEFI模式,不过这种模式让很多打算给电脑换win7或win8的用户头疼不已,尤其是笔记本用户. ...
- SoupUI安装
(仅供学习,严禁用于商业应用) 今天开始在公司需要做websocket接口测试,以前从来没有接触过,对美好生活充满了向往啊,今天从安装开始吧! 至于什么是websocket自行百度,我也是百度出来的, ...
- python自学日志--基础篇(1)
从认识python,到学习python,中间经历了挺长一段时间的心理挣扎.人总是对未知的事物有着天生的恐惧感,但是,人又是对未知充斥好奇.所以在最后,还是推开了这扇门,开始学习python. pyth ...