《机器学习实战》知识点笔记目录 

K-近邻算法(KNN)思想:

1,计算未知样本与所有已知样本的距离

2,按照距离递增排序,选前K个样本(K<20)

3,针对K个样本统计各个分类的出现次数,取最大次数的分类为未知样本的分类

函数classify0虽然只有短短的几行代码,涉及的知识点却非常多,具体的知识点整理如下:

一、程序清单2-1笔记
1,shape函数
shape函数是numpy.core.fromnumeric中的函数,它的功能是查看矩阵或者数组的维数。
比如:
group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
print(group)
print(group.shape)
print("group.shape[0]=%d" % group.shape[0])
结果如下:

dataset如下:
[[ 1. 1.1]
[ 1. 1. ]
[ 0. 0. ]
[ 0. 0.1]]
(4, 2)
group.shape[0]=4

2,tile函数
tile(数组,(在行上重复次数,在列上重复次数))
比如:
array1 = [1,2,3]
print(tile(array1,(2,1)))
print(tile(array1,(1,2)))
print(tile(array1,(2,2)))

结果如下:

[[1 2 3]
[1 2 3]]
[[1 2 3 1 2 3]]
[[1 2 3 1 2 3]
[1 2 3 1 2 3]]

3,sum函数.sum(axis=1)
我们平时用的sum应该是默认的axis=0 就是普通的相加
当加入axis=1以后就是将一个矩阵的每一行向量相加
如:
array2 = [[0,1,2],[0,3,4]]
print(sum(array2,axis=1))
print("\n")
结果如下:

[3 7]

4,sort函数和argsort函数
sort函数按照数组值从小到大排序
argsort函数返回的是数组值从小到大的索引值
如:
array3 = [3,2,1]
print(argsort(array3))
print(sort(array3))
print("\n")

结果如下:

[2 1 0]
[1 2 3]

5,字典get方法的参数k的意义
dic.get(key,k) = dic.get(key,默认值)
k的含义是:当字典dic中不存在key时,返回默认值k;存在时返回key对应的值
如下:

dic1 = {"A": 1, "B": 2, "C": 3}
print("dic 测试")
print(dic1.get("C",0))
print(dic1.get("D", 0))
print(dic1.get("E", 1))

结果如下:

dic 测试
3
0
1

6,字典的iteritems函数:
注意:python3中dict不存在iteritems,python2中存在
可以使用items代替

dic1 = {"A": 1, "B": 2, "C": 3}
print("测试字典的Item")
print( dic1.items() )
# python3中dict不存在iteritems 'dict' object has no attribute 'iteritems'
#print( dic1.iteritems())

测试结果如下:

测试字典的Item
dict_items([('A', 1), ('B', 2), ('C', 3)])

7,operator.itemgetter定义一个函数
operator.itemgetter(k)定义一个函数,返回第k个域的值
比如:

print("测试operator.itemgetter")
a=[1,2,3]
b=operator.itemgetter(2) #定义函数b,获取对象的第一个域的值
print(b(a))
b=operator.itemgetter(1,0)#定义函数b,获取对象的第1个域和第0个域的值
print(b(a))

测试结果:

测试operator.itemgetter
3
(2, 1)

二、所有的测试代码:
from numpy import *
import operator

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

### test ##########################
group,labels = createDataSet()
print("dataset如下:")
print(group)
print(group.shape)
print("group.shape[0]=%d" % group.shape[0])
print("\n")

print(labels )
print("\n")

array1 = [1,2,3]
print(tile(array1,(2,1)))
print(tile(array1,(1,2)))
print(tile(array1,(2,2)))
print("\n")

array2 = [[0,1,2],[0,3,4]]
print(sum(array2,axis=1))
print("\n")

array3 = [3,2,1]
print(argsort(array3))
print(sort(array3))
print("\n")

dic1 = {"A": 1, "B": 2, "C": 3}
print("dic 测试")
print(dic1.get("C",0))
print(dic1.get("D", 0))
print(dic1.get("E", 1))

