分别实现了最基本的3个DEMO

1.给你若干个带有标签的二维点作为训练集,给定一系列的二维随机点,看其通过训练集,可以被分为哪一类

2.给你N个人的飞行里程数,玩游戏消耗时间百分比和每周消耗冰激凌的公升数,来判断妹子对这个人的兴趣如何。

3.识别二进制文件所对应的0-9的数字是多少。

# -*- coding: utf-8 -*-
"""
照葫芦画瓢完成与2017.4.14 20:21
算法名称 : K近邻算法
参数: 测试集数据(维度 1 * N)训练集数据(维度 M * N)即有M个训练集,其每个训练集的维度跟测试集的每个子测试集维度一样为1*N标签(维度1 * M)为每一个训练集所对应的标签,共M个训练集
输出:测试集中每个测试集所对应的分类
算法整体思路:1.对于每个测试集的子测试集跟训练集进行比对,计算子测试集向量和训练集所有向量的差的平方的和,开根号获取其对应的距离矩阵例如一个子测试集为一个1*3的矩阵[x,y,z] 训练集为3*3的分别是[x1,y1,z1] [x2,y2,z2] [x3,y3,z3]则距离分别为 dis1 = sqrt((x - x1)**2 + (y-y1)**2) dis2 = sqrt((x - x2)**2 + (y-y2)**2) dis3 = sqrt((x - x3)**2 + (y-y3)**2)2.按照距离矩阵的升序排序,返回对应的下标。例如dis2 > dis1 > dis3则返回下标为 3 1 23.选取K个,获取其对应的标签,然后进行累加,降序排序获取出现最多的标签次数。例如 返回下标为3 1 4 7 5 6 2那么我们取K = 4,则我们去看labels[3] labels[1] labels[4] labels[7]所对应的标签,并对其对应的标签进行累加比如labels[3] = labels[7] ='A' labels[1] = 'B' labels[4] ='C'则我们获取的标签次数并按降序排序则为2 1 1发现A出现次数最多,则将其测试集分类为A,算法结束
作者:zzt941006
"""
from numpy import * #导入科学计算包
import operator #导入运算符模块
#导入以上两个是为了能够在K近邻算法中执行相关包中的函数
#import sys
#sys.path.append('c:\Python27\kNN.py') # 这个例子针对 windows 用户来说的
from os import listdir#列出给定文件目录名
def createDataSet():  group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])  labels = ['A','A','B','B']  return group,labels
def classify0(inX,dataSet,labels,k):  dataSetSize = dataSet.shape[0]  # print tile(inX,(dataSetSize,1))diffMat = tile(inX,(dataSetSize,1)) - dataSet  #计算输入向量与每个数据的差,构成一个二维矩阵#print diffMatsqDiffMat = diffMat**2  #print sqDiffMatsqDistances = sqDiffMat.sum(axis = 1) #求相对应向量的平方的和 #print sqDistancesdistances = sqDistances**0.5  # print distancessortedDistIndicies = distances.argsort()  #按照距离的小到大排序,返回对应下标#  print sortedDistIndiciesclassCount = {}  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)  #print sortedClassCountreturn sortedClassCount[0][0]
def file2matrix(filename):fr = open(filename)arrayOLines = fr.readlines()#按行读文件numberOfLines = len(arrayOLines)#获取文件行数 returnMat = zeros((numberOfLines,3)) #创建返回的矩阵classLabelVector = []index = 0for line in arrayOLines:line = line.strip()#截掉文件中的回撤字符listFromLine = line.split('\t')#使用\t讲上一步得到的整行的数据分割成一个元素列表returnMat[index,:] = listFromLine[0:3]#获取前3个元素classLabelVector.append(int(listFromLine[-1]))index += 1return returnMat,classLabelVector
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))#遍历每一列求出原值与最小值的差normDataSet = normDataSet / tile(ranges,(m,1))#遍历每一列获取归一化的结果return normDataSet,ranges,minVals#返回归一化矩阵,极差矩阵和最小值矩阵
def datingClassTest():hoRatio = 0.1      datingDataMat,datingLabels = file2matrix('datingTestSet2.txt')       normMat, ranges, minVals = autoNorm(datingDataMat)m = normMat.shape[0]numTestVecs = int(m*hoRatio)#获取测试集 0 -> m*hoRatio故训练集为m*hoRation -> merrorCount = 0.0for i in range(numTestVecs):classifierResult = classify0(normMat[i,:],normMat[numTestVecs:m,:],datingLabels[numTestVecs:m],3)print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, datingLabels[i])if (classifierResult != datingLabels[i]): errorCount += 1.0print "the total error rate is: %f" % (errorCount/float(numTestVecs))print errorCount
def classifyPerson():  resultList=['not at all','in small doses','in large doses']  datingDataMat,datinglabels=file2matrix('datingTestSet2.txt')  percentTats = float(raw_input("percentage of time spent playing video games?"))ffMiles = float(raw_input("frequent flier miles earned per year?"))iceCream = float(raw_input("liters of ice cream consumed per year?"))datingDataMat,datingLabels =file2matrix('datingTestSet2.txt')normMat,ranges,minVals = autoNorm(datingDataMat)inArr = array([ffMiles,percentTats,iceCream])classifierResult = classify0((inArr-minVals)/ranges,normMat,datingLabels,3)print "You will probably like this person: ",resultList[classifierResult-1]
def img2vector(filename):returnVect = zeros((1,1024));#将32*32的二进制图像转化为1*1024维度的矩阵fr = open(filename)for i in range(32):lineStr = fr.readline()# print lineStrfor j in range(32):returnVect[0,32*i+j] = int(lineStr[j])#第一行为0-31 第二行加在后面为32-63....直到第32行的32个数字映射为 992-1023return returnVect
def handwritingClassTest():hwLabels = []trainingFileList = listdir('trainingDigits')#获取所有的训练集文件m = len(trainingFileList)#训练集个数trainingMat = zeros((m,1024))#训练集矩阵维度为个数*1024'''for i in range (m):fileNameStr = trainingFileList[i]fileStr = fileNameStr.spilt('.')[0]classNumStr = int(fileStr.spilt('_')[0])hwLabels.append(classNumStr)trainingMat[i,:] = im2vector('trainingDigits/%s' % fileNameStr)'''for i in range(m):fileNameStr = trainingFileList[i]#取每一个文件fileStr = fileNameStr.split('.')[0]     #获取.txt之前的信息classNumStr = int(fileStr.split('_')[0])#获取'_'之前的信息(即它代表数字几)hwLabels.append(classNumStr)trainingMat[i,:] = img2vector('trainingDigits/%s' % fileNameStr)#第i个文件的1*1024的格式testFileList = listdir('testDigits')errorCount = 0.0mTest = len(testFileList)for i in range(mTest):fileNameStr = testFileList[i]fileStr = fileNameStr.split('.')[0]classNumStr = int(fileStr.split('_')[0])vectorUnderTest = img2vector('testDigits/%s' % fileNameStr)#获取每个测试集文件格式classifierResult = classify0(vectorUnderTest,trainingMat,hwLabels,3)#丢进kNN中让当前的测试集跟所有的训练集格式去跑3近邻,通过打分来获取它最像谁print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, classNumStr)if (classifierResult != classNumStr): errorCount += 1.0print "\nthe total number of errors is: %d" % errorCountprint "\nthe total error rate is: %f" % (errorCount/float(mTest))

