zoukankan      html  css  js  c++  java
  • KNN 算法分类电影类型

    需求:怎样用KNN算法来分类电影是动作片还是爱情片。

    分类标准:统计电影中打斗镜头和接吻镜头的次数

    '''

    KNN算法:
    1.计算测试数据于训练数据之间的距离
    2.按照距离的远近排序(距离由近到远)
    3.选取距离最近的K个点
    4.统计K个点分别对应类别出现的概率
    5.概率最高的就是测试数据类别

    通过计算对象间距离来作为各个对象之间的非相似性指标,避免了对象之间的匹配问题
    KNN通过依据k个对象中占优的类别进行决策,而不是单一的对象类别决策


    '''

    KNN算法:
    1.计算测试数据于训练数据之间的距离
    2.按照距离的远近排序(距离由近到远)
    3.选取距离最近的K个点
    4.统计K个点分别对应类别出现的概率
    5.概率最高的就是测试数据类别

    通过计算对象间距离来作为各个对象之间的非相似性指标,避免了对象之间的匹配问题
    KNN通过依据k个对象中占优的类别进行决策,而不是单一的对象类别决策



    '''
    import numpy as np

    # 构建数据
    def creatDataSet():
    # 喜剧片 科幻片 爱情片 动作片
    group = np.array([[3,10,23,114],
    [2,5,23,160],
    [1,9,8,154],
    [101,10,12,11],
    [99,5,7,8,],
    [98,2,10,5],
    [4,99,14,10],
    [6,100,11,23],
    [9,100,1,1],
    [1,4,99,3],
    [4,5,78,6],
    [1,4,88,9]])
    labels = ["动作片","动作片","动作片","喜剧片","喜剧片","喜剧片","科幻片","科幻片","科幻片","爱情片","爱情片","爱情片"]
    return group, labels

    def classify(input, dataSet, labels, k):
    # 获得样本的行数
    dataSize = dataSet.shape[0]
    print(dataSet.shape[0])
    # 利用欧式距离公式计算距离
    # nump.tile() 就是把数组沿各个方向复制
    print(input)
    kdiff = np.tile(input, (dataSize, 1)) - dataSet
    sqdiff = kdiff**2
    # 行向量分别相加,从而得到新的一个行向量
    sqnumdiff = np.sum(sqdiff, axis=1)
    dist = sqnumdiff**0.5
    # 将距离进行排序
    soreDistIndex = np.argsort(dist)
    classCount = {}
    for i in range(k):
    print(soreDistIndex[i])
    voteLabel = labels[soreDistIndex[i]]
    print(voteLabel)
    # 对选取的K个样本所属的类别个数进行统计
    classCount[voteLabel] = classCount.get(voteLabel, 0) + 1
    # 选取出现的类别次数最多的类别
    maxCount = 0
    for key, value in classCount.items():
    if value > maxCount:
    maxCount = value
    classes = key

    return classes

    if __name__ == "__main__":
    dataSet, labels = creatDataSet()
    # 测试数据
    input = np.array([9,90,500,4])
    k = 3
    output = classify(input, dataSet, labels, k)
    print("测试数据为:", input, "分类结果为:", output)


  • 相关阅读:
    call/cc 总结 | Scheme
    用call/cc合成所有的控制流结构
    词法作用域 vs 动态作用域
    数论部分第二节:埃拉托斯特尼筛法
    1022: [SHOI2008]小约翰的游戏John【Nim博弈,新生必做的水题】
    C++面向对象作业1
    数论部分第一节:素数与素性测试【详解】
    基数排序与桶排序,计数排序【详解】
    计蒜客:百度的科学计算器(简单)【python神解】
    优质免费在线学习网站【自用】
  • 原文地址:https://www.cnblogs.com/lcl15/p/8126349.html
Copyright © 2011-2022 走看看