#测试字典的Item
print("测试字典的Item")
print( dic1.items() )
# python3中dict不存在iteritems 'dict' object has no attribute 'iteritems'
#print( dic1.iteritems())
print("\n")

#测试operator.itemgetter
print("测试operator.itemgetter")
a=[1,2,3]
b=operator.itemgetter(2) #定义函数b,获取对象的第一个域的值
print(b(a))
b=operator.itemgetter(1,0)#定义函数b,获取对象的第1个域和第0个域的值
print(b(a))

######函数定义

def classify0(inX,dataSet,labels,k):
dataSetSize = dataSet.shape[0]
diffMat = tile(inX,(dataSetSize,1)) - dataSet
print("diffMat")
print(diffMat)
print("\n")

sqDiffMat = diffMat ** 2
print("sqDiffMat")
print(sqDiffMat)
print("\n")

sqDistances = sqDiffMat.sum(axis=1)
print("sqDistances")
print(sqDistances)
print("\n")

distances = sqDistances ** 0.5
print("distances")
print(distances)
print("\n")

sortedDistIndicies = distances.argsort()
print("sortedDistIndicies")
print(sortedDistIndicies)
print("\n")

#统计前K个样本,各个label出现的次数
classCount = {}
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]
print("i=%s sortedDistIndicies[i]=%s voteIlabel=%s" % (i,sortedDistIndicies[i],voteIlabel) )
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
print(classCount)

print("\n")
sortedClassCount = sorted(classCount.items(), key = operator.itemgetter(1),reverse=True)
print("sortedClassCount")
print(sortedClassCount)
print("\n")

print("返回的分类为:%s",sortedClassCount[0][0])
return sortedClassCount[0][0]

print("开始执行分类函数.............")
classify0([0,0],group,labels,3)

三、运行结果如下:
"D:\Program Files\Python36\python.exe" E:/Code/Python/MachineLearningInAction/chapter02_KNN/kNN.py
dataset如下:
[[ 1. 1.1]
[ 1. 1. ]
[ 0. 0. ]
[ 0. 0.1]]
(4, 2)
group.shape[0]=4

['A', 'A', 'B', 'B']

[[1 2 3]
[1 2 3]]
[[1 2 3 1 2 3]]
[[1 2 3 1 2 3]
[1 2 3 1 2 3]]

[3 7]

[2 1 0]
[1 2 3]

dic 测试
3
0
1
测试字典的Item
dict_items([('A', 1), ('B', 2), ('C', 3)])

测试operator.itemgetter
3
(2, 1)
开始执行分类函数.............
diffMat
[[-1. -1.1]
[-1. -1. ]
[ 0. 0. ]
[ 0. -0.1]]

sqDiffMat
[[ 1. 1.21]
[ 1. 1. ]
[ 0. 0. ]
[ 0. 0.01]]

sqDistances
[ 2.21 2. 0. 0.01]

distances
[ 1.48660687 1.41421356 0. 0.1 ]

sortedDistIndicies
[2 3 1 0]

i=0 sortedDistIndicies[i]=2 voteIlabel=B
{'B': 1}
i=1 sortedDistIndicies[i]=3 voteIlabel=B
{'B': 2}
i=2 sortedDistIndicies[i]=1 voteIlabel=A
{'B': 2, 'A': 1}

sortedClassCount
[('B', 2), ('A', 1)]

返回的分类为:%s B

Process finished with exit code 0

《机器学习实战》知识点笔记目录

转载于:https://www.cnblogs.com/wang7/p/8158270.html

