一 题目:Python实现KNN算法,使用鸢尾花(iris)作为测试数据
二 分析:
from sklearn.datasets import load_iris data = load_iris() 12
2.数据集的内容
csv格式保存,单独放在了data文件夹里
150,4,setosa,versicolor,virginica
5.1,3.5,1.4,0.2,0 #花萼长度,花萼宽度,花瓣长度,花瓣宽度
4.9,3.0,1.4,0.2,0
4.7,3.2,1.3,0.2,0
4.6,3.1,1.5,0.2,0
5.0,3.6,1.4,0.2,0
样本数目150,特征数目4,据包含三种鸢尾花的四个特征,分别是花萼长度(cm)、花萼宽度(cm)、花瓣长度(cm)、花瓣宽度(cm),
类别分别为:Iris Setosa Iris Versicolor Iris Virginica
data变量是一个类似字典的类型,是数据信息的集合,它像字典一样通过键值对来组织信息
data.keys()
[‘target_names’,‘data’,‘target’,‘DESCR’,‘feature_names’]
三 Python代码
import numpy as np from sklearn.datasets import load_iris from sklearn import datasets from sklearn.model_selection import train_test_split # KNN分类算法函数定义 def KNN(TestData, TrainData, labels, k): numSamples = TrainData.shape[0] # shape[0]表示行数 # # step 1: 计算距离 diff = tile(TestData, (numSamples, 1)) - dataSet # 按元素求差值 squaredDiff = diff ** 2 # 将差值平方 squaredDist = sum(squaredDiff, axis = 1) # 按行累加 distance = squaredDist ** 0.5 # 将差值平方和求开方,即得距离 # # step 2: 对距离排序 # argsort() 返回排序后的索引值 sortedDistIndices = argsort(distance) classCount = {} for i in range(k): # # step 3: 选择k个最近邻 voteLabel = labels[sortedDistIndices[i]] # # step 4: 计算k个最近邻中各类别出现的次数 classCount[voteLabel] = classCount.get(voteLabel, 0) + 1 # # step 5: 返回出现次数最多的类别标签 maxCount = 0 for key, value in classCount.items(): if value > maxCount: maxCount = value maxIndex = key return maxIndex # 生成数据集和类别标签 iris=load_iris() #dataSet, labels = createDataSet() # 定义一个未知类别的数据 testX = array([5,2.9,1,0.2]) # 导入鸢尾花数据并查看数据特征 iris = datasets.load_iris() print('数据量',iris.data.shape) # 拆分属性数据 dataSet = iris.data # 拆分类别数据 labels = iris.target k = 3 # 调用分类函数对未知数据分类 outputLabel = KNN(testX, dataSet, labels, 3) print ("Your input is:", testX, "and classified to class: ", outputLabel,"target name: {}".format(iris['target_names'][outputLabel])) print ()
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253四 代码运行结果
五 总结
算法缺点:
• 样本不平衡容易导致结果错误
◊如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。
◊改善方法:对此可以采用权值的方法(和该样本距离小的邻居权值大)来改进。
• 计算量较大
◊因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。
◊改善方法:事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。
该方法比较适用于样本容量比较大的类域的分类,而那些样本容量较小的类域采用这种算法比较容易产生误分
相关知识
Python原生代码实现KNN算法(鸢尾花数据集)
KNN算法实现鸢尾花数据集分类
【机器学习】KNN算法实现鸢尾花分类
Knn算法实现鸢尾花分类
【机器学习】KNN算法实现手写板字迹识别
【python机器学习】KNN算法实现回归(基于鸢尾花数据集)
【机器学习】基于KNN算法实现鸢尾花数据集的分类
原生python实现knn分类算法(鸢尾花数据集)
用python实现KNN算法对鸢尾花的分类
python 使用Tensorflow训练BP神经网络实现鸢尾花分类
网址: Python实现kNN算法,使用鸢尾花作为测试数据 https://m.huajiangbk.com/newsview854536.html
上一篇: 毕竟今年“花”是流行大趋势! |
下一篇: 中国中免 71.63( |