今天学习了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