【Python机器学习】k-近邻算法简单实践——电影分类

k-近邻算法(KNN)的工作原理是:存在一个样本数据集合,也被称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系,输入没有标签的数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。

一般来说,我们只选择样本数据集中出现次数最多的分类,作为新数据分类。

分类场景:通过电影中打斗镜头和接吻镜头,使用k-近邻算法分类爱情片和动作片。

参考数据:

|-------|------|------|------|
| 电影名称 | 打斗镜头 | 接吻镜头 | 电影类型 |
| aaa | 3 | 104 | 爱情片 |
| bbb | 2 | 100 | 爱情片 |
| ccc | 1 | 81 | 爱情片 |
| ddd | 101 | 10 | 动作片 |
| eee | 99 | 5 | 动作片 |
| fff | 98 | 2 | 动作片 |
| zzzzz | 18 | 90 | ??? |

k近邻算法的一般流程:

1、收集数据

2、准备数据

3、分析数据

4、训练算法

5、测试算法

6、使用算法

准备:使用Python导入数据

首先,导入所需模块:

python 复制代码
from numpy import *
import operator

第一个是科学计算包Numpy;第二个是运算符模块。

然后创建createDataSet函数,它创建数据集合标签:

python 复制代码
def createDataSet():
    group=array([[3,104],[2,100],[1,81],[101,10],[99,5],[98,2]])
    labels=['A','A','A','B','B','B']
    return group,labels

这里有6组数据,每组数据有2个已知属性/特征值。

实施kNN分类算法:

运行kNN算法,为每组数据分类:首先,k-近邻算法伪代码:

对未知类别属性的数据集中的每个点依次执行以下操作:

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

2、按照距离递增次序排队;

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

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

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

实际Python代码:

python 复制代码
def classify0(inX,dataSet,lables,k):
    dataSetSize=dataSet.shape[0]
    #举例计算
    diffMat=tile(inX,(dataSetSize,1))-dataSet
    sqDiffMat=diffMat**2
    sqDistinaces=sqDiffMat.sum(axis=1)
    distances=sqDistinaces**0.5
    sortedDistIndicies=distances.argsort()
    #选择举例最小的前k个点
    classCount={}
    for i in range(k):
        voteIlabel=lables[sortedDistIndicies[i]]
        classCount[voteIlabel]=classCount.get(voteIlabel,0)+1
        #print(classCount)
    #排序
    sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]

classify0()函数有4个输入参数:用于分类的输入向量是inX,输入的训练样本集为dataSet,标签向量为labels,最后的参数k表示用于选择最近邻居的数目,其中标签向量的元素数目和矩阵dataSet的行数相同。

计算完所有点之间的距离后,可以对数据按照从小到大的次序排序。然后,确定前k个距离最小元素所在的主要分类,输入k总是正整数;最后,将classCount字典分解为元组列表,然后使用程序第2行导入运算符模块的itemgetter方法,按照第二个元素的次序对元组进行排序。

实际运行:

python 复制代码
group,lables=createDataSet()
print(classify0([18,90],group,lables,3))
相关推荐
2601_962071571 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
FL16238631292 小时前
智慧医疗X光图像小儿手腕外伤检测数据集VOC+YOLO格式2538张9类别
人工智能·yolo·机器学习
卷无止境2 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
Java后端的Ai之路2 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
计算机毕业编程指导师2 小时前
计算机毕设选题推荐:基于Hadoop与Spark的Steam游戏数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·steam游戏
计算机毕业编程指导师2 小时前
【计算机毕设选题推荐】基于Hadoop+Spark的白鹿抖音评论大数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·抖音评论
Zootopia6263 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
Y3815326623 小时前
搜索 API 延迟优化:并发数、超时与超时的真实代价
python·搜索引擎
wangqiaowq3 小时前
PII 脱敏指的是:把个人身份信息(PII)中能识别到具体个人的敏感部分,用替换、遮蔽、变形等方式处理掉,使得数据在保留可用性的同时,不再直接暴露个人身份。
python
风早爽太3 小时前
Python 学习笔记:SQLModel 使用外键关联查询数据
python·fastapi·sqlmodel