from numpy import *
import operator
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm#载入数据
def file2matrix(fileName):file = open(fileName)allLines = file.readlines()row = len(allLines)dataSet = zeros((row, 4))labels = []index = 0
    for line in allLines:line = line.strip()listFromLine = line.split(',')dataSet[index, :] = listFromLine[0:4]labels.append(listFromLine[-1]) #取最后一维为标签
        index += 1
    return dataSet, labels #数据集和标签分开

def kNN(x, dataSet, labels, k):dataSetSize = dataSet.shape[0]distance1 = tile(x, (dataSetSize,1)) - dataSet #欧氏距离计算开始
    distance2 = distance1 ** 2 #每个元素平方
    distance3 = distance2.sum(axis=1) #矩阵每行相加
    distance4 = distance3 ** 0.5 #欧氏距离计算结束
    sortedIndex = distance4.argsort() #返回从小到大排序的索引
    classCount = {}for i in range (k): #统计前k个数据类的数量
        label = labels[sortedIndex[i]]classCount[label] = classCount.get(label,0) + 1
    sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)#从大到小按类别数目排序
    print(sortedClassCount)return sortedClassCount[0][0]def kNN_test():testRatio = 0.1 #取数据集的前0.1为测试数据
    dataSet, labels = file2matrix('irisdata_test.txt')row = dataSet.shape[0]    #数据集的行数,即数据集的总的样本数
    testNum = int(row * testRatio)error = 0.0 #判断错误的个数
    for i in range (testNum):result = kNN(dataSet[i, :], dataSet[testNum:row, :], labels[testNum:row], 3)print('返回的结果是: %s, 真实结果是: %s' % (result, labels[i]))if result != labels[i]:error += 1.0
    print('错误率为: %f' % (error/float(testNum)))#画出散点图
def scatter():dataSet, labels = file2matrix('irisdata.txt')fig = plt.figure()ax = fig.add_subplot(111, projection='3d')type1 = ax.scatter(dataSet[0:50, 0], dataSet[0:50, 1], dataSet[0:50, 2], c='r', marker='^')type2 = ax.scatter(dataSet[50:100, 0], dataSet[50:100, 1], dataSet[50:100, 2], c='b', marker='o')type3 = ax.scatter(dataSet[100:150, 0], dataSet[100:150, 1], dataSet[100:150, 2], c='y', marker='x')ax.legend((type1, type2, type3), ('Iris-setosa', 'Iris-versicolor', 'Iris-virginica'))ax.set_xlabel('X Label')ax.set_ylabel('Y Label')ax.set_zlabel('Z Label')plt.show()kNN_test()
scatter()

利用kNN算法对iris数据集进行分类,以前10%的数据作为测试数据,后90%的数据作为样本数据集 。由于iris数据集原本按照三种花的顺序排列,在测试时前10%全为第一种花,不能完整测试kNN的分类功能 。故将后两种花随机挑选数据各5项放入前10%,需要文件irisdata_test.txt后面的散点图将iris数据集的前三维数据画出,需要文件irisdata.txt