机器学习实战第二章K近邻算法照葫芦画瓢实践。相关推荐

  1. 【机器学习入门】(1) K近邻算法:原理、实例应用(红酒分类预测)附python完整代码及数据集

    各位同学好,今天我向大家介绍一下python机器学习中的K近邻算法.内容有:K近邻算法的原理解析:实战案例--红酒分类预测.红酒数据集.完整代码在文章最下面. 案例简介:有178个红酒样本,每一款红酒 ...

  2. 机器学习7更多关于k近邻算法的思考

    文章目录 一.一些总结 1.缺点1: 2.优化: 3.缺点2: 4.缺点3: 5.缺点4: 二.机器学习流程回顾 一.一些总结 k近邻算法是一个解决分类问题的算法,天然可以解决多分类问题: 不仅如此, ...

  3. 机器学习7/100天-K近邻算法

    Day7 K近邻算法 github: 100DaysOfMLCode What is K-NN k近邻算法是常用的简单分类算法也可用于回归问题. KNN是一个无参的(不需要对数据分布做任何假设).基于 ...

  4. 机器学习实战第二章——KNN算法(源码解析)

    机器学习实战中的内容讲的都比较清楚,一般都能看懂,这里就不再讲述了,这里主要是对代码进行解析,如果你很熟悉python,这个可以不用看. #coding=utf-8 ''' Created on 20 ...

  5. 机器学习实战读书笔记--k邻近算法KNN

    k邻近算法的伪代码: 对未知类别属性的数据集中的每个点一次执行以下操作: (1)计算已知类别数据集中的点与当前点之间的距离: (2)按照距离递增次序排列 (3)选取与当前点距离最小的k个点 (4)确定 ...

  6. 【机器学习】sklearn机器学习入门案例——使用k近邻算法进行鸢尾花分类

    1 背景 这个案例恐怕已经被说的很烂了,机器学习方面不同程度的人对该案例还是有着不同的感觉.有的人追求先理解机器学习背后的理论甚至自己推导一遍相关数学公式,再用代码实现:有的人则满足于能够实现相关功能 ...

  7. 机器学习实战-第二章代码+注释-KNN

    #-*- coding:utf-8 -*- #https://blog.csdn.net/fenfenmiao/article/details/52165472 from numpy import * ...

  8. 机器学习第七章之K近邻算法

    K近邻算法(了解) 7.1 K近邻算法 7.1.1 K近邻算法的原理介绍 7.1.2 K近邻算法的计算步骤及代码实现 7.2 数据预处理之数据归一化 7.2.1 min-max标准化 7.2.2 Z- ...

  9. 【机器学习】原理与实现k近邻算法

    文章目录 系列文章目录 前言 一.k近邻算法是什么? 二.使用步骤 1.引入库 2.读入数据 总结 前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了 ...

