------------恢复内容开始------------

 # -*- coding: utf-8 -*-
"""
Created on Thu Nov 14 19:29:08 2019 @author: HTING
""" # 导入科学计算包模块
import numpy as np # 导入运算符模块
import operator # =============================================================================
# # 导入 os 模块
# import os
# ============================================================================= # 创建数据集和标签
def createDataSet():
group = np.array([[1.0, 1.1],
[1.0, 1.0],
[0, 0],
[0, 0.1]])
labels = ('A', 'A', 'B', 'B') return group, labels ''' Parameters: inX - 用于分类的数据(测试集)
dataSet - 用于训练的数据(训练集)
labes - 训练数据集的label
k - 选择距离最小的k个点 return: sortedClassCount[0][0] - 输入数据的预测分类 ''' # k-近邻算法 def classify0(inX, k): # import dataSet, labels
dataSet, labels = createDataSet() # 计算距离
# A.shape[i] : 第i维的长度
dataSetSize = dataSet.shape[0] # 用tile将输入向量复制成和数据集一样大的矩阵
'''
np.tile(A, reps) :
数组A重复一定次数获得新数组;
A - array, list, tuple, dict, matrix
以及基本数据类型int, string, float以及bool类型;
reps - tuple,list, dict, array, int, bool.
但不可以是float, string, matrix类型; np.tile(A,(m,n)):
数组A重复n次 --> nA; # A重复n次
nA --> m[nA]. # m 维的nA
'''
diffMat = np.tile(inX, (dataSetSize,1)) - dataSet
sqDiffMat = diffMat ** 2 '''
In Numpy dimensions are called axes.
The number of axes is rank. '''
sqDistances = sqDiffMat.sum(axis=1)
# sqDistances = np.sum(sqDiffMat, axis=1) distances = sqDistances ** 0.5 # 按距离从小到大排序,并返回相应的索引位置
# A.argsort()[]
sortedDistIndicies = distances.argsort() # 创建一个字典,存储标签和出现次数
classCount = {} # 选择距离最小的k个点
for i in range(k):
'''
for i in range(m,n,z) | range(start, stop, step)
i <--> m -> n-1, step = z;
default: m = 0, z = 1
'''
# 查找样本的标签类型
voteIlabel = labels[sortedDistIndicies[i]] # 在字典中给找到的样本标签类型+1
'''
若不存在voteIlabel,
则字典classCount中生成voteIlabel元素,并使其对应的数字为0 :
: classCount = {voteIlabel:0}
此时classCount.get(voteIlabel,0)作用是检测并生成新元素,括号中的0只用作初始化,之后再无作用;
当字典中有voteIlabel元素时,
classCount.get(voteIlabel,0)作用是返回该元素对应的值
'''
classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1 # 排序并返回出现次数最多的标签类型
'''
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
cmp -- accept function;
key -- accept one element of one function, which is function return ,
the weight to sort;
reverse -- True -> positive order;
False -> negative order; operator.itemgetter()
用于获取对象的哪些维的数据,参数为一些序号。
注,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。
'''
sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1), reverse=True) return sortedClassCount[0][0] 129
130
 

