KNN算法又称为K最近邻分类算法,是一种监督学习类方法。所谓的k最近邻,就是指最接近的k个邻居(数据),核心思想是:在一个含未知样本的空间,可以根据离这个样本最邻近的k个样本的数据类型来确定样本的数据类型。
首先得到鸢尾花的样本数据,每个样本有四个特征值(萼片长度,萼片宽度,花瓣长度,花瓣宽度)。先打开文件再读取能避免路径或文件名出现中文名的错误,将鸢尾花的数据分开为测试集与训练集,对鸢尾花的特征值进行标准化处理。调用KNN算法进行近邻分析,查看测试准确率。
import numpy as np
import pandas as pd
def getExcel():
m =
open(r'C:\Users\50352\Desktop\iris.csv')
iris=pd.read_csv(m)
return iris
def irisDataClassification(iris):
indexs=np.random.permutation(len(iris))
indexs=indexs[0:10]
testSet=iris.take(indexs)
trainingSet=iris.drop(indexs)
sets=[testSet,trainingSet]
return sets
def
knn(trainingSet,testSet,trainingResults):
totalsSize = trainingSet.shape[0]
tests = np.tile(testSet, (totalsSize, 1)) -
trainingSet
sqDiffMat = tests**2
sqDistances = sqDiffMat.sum(axis=1)
sortedDistIndices = sqDistances .argsort()
voteIlabel =
trainingResults[sortedDistIndices[1]]
return voteIlabel
iris=getExcel()
sets=irisDataClassification(iris)
trainingSet=sets[1].drop(columns=['species']).values
trainingResults=sets[1]['species'].values
testSets=sets[0].values
sta=0
for i in testSets:
testSet=[i[0],i[1],i[2],i[3]]
ret=knn(trainingSet,testSet,trainingResults)
if ret==i[4]:
sta+=1
successRate=sta/len(sets[0])
print('准确率为:\n',successRate)