最新文章

  1. 如何用matlab读取npz文件,Python Numpy中数据的常用的保存与读取方法
  2. 工程名.xcodeproj 里面的project.pbxproj
  3. SyntaxError: invalid syntax的问题原因和解决办法
  4. 生产订单新增按钮没权限
  5. layui登录页面写入数据_layui 页面保存数据
  6. webpack入门进阶调优第一章
  7. 特斯拉副总裁陶琳:Model Y 本月开始陆续交付
  8. 防止电子眼拍到车牌的秘籍
  9. xadmin可能是帮助我完成django网站的一大助力
  10. (十一)【数电】(组合逻辑电路)数据分配器和数据选择器
  11. anaconda配置清华镜像源
  12. no valid sudoers sources found, quitting ubuntu 16.04 devstack
  13. vue引入阿里巴巴图标(含彩色图标)
  14. Unity Shader入门精要第四章:学习Shader 所需的数学基础--坐标空间
  15. js中的yield、yield*和Generator函数
  16. correl函数相关系数大小意义_correl(correl函数相关系数大小意义)
  17. 拿下人脸识别“世界杯”冠军!松下-NUS 和美国东北大学实战分享
  18. IPD思想指导下的企业研发管理成熟度演进模型
  19. Nacos出现重大安全漏洞,开源项目险遭脱库
  20. Android集成阿里消息推送

热门文章

  1. 实现QQ主界面效果[图] 1
  2. 那个割肾换iPhone的男生,现在怎么样了?
  3. 内网利用 django 及 pyecharts 做数据分析展示
  4. 实验十八 Spark实验:Spark Streaming
  5. 华为荣耀10青春版2G电话打不出去信号不稳定红警快修教你搞定
  6. 人机交互理论二:认知过程与交互设计原则
  7. 计算机手抄报简单字少,消防安全手抄报多画少字又漂亮
  8. 头部UP主的赚钱方法,都在这里了
  9. 计算机领域相关属术语,基于语义规则和关联规则的特定领域中文术语字典的构造...
  10. 使用wandb可视化Scikit-Learn模型