Machine Learning in Action ---- kNN的更多相关文章

  1. 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)

    机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...

  2. Machine Learning In Action 第二章学习笔记: kNN算法

    本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数 ...

  3. 学习笔记之机器学习实战 (Machine Learning in Action)

    机器学习实战 (豆瓣) https://book.douban.com/subject/24703171/ 机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中 ...

  4. 《Machine Learning in Action》—— 懂的都懂,不懂的也能懂。非线性支持向量机

    说在前面:前几天,公众号不是给大家推送了第二篇关于决策树的文章嘛.阅读过的读者应该会发现,在最后排版已经有点乱套了.真的很抱歉,也不知道咋回事,到了后期Markdown格式文件的内容就解析出现问题了, ...

  5. 《Machine Learning in Action》—— 白话贝叶斯,“恰瓜群众”应该恰好瓜还是恰坏瓜

    <Machine Learning in Action>-- 白话贝叶斯,"恰瓜群众"应该恰好瓜还是恰坏瓜 概率论,可以说是在机器学习当中扮演了一个非常重要的角色了.T ...

  6. 《Machine Learning in Action》—— 浅谈线性回归的那些事

    <Machine Learning in Action>-- 浅谈线性回归的那些事 手撕机器学习算法系列文章已经肝了不少,自我感觉质量都挺不错的.目前已经更新了支持向量机SVM.决策树.K ...

  7. 《Machine Learning in Action》—— Taoye给你讲讲Logistic回归是咋回事

    在手撕机器学习系列文章的上一篇,我们详细讲解了线性回归的问题,并且最后通过梯度下降算法拟合了一条直线,从而使得这条直线尽可能的切合数据样本集,已到达模型损失值最小的目的. 在本篇文章中,我们主要是手撕 ...

  8. K近邻 Python实现 机器学习实战(Machine Learning in Action)

    算法原理 K近邻是机器学习中常见的分类方法之间,也是相对最简单的一种分类方法,属于监督学习范畴.其实K近邻并没有显式的学习过程,它的学习过程就是测试过程.K近邻思想很简单:先给你一个训练数据集D,包括 ...

  9. 【机器学习实战】Machine Learning in Action 代码 视频 项目案例

    MachineLearning 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远 Machine Learning in Action (机器学习实战) | ApacheCN(apa ...

随机推荐

  1. Reportviewer拖到winform不显示控件

    Vs2017使用的是rdlc Microsoft.ReportingServices.ReportViewerControl.Winforms.140.340.80版本的,但是NuGet默认安装的是最 ...

  2. 虚拟机上安装centos8.0

    一.准备宿主机 为了培训Hadoop生态的部署和调优技术,需要准备3台虚拟机部署Hadoop集群环境,能够保证HA,即主要服务没有单点故障,可执行基本功能,完成小内存模式的参数调整. 1.1.准备安装 ...

  3. Cocos Creator 通用框架设计 —— 资源管理

    如果你想使用Cocos Creator制作一些规模稍大的游戏,那么资源管理是必须解决的问题,随着游戏的进行,你可能会发现游戏的内存占用只升不降,哪怕你当前只用到了极少的资源,并且有使用cc.loade ...

  4. TensorFlow2.0(7):激活函数

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  5. lua多线程解决方案

    直观的讲:lua并不支持多线程,lua语言本身具有携程功能,但携程仅仅是一种中继器. lua多线程的目的:有并发需求时,共享一些数据. 例如使用lua写一个并发服务器.用户登陆之后,用户数据储存在lu ...

  6. 虚拟机桥接模式下将虚拟IP设为静态IP

    一:虚拟机设置桥接模式 1.进入虚拟机设置中将网络适配器设置成桥接模式,如下图 2.编辑--虚拟网络编辑器--选择桥接 3.如上图中桥接模式下的桥接到--将自动改成与本机匹配的虚拟网卡,本机虚拟网卡查 ...

  7. LeetCode初级算法--链表02:合并两个有序链表

    LeetCode初级算法--链表02:合并两个有序链表 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...

  8. 那些你不知道的HTML知识,快来学习一下吧

    前言 HTML作为前端三大基础知识点之一,是每一个前端开发人员都要掌握的部分.今天这篇文章我们来看看一些平时不太会注意,却在面试时可能会问到的题目,来看看你都会吗? 如何使用div模拟实现textar ...

  9. [LUOGU1868] 饥饿的奶牛 - dp二分

    题目描述 有一条奶牛冲出了围栏,来到了一处圣地(对于奶牛来说),上面用牛语写着一段文字. 现用汉语翻译为: 有N个区间,每个区间x,y表示提供的x~y共y-x+1堆优质牧草.你可以选择任意区间但不能有 ...

  10. ‎Cocos2d-x 学习笔记(3.3) Layer

    1.简介 Layer直接继承了Node.Layer类似Ps里图层的概念,也可以理解成一块透明玻璃.Scene类似Ps里的一张图像,也可以理解成堆放玻璃的箱子. Layer能接收触摸事件.键盘事件.加速 ...