机器学习实战——第二章

  k-近邻算法(kNN):测量不同特征值之间的距离方法进行分类。

  kNN的工作原理:存在一个样本数据集合(训练样本集),并且样本集中每个数据都存在标签,输入没有标签的新数据后,将新数据的每个特征与样本集数据对应的特征进行比较,然后算法提取样本集中特征最相似数据的分类标签。一般来说,只选择样本数据集中前k个最相似的数据。

伪代码:

1)计算已知类别数据集中的点与当前点之间的距离;

2)按照距离递增次序排序;

3)选取与当前点距离最小的k个点;

4)确定前k个点所在类别的出现频率;

5)返回前k个点出现频率最高的类别作为当前点的预测分类。

 1 #-*- coding: UTF-8 -*-
 2 from numpy import *
 3 import operator
 4
 5 def createDataSet():
 6     group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
 7     labels = [‘A‘, ‘A‘, ‘B‘, ‘B‘]
 8     return group, labels
 9
10 ‘‘‘
11 inX: 用于分类的输入向量
12 dataset: 输入的训练样本集
13 labels: 标签向量
14 k: 选择最近邻的数目
15 其中,标签向量的元素数目和矩阵dataSet的行数相同
16 ‘‘‘
17 def classify0(inX, dataSet, labels, k):
18     dataSetSize = dataSet.shape[0]    #返回dataSet的行数
19     diffMat = tile(inX, (dataSetSize, 1)) - dataSet
20     sqDiffMat = diffMat ** 2
21     sqDistances = sqDiffMat.sum(axis=1)    #按行求和
22     distances = sqDistances ** 0.5    #计算欧式距离
23     sortedDistIndicies = distances.argsort()    #返回的数组为distances的值从小到大的索引值
24
25     classCount = {}
26     for i in range(k):
27         voteIlabel = labels[sortedDistIndicies[i]]
28         classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1  #统计各类别的次数
29     sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
30     return sortedClassCount[0][0]  #返回第一个元素,即前3个中最多的类别
31
32 if __name__ == ‘__main__‘:
33     group, labels = createDataSet()
34     print classify0([0, 0], group, labels, 3)  #输出B


dict.get(‘key‘)类似于dict[‘key‘].

dict.get(‘key‘, sthelse)  #若key不是dict的键值,将得到sthelse的值

>>> info = {‘1‘:‘first‘, ‘2‘:‘second‘, ‘3‘:‘third‘}
>>> info.get(‘1‘)
‘first‘
>>> info.get(‘4‘,‘error‘)
‘error‘>>> info[‘1‘]‘first‘
classCount.iteritems()  #返回键值-值对的一个迭代器
#operator.itemgetter函数获取的不是一个值,而是定义了一个函数>>> import operator
>>> a = [1,2,3]
>>> b = operator.itemgetter(1)  #定义函数b,获取对象index==1的值
>>> b(a)
2

sorted(iterable[, cmp[, key[, reverse]]])  #返回list。key为函数,指定取待排序元素的哪一项进行排序

>>> import operator
>>> dict = {‘a‘:‘3‘, ‘b‘:‘2‘, ‘c‘:‘1‘}
>>> sorted(dict.iteritems(), key=lambda asd:asd[0], reverse=True)  
[(‘c‘, ‘1‘), (‘b‘, ‘2‘), (‘a‘, ‘3‘)]
>>> sorted(dict.iteritems(), key=operator.itemgetter(0), reverse=True)  #按dict.iteritems()的第一个元素倒序排序
[(‘c‘, ‘1‘), (‘b‘, ‘2‘), (‘a‘, ‘3‘)]
>>> sorted(dict.iteritems(), key=operator.itemgetter(1), reverse=True)  
[(‘a‘, ‘3‘), (‘b‘, ‘2‘), (‘c‘, ‘1‘)]

  

时间: 2024-08-27 22:31:49

机器学习实战——第二章的相关文章

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

#-*- coding:utf-8 -*- #https://blog.csdn.net/fenfenmiao/article/details/52165472 from numpy import * #科学计算包 import operator #运算符模块 import matplotlib import matplotlib.pyplot as plt #matplotlib.pyplot是一些命令行风格函数的集合 from os import listdir #列出给定目录的文件名 de

机器学习实战——第二章之改进约会网站的配对效果

