使用Python实现K近邻-------文章中有源码

简介: 使用Python实现K近邻-------文章中有源码

实验目的

使用Python实现K近邻

实验原理

(1)计算测试与各个训练数据之间的距离;

(2)按照距离的递增关系进行排序;

(3)选取距离最小的K个点;

(4)确定前K个点所在类别出现的概率;

(5)返回前K个点中出现概率最高的类别作为测试数据的预测分类。

实验内容(表格区域可拉长)

(1)电影类别预测;

(2)手写数字识别。

1)

代码:

import numpy as np
def distinguish():
    group = np.array([[3, 104], [2, 100], [1, 81], [101, 10], [99, 5], [98, 2]])
    lable = ("爱情片", "爱情片", "爱情片", "动作片", "动作片", "动作片")
    list = []
    temp = []
    x=len(lable)
    m, n , a = 0, 0, 0
    text = np.array([18, 90])
    for i in range(len(group)):
        list.append(((text[0] - group[i][0]) ** 2 + (text[1] - group[i][1]) ** 2) ** 0.5)
    # print(list)
    list.sort()
    print(list)
    k = int(input("请输入需要投票样本的个数:"))
    # 无穷大数
    float('inf')
    # while a<5:
    #     temp.append(list[a])
    #     a+=1
    try:
        for i in range(x):
            temp.append(list.index(min(list)))
            #置为最大值
            list[list.index(min(list))] = float('inf')
            # print(temp)
        for i in range(k):
            if lable[temp[0]] == '爱情片':
                m += 1
            else:
                n += 1
        if m > n:
            print("爱情片")
        else:
            print("动作片")
    except Exception as e:
        pass
if __name__ == "__main__":
    distinguish()

截图:image.png

import numpy as np
import os
def getData(path): #通过路径得到数据
    data = []
    for file in os.listdir(path):
        temp = []
        with open(path + file) as lines:
            for line in lines:
                for word in line[:-1]: #遍历一行中每个字符
                    temp.append(int(word))
        temp.append(int(file[0]))
        data.append(temp)
    return np.array(data)
def calDist(l1, l2):   #计算np数组距离的平方
    return np.sum((l1 - l2) ** 2) 
def getK(l, k):     #得到l中前k个索引
    tempL = l
    result = []
    for i in range(k):
        minNum = np.argmin(l)   #注:argmin     得到最小值的索引
        result.append(minNum)
        tempL[minNum] = np.max(l)
    return np.array(result)
def mostN(l):        #得到出现次数做多的元素
    return np.argmax(np.bincount(l))
def knn(trainDir, testDir, k):
    trainData = getData(trainDir)
    testData = getData(testDir)
    trueN = 0
    length = len(testData)
    for i in testData:
        temp = []
        for j in trainData:
            temp.append(calDist(i[:-1], j[:-1]))
        tempK = getK(temp, k)
        preNum = trainData[mostN(tempK)][-1]   #预测正确的标签
        if i[-1] == preNum:
            trueN += 1
    return trueN / length
if __name__ == "__main__":
    trainDir = "./trainingDigits/"
    testDir = "./testDigits/"
    print(knn(trainDir, testDir, 1))

截图:

image.png

目录
相关文章
|
22天前
|
人工智能 机器人 测试技术
【python】python小游戏——开心消消乐(源码)【独一无二】
【python】python小游戏——开心消消乐(源码)【独一无二】
|
22天前
|
存储 人工智能 搜索推荐
【python】python用户管理系统[简易版](源码+报告)【独一无二】
【python】python用户管理系统[简易版](源码+报告)【独一无二】
|
22天前
|
存储 数据挖掘 数据库
【Python】python天气数据抓取与数据分析(源码+论文)【独一无二】
【Python】python天气数据抓取与数据分析(源码+论文)【独一无二】
|
2天前
|
机器学习/深度学习 算法 数据挖掘
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享-2
PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SVM分析营销活动数据|数据分享
20 1
|
16天前
|
存储 定位技术 数据库
【python毕业设计】python基于Pygame的吃金币游戏设计与实现(源码+毕业论文)【独一无二】
【python毕业设计】python基于Pygame的吃金币游戏设计与实现(源码+毕业论文)【独一无二】
|
16天前
|
数据采集 存储 人工智能
【python】python汽车效能数据集—回归建模(源码+数据集)【独一无二】
【python】python汽车效能数据集—回归建模(源码+数据集)【独一无二】
|
16天前
|
人工智能 数据可视化 数据挖掘
【python】Python国内GDP经济总量数据分析可视化(源码+报告)【独一无二】
【python】Python国内GDP经济总量数据分析可视化(源码+报告)【独一无二】
|
17天前
|
人工智能 机器人 测试技术
【Python】Python仓储管理系统(源码)【独一无二】
【Python】Python仓储管理系统(源码)【独一无二】
|
22天前
|
人工智能 机器人 测试技术
【Python】Python房屋销售系统(源码)【独一无二】(课程设计)
【Python】Python房屋销售系统(源码)【独一无二】(课程设计)
|
22天前
|
人工智能 监控 数据可视化
【Python】Python商业公司贸易业务数据分析可视化(数据+源码)【独一无二】
【Python】Python商业公司贸易业务数据分析可视化(数据+源码)【独一无二】