1、库

import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

2、欧式距离函数

计算欧氏距离,即两点间的直线距离
参数:vector1-List列表,n维属性坐标值构成的向量
      vector2-List列表,n维属性坐标值构成的向量
返回值:浮点数,欧氏距离
欧氏距离计算函数
对应向量相减-平方-求和-开平方

def euclDistance(vector1,vector2):
    return np.sqrt(np.sum(np.power(vector2-vector1,2)))

3、数据集、标签函数

def createDataSet():
# 生成一个矩阵,每行表示一个样本
    group=np.array([[1.0,0.9],[1.0,1.0],[0.8,0.9],[0.6,0.65],[0.1,0.2],[0.3,0.4],[0.2,0.3],[0.0,0.1]])
# 监督学习,手工设置8个样本所属的类别标签
    labels=['A','A','A','A','B','B','B','B']
    return group,labels  # dataSet,labels=createDataSet()

4、KNN分类算法函数

KNN分类算法函数实现
参数:newInput-List列表,待分类的数据点
    dataSet-List列表,已分类点坐标
    labels-List列表,分类标签
    k-整数,近邻数量
返回值:maxIndex-字符,分类结果

def kNNClassify(newInput,dataSet,labels,k):
    numSamples=dataSet.shape[0]
    distance=[]
    for vec in dataSet:
        distance.append(euclDistance(newInput,vec))
    sortedDistIndices=np.argsort(distance)
    classCount={}
    for i in range(k):
        voteLabel=labels[sortedDistIndices[i]]
        classCount[voteLabel]=classCount.get(voteLabel,0)+1
    maxCount=0
    for key,value in classCount.items():
        if value>maxCount:
            maxCount=value 
            maxIndex=key
    return maxIndex

5、结果

#生成数据集和类别标签
dataSet,labels=createDataSet()
#K取值3,调用K近邻分类算法
k=3
#对testX进行分类
testX=np.array([1.2,1.0])
outputLabel=kNNClassify(testX,dataSet,labels,3)
print("Your input is:",testX,"and classified to class:",outputLabel)
#对testY进行分类
testY=np.array([0.1,0.3])
outputLabel=kNNClassify(testY,dataSet,labels,3)
print("Your input is:",testY,"and classified to class:",outputLabel)
  

Your input is: [1.2 1. ] and classified to class: A
Your input is: [0.1 0.3] and classified to class: B 

 

Logo

永洪科技,致力于打造全球领先的数据技术厂商,具备从数据应用方案咨询、BI、AIGC智能分析、数字孪生、数据资产、数据治理、数据实施的端到端大数据价值服务能力。

更多推荐