python实例knn分类算法(鸢尾花数据集)

今天学习了knn分类算法(鸢尾花数据集),源数据下载路径如下:http://archive.ics.uci.edu/ml/machine-learning-databases/iris/

在这里插入图片描述
打开上图数据,复制到Excel文档,根据逗号进行分列,加上表头,最终形成如下文档:
在这里插入图片描述
直接上代码了,自行学习哈:

import numpy as np
import pandas as pd


#得到鸢尾花的数据
def getData():
    #读取自定义的文件,从中获得鸢尾花数据
    iris=pd.read_excel('iris.xlsx')
    return iris

#将鸢尾花的数据分开为测试集与训练集
def Classification(iris):
    #得到15个随机数,从中选取15个作为随机数
    index=np.random.permutation(len(iris))
    index=index[0:15]
    #将测试集弄出来
    testSet=iris.take(index)
    #总的数据集减掉测试集就是训练集
    trainingSet=iris.drop(index)
    sets=[testSet,trainingSet]
    #分成了测试集和训练集
    #print("数据集:\n")
    #print(trainingSet)
    #print("测试集:\n")
    #print(testSet)
    return sets


#K-近邻分析
#trainingSet训练数据,testSet是测试数据
def knn(trainingSet,testSet,trainingResults):
    #numpy函数shape[0]返回dataSet的行数
    totalsSize = trainingSet.shape[0]
    #print(totalsSize)
    #将测试数据变成和训练数据一样的矩阵,把testSet分成totalSize行,1列的矩阵
    tests = np.tile(testSet, (totalsSize, 1)) - trainingSet
    #print(np.tile(testSet, (totalsSize, 1)))
    #print(tests)
    #二维特征相减后平方后开根
    sqDiffMat =(tests**2)**0.5
    #sum()所有元素相加
    sqDistances = sqDiffMat.sum(axis=1)
    #sum(axis=1)等于1是行的相加,axis=0是列的相加
    #返回distances中元素从小到大排序后的索引值,即取距离近的
    sortedDistIndices = sqDistances .argsort()
    #print(sortedDistIndices)
    #取出第一个元素的类别
    voteIlabel = trainingResults[sortedDistIndices[1]]
    #返回第一个元素的类别
    return voteIlabel


iris=getData()
sets=Classification(iris)

#品种就是数据集中分类的那一列,这里得到了训练集的数据和训练集的真实品种
trainingSet=sets[1].drop(columns=['class']).values
trainingResults=sets[1]['class'].values
#print(sets[0])
#print(sets[0].values)

#测试集
testSets=sets[0].values
#print(testSets)
#记录成功的次数
true=0
for i in testSets:
   #花萼的长宽、花瓣的长宽
    testSet=[i[0],i[1],i[2],i[3]]
    #print(testSet)
    ret=knn(trainingSet,testSet,trainingResults)
    #如果返回的答案和测试数据的答案一样ture+1
    #print(ret)
    #print(i[4])
    if ret==i[4]:
        true+=1

successRate=true/len(sets[0])
print('测试的成功率为:\n',successRate)

#testdate=[6.3, 2.5, 5.0, 1.9]
#print(knn(trainingSet,testdate,trainingResults))

学习内容参考:https://blog.csdn.net/qq_41123884/article/details/102556109?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161604836316780262555531%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161604836316780262555531&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-1-102556109.first_rank_v2_pc_rank_v29&utm_term=python%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值