第2章KNN算法笔记_函数classify0相关推荐

  1. (视频+图文)机器学习入门系列-第7章 KNN算法

    机器学习入门系列,黄海广老师主讲.本站将持续更新,ppt.代码.课后习题见文末. 本系列的目录 01.引言 02.回归 03.逻辑回归 04.朴素贝叶斯 05.机器学习实践 06.机器学习库Sciki ...

  2. 回溯 皇后 算法笔记_算法笔记_04_回溯

    设计思想: (1)适用:求解搜索问题和优化问题. (2)搜索空间:数,节点对应部分解向量,可行解在树叶上. (3)搜索过程:采用系统的方法隐含遍历搜索树. (4)搜索策略:深度优先,宽度优先,函数优先 ...

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

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

  4. 回溯 皇后 算法笔记_回溯算法:N皇后问题

    给「代码随想录」一个星标吧! ❝ 通知:我将公众号文章和学习相关的资料整理到了Github :https://github.com/youngyangyang04/leetcode-master,方便 ...

  5. Shader学习笔记_函数探索_tex2D(sampler2D tex, float2 s)

    half4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Alpha = c.a; tex2D(sampler2D tex, flo ...

  6. 【数据科学】kNN算法笔记

    kNN的主要思想:根据某个对象的属性值找到相似的对象们,让对象们一起投票决定这个对象属于哪一类. 这里银行的信息是,根据属性值找到的对象们,并不是来源于一个类,如果是一个类的话,直接将这个待分类对象归 ...

  7. 回溯 皇后 算法笔记_什么叫回溯算法,一看就会,一写就废

    什么叫回溯算法 对于回溯算法的定义,百度百科上是这样描述的:回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就"回溯"返回, ...

  8. 回溯 皇后 算法笔记_算法笔记-回溯法

    (1)0-1背包问题 思路:构造一个二叉树,每个商品都有两种状态,要或者不要.如果要就在这个节点的左枝挂子节点,如果不要就在右节点挂子节点.如果全部商品都分配完状态之后就回溯,回溯到一个还有其他选择的 ...

  9. 算法笔记_图算法专题_关键路径 AOV网和AOE网

    关键路径 1.基本概念 1.AOV网:顶点活动网,是指用顶点表示活动,而用边集表示活动优先关系的有向无环图. 2.AOE网:边活动网,是指用带权的边集表示活动,而用顶点表示事件的有向无环图. AOV网 ...

最新文章

  1. 你和人工智能的对话,正在被人工收听
  2. python中字典格式_如何在Python中使用带有字典的格式函数和整数键
  3. 《构建之法》读后感之项目计划
  4. 【安全漏洞】DedeCMS-5.8.1 SSTI模板注入导致RCE
  5. 建立集群间ssh信任关系
  6. LeetCode每日一题: 最后一个单词的长度(No.58)
  7. LAMP源代码编译整理
  8. linux怎么安装git服务器,linux下安装git服务端
  9. Libreoffice实现office转pdf、html、jpg等格式数据
  10. nodejs实践录:我的nodejs编码风格
  11. 用python做youtube自动化下载器 思路
  12. PDF页码怎么设置?如何给PDF文件设置页码
  13. ultravnc软件,5款ultravnc软件推荐
  14. 安卓手机电池信息的获取与显示
  15. 理解“卷积” Understanding Convolutions
  16. springboot连接数据库用户名密码加密
  17. composer搭建php框架,利用 Composer 一步一步构建自己的 PHP 框架(一)——基础准备...
  18. 梦幻手游服务器维护摆摊公示时间,梦幻西游手游摆摊攻略 卖家关注公示期最重要...
  19. IDEA springboot启动报错java.lang.UnsatisfiedLinkError: no tcnative-1 in java.library.path
  20. word20161229

热门文章

  1. python123空气质量提醒_用Python实现给女朋友定时推送消息
  2. 来给罗永浩和王自如打个分(下)
  3. GPT分区-----Linux系统
  4. 《矩阵理论》大萌课程笔记 - 线性空间与子空间
  5. 袁绍说,吾比曹操英勇伟大,因为吾方战死数量远超
  6. http的网页下加载https图片失败
  7. Android 框架问题分析案例 - 谁杀了桌面?
  8. python的mathceil_Python ceil() 函数
  9. webpack二刷之五、生产环境优化(3.sideEffects 副作用)
  10. E-puck机器人-小白学习笔记(二)代码浅解读