# -*- 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算法的代码实现的更多相关文章

  1. 机器学习——KNN算法(k近邻算法)

    一 KNN算法 1. KNN算法简介 KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分 ...

  2. 机器学习之KNN算法

    1 KNN算法 1.1 KNN算法简介 KNN(K-Nearest Neighbor)工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属 ...

  3. 运用kNN算法识别潜在续费商家

    背景与目标 Youzan 是一家SAAS公司,服务于数百万商家,帮助互联网时代的生意人私有化顾客资产.拓展互联网客群.提高经营效率.现在,该公司希望能够从商家的交易数据中,挖掘出有强烈续费倾向的商家, ...

  4. k-近邻算法python代码实现(非常全)

    1.k近邻算法是学习机器学习算法最为经典和简单的算法,它是机器学习算法入门最好的算法之一,可以非常好并且快速地理解机器学习的算法的框架与应用.它是一种经典简单的分类算法,当然也可以用来解决回归问题.2 ...

  5. 算法代码[置顶] 机器学习实战之KNN算法详解

    改章节笔者在深圳喝咖啡的时候突然想到的...之前就有想写几篇关于算法代码的文章,所以回家到以后就奋笔疾书的写出来发表了 前一段时间介绍了Kmeans聚类,而KNN这个算法刚好是聚类以后经常使用的匹配技 ...

  6. KNN算法java实现代码注释

    K近邻算法思想非常简单,总结起来就是根据某种距离度量检测未知数据与已知数据的距离,统计其中距离最近的k个已知数据的类别,以多数投票的形式确定未知数据的类别. 一直想自己实现knn的java实现,但限于 ...

  7. kNN算法基本原理与Python代码实践

    kNN是一种常见的监督学习方法.工作机制简单:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k各训练样本,然后基于这k个“邻居”的信息来进行预测,通常,在分类任务中可使用“投票法”,即选择这k ...

  8. KNN算法原理(python代码实现)

    kNN(k-nearest neighbor algorithm)算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性 ...

  9. 具体knn算法概念参考knn代码python实现

    具体knn算法概念参考knn代码python实现上面是参考<机器学习实战>的代码,和knn的思想 # _*_ encoding=utf8 _*_ import numpy as npimp ...

随机推荐

  1. ssh框架中struts.xml 的配置参数详解

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "- ...

  2. 题目1031:xxx定律

    题目描述: 对于一个数n,如果是偶数,就把n砍掉一半:如果是奇数,把n变成 3*n+ 1后砍掉一半,直到该数变为1为止. 请计算需要经过几步才能将n变到1,具体可见样例. 输入: 测试包含多个用例,每 ...

  3. 设计模式——享元模式(C++实现)

    #include <iostream> #include <string> #include <map> #include <vector> #incl ...

  4. sort命令与cat区别25.1 由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile [root@shiyan a]# cat a.txt aaaaaa [root@shiyan a]# sort a.txt >c.txt ------------- 在重定向前会自动创建c.txt这个文件。 [root@shiyan

    25.1 由于sort默认是把结果按照行排序后输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile[root@shiyan a]# cat a. ...

  5. 针对微信的一篇推送附有的数据链接进行MapReduce统计

    原推送引用:https://mp.weixin.qq.com/s/3qQqN6qzQ3a8_Au2qfZnVg 版权归原作者所有,如有侵权请及时联系本人,见谅! 原文采用Excel进行统计数据,这里采 ...

  6. Spring Clould负载均衡重要组件:Ribbon中重要类的用法

    Ribbon是Spring Cloud Netflix全家桶中负责负载均衡的组件,它是一组类库的集合.通过Ribbon,程序员能在不涉及到具体实现细节的基础上"透明"地用到负载均衡 ...

  7. 排序算法Java实现(快速排序)

    算法描述:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前一部分的所有记录均比后一部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均有序为止. ...

  8. Jmeter4.0----安装教程(2)

    1.检查安装环境 1.1 JDK要求 JDK版本:1.6 + 1.2 检查是否安装JDK win + R 快捷键打开运行,输入 cmd 打开面板,在面板中输入 java -version,出现如下信息 ...

  9. 控制input只能输入数字和两位小数

    <input type="text" name="je" onkeyup="clearNoNum(this)" /> funct ...

  10. java.lnag.Throwable详细解读

    public  class Throwable  extends  Object  implemnts Serializable Throwable类是所有错误或异常的超类.只有当对象是此类(或其中之 ...