机器学习:K-近邻算法(一)判断电影类型
目录
一、KNN
二、距离度量
三、实战项目(判断电影类型):主要练习k-近邻算法的实现
1.准备数据集
2.k-近邻算法
(1)利用距离公式写算法:
(2)不会的知识点:
一、KNN
K-近邻算法用作基本分类与回归,其中k是指选择样本集中前k个最相似的数据集,最后从k个最相似的数据集中选出出现次数最多的分类。
二、距离度量
前k个最相似的数据集,这个最相似指的是特征最相似,也就是说k-近邻算法是根据特征比较,得到特征最相似的数据的分类标签,然后找出出现频率最高的标签。那么如何做到特征比较呢?其实就是计算一个样本与另一个样本之间的距离,这个距离就是利用距离公式计算来的。下图第一个公式是两个特征时使用的,第二个是两个特征以上时使用的。
三、实战项目(判断电影类型):主要练习k-近邻算法的实现
电影名称 | 打斗镜头 | 接吻镜头 | 电影类型 |
电影1 | 1 | 101 | 爱情片 |
电影2 | 5 | 89 | 爱情片 |
电影3 | 108 | 5 | 动作片 |
电影4 | 115 | 8 | 动作片 |
这个项目中有两个特征:打斗镜头和接吻镜头
1.准备数据集
import numpy as np'''
主要就是获取特征矩阵和标签列表
'''
def CreatdataSet():#创建特征矩阵dataSet=np.array([[1,101],[5,89],[108,5],[115,8]])#创建标签labels=['爱情片','爱情片','动作片','动作片']return dataSet,labelsif __name__=='__main__':dataSet,labels=CreatdataSet()print(dataSet)print(labels)
执行的结果是:
2.k-近邻算法
(1)利用距离公式写算法:![](/assets/blank.gif)
'''
参数说明:
inX--指测试集
dataSet--指训练集
labels--指分类标签
k--指找前k个最相似数据返回值:返回前k个最相似中出现次数最多的标签
'''def classify0(inX,dataSet,labels,k):#获取训练集数据集的行数dataSetsize=dataSet.shape[0]#训练集数据(矩阵)减去测试集数据(一维)diffMat=np.tile(inX,(dataSetsize,1))-dataSet#将减去的后的数据平方double_diffMat=diffMat**2#将平方后的数据相加sum_data=double_diffMat.sum(1)#相加后再开平方result_data=sum_data*0.5#返回result_data中从小到大排序的索引值sortedDistIndices=result_data.argsort()classCount={}for i in range(k):#提取前k个元素的类别,通过排好序的索引值voteIlabel=labels[sortedDistIndices[i]]#计算每个类别的次数classCount[voteIlable]=classCount.get(voteIlabel,0)+1#将字典排序,按字典的值排序:key=operator.itemgetter(1)#按字典的键记性排序:key=operator.itemgetter(0)sortedClassCount=sotred(classCount.items(),key=operator.itemgetter(1),reverse=True)#返回次数最多的类别return sortedClassCount[0][0]
(2)不会的知识点:
A.numpy的tile()函数
例子:a=np.array([0,1,2])
result=np.tile(a,(2,1)) #表示将a在x轴上复制为1倍,即保持不变,在y轴上复制为2倍
结果为:
[[0,1,2],
[0,1,2]]
B.列表(矩阵)的sum()
对于列表--->sum(list)将列表中的所有数相加即可
对于矩阵--->x=np.array([[1,2],[3,4]])
sum(1) #按行相加(行内部相加)
例如:np.sum(a,axis=1)或这样写x.sum(1)
结果为:[3,7]
sum(0)#按列相加,列内部相加
例如:np.sum(x,axis=0)或这样写x.sum(0)
结果为:[4,6]
sum()还有一个关键字,确定是否保持几维特性
例如:np.sum(x,axis=1,keepdims=True)
结果为:[[3],[7]]
C.nump模块中的argsort()函数
第一种用法:将数组中的元素从小到大排序后的索引值构成的数组返回(注:列表中没有argsort()),原数组不受影响
使用效果如下:
错误结果示范:
第二种用法:若为二维数组,要区分是按行还是按列排序
np.argsort(x,axis=0)#按列排序
np.argsort(x,axis=1)#按行排序
第三中用法:升序排列还是降序排列
默认为升序排列,若想要降序排列在数组前加‘-’符号,例如:np.argsort(-x)
第四种用法:通过索引值获得排序后的数组
D.字典中的ge(key,dufault)方法
返回字典中指定键key的值,若不存在,返回指定的默认值default
E.字典的排序方法sorted()
sorted(dict.items(),key=operator.itemgetter(0或1),reverse=True或False)
解析:python3中用items()代替python2中的iteritems()
operator.itemgetter(0)根据字典的键进行排序
operator.itemgetter(1)根据字典的值进行排序
reverse用来确定是否进行降序排列
下面是算法的运行结果:
批注:我学习的博主Jack Cui,网址:Jack Cui | 关注人工智能及互联网的个人网站 (cuijiahua.com)
我就是看他的学习记录学习的,详细学习内容可进入他的网站学习。我写文章主要目的是为了再次熟悉代码和记录不会的知识点。
机器学习:K-近邻算法(一)判断电影类型相关推荐
- 机器学习——K近邻算法(KNN)(K Nearest Neighbor)
参考视频与文献: python与人工智能-KNN算法实现_哔哩哔哩_bilibili 机器学习--K近邻算法(KNN)及其python实现_清泉_流响的博客-CSDN博客_python实现knn 机器 ...
- python机器学习 | K近邻算法学习(1)
K近邻算法学习 1 K近邻算法介绍 1.1算法定义 1.2算法原理 1.3算法讨论 1.3.1 K值选择 1.3.2距离计算 1.3.3 KD树 2 K近邻算法实现 2.1scikit-learn工具 ...
- 2 机器学习 K近邻算法(KNN) 学习曲线 交叉验证 手写数字识别
机器学习 1 K-近邻算法介绍 1.1 分类问题 分类问题:根据已知样本的某些特征,判断一个未知样本属于哪种样本类别. 与回归问题相比,分类问题的输出结果是离散值,用于指定输入的样本数据属于哪个类别. ...
- [机器学习]K近邻算法及其应用--WEKA工具
K近邻算法理论基础 k近邻模型 距离度量 k值的选择 分类决策规则 WEKA实战 问题背景 数据预处理 得到分类器 对未知的数据进行分类预测 K近邻算法理论基础 (本节内容参考了:李航<统计学习 ...
- 机器学习[k近邻算法]
k近邻算法简称kNN算法,由Thomas等人在1967年提出[1].它基于以下思想:要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接近的k个样本,统计这些样本的类别进行投票, ...
- 【机器学习-K近邻算法】
K-近邻算法 K-近邻算法的快速入门 K-近邻(KNN)算法概念 殴式距离公式 电影分类案例 K-近邻算法API Scikit-learn工具 Scikit-learn包含内容 K-近邻算法API方法 ...
- 机器学习--K近邻算法(KNN)(2)
一.简介 K-Nearest-Neighbor 算法是一种常用的监督学习算法,它没有显式的训练过程,是'懒惰学习'的显著代表,此类学习算法仅在训练阶段将训练集保存起来,训练时间开销为0,待收到测试样本 ...
- 机器学习——K近邻算法(KNN)及其python实现
参考视频与文献: https://www.bilibili.com/video/BV1HX4y137TN/?spm_id_from=333.788&vd_source=77c874a500ef ...
- 机器学习——K近邻算法及乳腺癌检测分类
一.引言 KNN可用于分类和回归,用于分类时是多分类方法. 注意:由于此方法根据预测点近邻的各类点的个数多少来确定该预测点的类别,因此原始类别数据不均衡,将严重影响最终分类效果. 二.KNN分类思想 ...
- 【机器学习入门】(1) K近邻算法:原理、实例应用(红酒分类预测)附python完整代码及数据集
各位同学好,今天我向大家介绍一下python机器学习中的K近邻算法.内容有:K近邻算法的原理解析:实战案例--红酒分类预测.红酒数据集.完整代码在文章最下面. 案例简介:有178个红酒样本,每一款红酒 ...
最新文章
- 胶囊网络为何如此热门?与卷积神经网络相比谁能更胜一筹?
- discuz7记录下url静态化的apache2.2配置
- Michael Jordan:当下的AI其实都是伪“AI”
- Synchronize异常释放锁
- 数学家出身的阿拉伯语诗人
- sstableloader工具使用及原理解析
- 代码实现——MapReduce实现Hadoop序列化
- 删除变量PHP之session的使用
- (转)Android 如何建立你的菜单
- cookie和seseion的区别和联系点
- 元分析教程 | 手把手教你使用CMA 2.0
- 学习人工智能导论(1)
- 简历里计算机能力,简历上计算机能力怎么写
- Labview筛选符合条件的数据
- 资产新增ccid的问题
- 005 ps基础之图像旋转、裁剪
- Firefox/Chrome渗透测试插件推荐
- LARS Lasso
- Android打开QQ临时会话和打开群聊
- 非全日制计算机专业值得读吗,全日制、非全日制哪个更好?19计算机考研扫盲贴!...