数据挖掘课程作业打卡-最近邻分类器

一、实验目的

(1)理解分类的基本概念。

(2)理解最近邻分类器的工作原理。

二、实验内容

1、代码题
训练数据见diabets_Tr.mat,测试数据见diabets_Tst.mat。编程实现K最近邻算法。函数为:[class]=KNN_Classify_E(trainingSamples, trainingLabels, testingSample,k)。测试代码如下:

import numpy as np
from KNN_Classify_E import *
def classify_data(Tr_file_path,Tst_file_path):
    Tr = np.loadtxt(Tr_file_path, delimiter=",", dtype="double")
    Tst = np.loadtxt(Tst_file_path, delimiter=",", dtype="double")
    Tr=np.mat(Tr)
    Tst=np.mat(Tst)
  
    trAttr = Tr[:,:-1]
    trLabels =Tr[:,-1]    
    tstAttr = Tst[:,:-1]
    tstLabels =Tst[:,-1]  
    #trAttr=normalize(trAttr)
    #tstAttr=normalize(tstAttr)
    k=3
    predictlabel=np.zeros((tstLabels.size,1))
    for i in range(tstLabels.size):
        predictlabel[i,0] =KNN_Classify_E(trAttr, trLabels ,tstAttr[i,:] ,k)
    predict_right=predictlabel[predictlabel==tstLabels]
    acc=predict_right.size/predictlabel.size
    return acc

if __name__ == "__main__":
    Tr_file_path='../0data/diabets_Tr.csv'
    Tst_file_path='../0data/diabets_Tst.csv'
    acc=classify_data(Tr_file_path,Tst_file_path)
    print(acc)

函数KNN_Classify_E:
(将执行正确的python代码粘贴在此处,核心代码要求有注释)

//规范化代码
def normalize(Samples):
    meanValue=np.mean(Samples,axis=0)
    stuValue=np.std(Samples,axis=0)
    Samples2=(Samples-meanValue)/stuValue
    return  Samples2
//详细代码
import  numpy as np
import  math
def KNN_Classify_E(traininSamples,trainingLables,testingSample,k):
    M=traininSamples.shape[0]
    N=traininSamples.shape[1]

    # 初始化数组,用来存储训练样本与测试样本的距离
    Distance =np.zeros((M,1))
    # 计算每个训练样本与测试样本的距离
    for i in range(M):
        training=traininSamples[i,:]
        Distance[i]=dist_E(training,testingSample)
    # 对数组Distance进行升序
    ind=np.argsort(Distance,axis=0)
    # 将排序前k个距离对应的序号赋值给labs
    labs=trainingLables[ind[:k]]
    labs =np.array(labs)
    # 使用unique函数去除重复元素
    ALL_labs=np.unique(labs)
    # 不重复元素的个数
    LabNum=ALL_labs.size;
    Vote=np.zeros((LabNum,1))
    # 查找最近的k个类别labs中,等于all_labs[i]的有几个
    for i in range(LabNum):
        vect=labs[labs==ALL_labs[i]]
        Vote[i]=vect.size
    # 求最大索引
    ind =Vote.argmax(0)
    c=ALL_labs[ind]
    return  c

def dist_E(vect1,vect2):
    dist=-1
    if(vect1.size!=vect2.size):
        print('长度不一致')
    else:
        t=np.multiply((vect1-vect2),(vect1-vect2))
        dist=math.sqrt(t.sum())
    return  dist


做生活的高手,每天进步一点点!


 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值