Python金融数据挖掘 第11章 第1节 K近邻分类代码

该博客介绍了如何利用Python实现K近邻(KNN)算法,包括数据集创建、欧式距离计算以及KNN分类函数的详细步骤。通过示例展示了如何对两个测试点进行分类,并得到了分类结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值