三种类型:不喜欢的-1,魅力一般的-2,极具魅力的-3. 样本特征:每年获得的飞行常客里程数,玩视频游戏所耗时间百分比,每周消费的冰淇淋公升数. 1 from numpy import * 2 import matplotlib 3 import matplotlib.pyplot as plt 4 5 ''' 6 输入文本文件名字符串,输出训练样本矩阵和类标签向量 7 ''' 8 def file2matrix(filename): 9 fr = open(filename) 10 array

机器学习实战第二章----KNN

tile的使用方法 tile(A,n)的功能是把A数组重复n次(可以在列方向,也可以在行方向) argsort()函数 argsort()函数返回的是数组中值从大到小的索引值 dict.get()函数 语法:dict.get(key, default=None) key----字典中要查找的键 default----如果指定的简直不存在时,返回该默认值 add_subplot()基础用法 import matplotlib.pyplot as plt from numpy import * fi

《The Django Book》实战--第二章--动态网页基础

这章演示了一些最基本的Django开发动态网页的实例,由于版本不一样,我用的是Django 1.,6.3,有些地方按书上的做是不行的,所以又改了一些,写出来让大家参考. 这是一个用python写的一个显示当前时间的网页. 1.开始一个项目. 在命令行中(指定要保存项目代码的盘或文件夹下)输入 python ...\django-admin.py startproject djangobook  (虽然在环境变量Path中加入了django-admin.py的地址,但是在前面还是要加上路径名,不知

.NET Core IdentityServer4实战 第二章-OpenID Connect添加用户认证

原文:.NET Core IdentityServer4实战 第二章-OpenID Connect添加用户认证 内容:本文带大家使用IdentityServer4进行使用OpenID Connect添加用户认证 作者:zara(张子浩) 欢迎分享,但需在文章鲜明处留下原文地址. 在这一篇文章中我们希望使用OpenID Connect这种方式来验证我们的MVC程序(需要有IdentityServer4),我们首先需要干什么呢?那就是搞一个UI,这样非常美观既可以看到我们的身份验证效果,那么Iden

《机器学习》第二章 概念学习和一般到特殊序

2.1.简介 布尔函数一般形式:F(b1, b2, ..., bn),其中 bi的定义域为{0,1},F的值域为{0, 1}. 在一般的定 义域上的,取值在 {0, 1} 中的函数也叫做布尔值函数概念学习定义中的布尔函数指定就这个,主要是 规定学习的问题目标是布尔的,反应在上面的样本中,就是Yes或者No.目标函数的形式如下: f: X->{0,1} 概念学习:是指从有关某个布尔函数的输入输出训练样例中推断出该布尔函数.[很明显概念学习属于 监督学习的分类问题] 另外一种定义:给定一样例集合以及

机器学习实战——第一章

分类:将实例数据划分到合适的分类中.目标变量是离散型. 回归:预测数值型数据.目标变量是连续型的数值. 监督学习:必须知道预测什么,即目标变量的分类信息.目标变量是机器学习算法的预测结果. 开发机器学习应用程序的步骤:1)收集数据:2)准备输入数据:3)分析输入数据:4)训练算法:5)测试算法:6)使用算法. 1 from numpy import * #将numpy函数库中的所有模块引入当前命名空间 2 random.rand(4,4) #构造4*4的随机数组array 3 randMat =

spring实战第二章小记-装配bean

时间:2020/02/06 一.思想 1.创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入(DI)的本质. 对于上面这句话的个人理解:当我们在new一个对象时如果传入了别的对象作为参数(这个对象可能是引用数据类型也可能是基本数据类型),这时两个对象之间就形成了一种依赖关系,由于这种依赖关系的存在,两个对象之间就是一种强耦合的关系,而通过依赖注入可以降低两个对象之间的耦合度,注意,不是消除,如果两个对象之间没有耦合关系,那两个对象就是完全没有关系的. 2.spring框架提供了三种主要的

机器学习实战--第一章 Numpy使用

导入numpy 并简单赋值 import numpy as np a = np.array([0, 1, 2, 3, 4, 5]) print a # 数组转换到2D矩阵 变成三行两列 b = a.reshape((3, 2)) print b # .ndim(空间维度的意思)即矩阵列数 print a.ndim print b.ndim # .shape查看矩阵形态,即几行几列 print b.shape# numpy避免复制操作 直接修改值,a,b的值都变化 b[1][0] = 77prin