利用kNN算法对iris数据集进行分类,本人也做了修改使得代码可实现相关推荐

  1. KNN算法预测iris数据集

    KNN算法预测iris数据集 1.数据集介绍 鸢尾花灰Iris数据集中有150个样本,每个样本有4个特征,1个标签.其中,鸢尾花种类可取0.1.2,分别代表山鸢尾setosa.变色鸢尾versicol ...

  2. 机器学习与深度学习——通过knn算法分类鸢尾花数据集iris求出错误率并进行可视化

    什么是knn算法? KNN算法是一种基于实例的机器学习算法,其全称为K-最近邻算法(K-Nearest Neighbors Algorithm).它是一种简单但非常有效的分类和回归算法. 该算法的基本 ...

  3. DL之LSTM:基于tensorflow框架利用LSTM算法对气温数据集训练并回归预测

    DL之LSTM:基于tensorflow框架利用LSTM算法对气温数据集训练并回归预测 目录 输出结果 核心代码 输出结果 数据集 tensorboard可视化 iter: 0 loss: 0.010 ...

  4. ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测daiding

    ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测 目录 基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测 设计思路 ...

  5. ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测

    ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测 目录 基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测 设计思路 ...

  6. python中load_iris_在python中利用KNN实现对iris进行分类的方法

    如下所示: from sklearn.datasets import load_iris iris = load_iris() print iris.data.shape from sklearn.c ...

  7. KNN算法实现鸢尾花数据集分类

    KNN算法实现鸢尾花数据集分类 作者介绍 数据集介绍 KNN算法介绍 用KNN实现鸢尾花分类 作者介绍 乔冠华,女,西安工程大学电子信息学院,2020级硕士研究生,张宏伟人工智能课题组. 研究方向:机 ...

  8. OpenCV-Python实战(番外篇)——利用 KNN 算法识别手写数字

    OpenCV-Python实战(番外篇)--利用 KNN 算法识别手写数字 前言 手写数字数据集 MNIST 介绍 基准模型--利用 KNN 算法识别手写数字 改进模型1--参数 K 对识别手写数字精 ...

  9. 用matlab实现用Bp神经网络对iris数据集进行分类(以及影响分类性能的参数条件)

    数据集已上传,结尾链接下载即可!!! 一.实验内容 Iris鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性,分别对应花萼长度,花 ...

  10. 【基础机器学习算法原理与实现】使用感知器算法LDA、最小二乘法LSM、Fisher线性判别分析与KNN算法实现鸢尾花数据集的二分类问题

    本文设计并实现了PerceptronLA.PseudoIA.LeastSM.LinearDA.KNN等五个算法类,以及DataProcessor的数据处理类.对感知器算法LDA.最小二乘法LSM的伪逆 ...

最新文章

  1. 使用html测试数据库连接与操作(含界面) 第一步界面设计
  2. python遗传算法工具包_Deap: python中的遗传算法工具箱
  3. 计算未来轻沙龙 | AI=知识+推理,知识工程与数据管理专场来了!
  4. Javascript实现页面跳转传值示例Demo
  5. Mybatis(四) 高级映射,一对一,一对多,多对多映射
  6. 龙芯2F 逸珑迷你笔记本
  7. Operator ‘==‘ cannot be applied to operands of type ‘byte[]‘ and ‘string‘
  8. HCIP 数通资料下载 肖哥视频
  9. sap入门--操作指南
  10. 国际象棋棋盘 java_java打印国际象棋棋盘的方法
  11. 3000亿美元的东南亚数码经济为企业创造增长机会,也带来更大的欺诈风险 | 美通社头条...
  12. Scala json转map,map转json
  13. 隐藏安卓平板状态栏,还你全面屏体验
  14. 职场礼仪常识、职场注意事项
  15. 卓有成效的管理:你逃不过的功课你要完成它
  16. 明明白白给XBOX 360建兴光驱刷LT2光驱固件
  17. 数字成像系统-姜卓-专题视频课程
  18. SQL Server进制转换函数的创建
  19. Linux系统监控——top命令
  20. 初学Linux,了解基本命令

热门文章

  1. 无线数据包的破解——跑包
  2. dos下c语言读取扇区的函数,C语言编程读取主导扇区.doc
  3. NBA2K18手游显示无法连接服务器,nba2k18手游交易被拒绝 | 手游网游页游攻略大全...
  4. Kubernetes的Limits和Requests
  5. 时间复杂度比较以及额外空间复杂度O(1)
  6. 初识Linux与运维
  7. [洛谷P3939]数颜色
  8. 罗格斯的计算机科学博士奖学金,罗格斯大学cs怎么样
  9. 应用内moniter
  10. 如何在Swift中实现状态机?