python实现KNN算法并可视化展示
话不多说,直接上代码,本代码采用的是鸢尾花数据集,来实现KNN算法
import matplotlib.pyplot as plt
import matplotlib as mpl
import pandas as pd
import numpy as np# 读取鸢尾花数据集,header参数来指定标题的行,默认是0,如果没有标题,参数设置为None
data = pd.read_csv(r"C:\\Users\\不归客\Desktop\\iris.csv", header=0)# 随机抽取一定的数据,默认为1行
# print(data.sample())# 数据清洗,将Species列转为数值类型
data["Species"] = data["Species"].map({"versicolor": 0, "setosa": 1, "virginica": 2})
# 删除不需要的Id列,默认是删除行,axis=1是指删除列
# drop是删除副本中的数据,inplace=True是指用副本替换掉原本
data.drop("Id", axis=1, inplace=True)
# 判断数据集中是否有重复项,只要有重复项,结果就为True
# data.duplicated().any()
if data.duplicated().any():# 删除重复项data.drop_duplicates(inplace=True)# 查看每个类别的鸢尾花有多少条数据
print(data["Species"].value_counts())class KNN:def __init__(self, k):'''初始化方法Parameters--------K:邻居的个数'''self.k = kdef fit(self, X, y):'''训练方法Parameters--------X:类数组类型,形状为[样本数量,特征数量] [149,4]待训练的样本特征(属性)y:类数组类型,形状为[样本数量]每个样本的目标值(标签)'''# 将X转换为ndarray数组类型self.X = np.asarray(X)self.y = np.asarray(y)def predict(self, X):'''根据参数传递的样本,进而对样本数据进行预测Parameters--------X:类数组类型,形状为[样本数量,特征数量] [149,4]待训练的样本特征(属性)Returns-------result:数组类型预测的结果'''X = np.asarray(X)result = []# 对ndarray数组进行遍历,每次取数组中的一行for x in X:# sum默认是将所有的数值求和,axis=1是按行求和dis = np.sqrt(np.sum(((x - self.X) ** 2), axis=1))# 返回数组排序后每个数组在原数组中的索引index = dis.argsort()# 进行截断,只取前k个元素index = index[:self.k]# bincount返回每个元素出现的次数,元素必须是非负的整数count = np.bincount(self.y[index])# 返回ndarray数组中,值最大的元素对应的索引,该索引就是我们判定的类别# 最大元素,就是出现次数最多的元素result.append(count.argmax())return np.asarray(result)# 将数据集随机打乱
t0 = data[data["Species"] == 0]
t1 = data[data["Species"] == 1]
t2 = data[data["Species"] == 2]
# 对每个类别数据进行洗牌
t0 = t0.sample(len(t0), random_state=0)
t1 = t1.sample(len(t1), random_state=0)
t2 = t2.sample(len(t2), random_state=0)
# 构建训练集与测试集
train_X = pd.concat([t0.iloc[:40, :-1], t1.iloc[:40, :-1], t2.iloc[:40, :-1]], axis=0)
train_y = pd.concat([t0.iloc[:40, -1], t1.iloc[:40, -1], t2.iloc[:40, -1]], axis=0)
test_X = pd.concat([t0.iloc[40:, :-1], t1.iloc[40:, :-1], t2.iloc[40:, :-1]], axis=0)
test_y = pd.concat([t0.iloc[40:, -1], t1.iloc[40:, -1], t2.iloc[40:, -1]], axis=0)# 创建KNN对象,进行训练与测试
knn = KNN(k=3)
# 进行训练
knn.fit(train_X, train_y)
# 进行测试,获得测试结果
result = knn.predict(test_X)
print("预测正确的个数:", np.sum(result == test_y), "测试集的总数:", len(test_y), "预测准确率:", np.sum(result == test_y)/len(test_y))'''
将预测结果可视化展示
'''
# 设置画布大小
plt.figure(figsize=(10,10))
# 设置参数,保证可以中文显示
mpl.rcParams["font.family"] = "SimHei"
mpl.rcParams["axes.unicode_minus"] = False
# 训练集数据,绘制散点图,选择其中两个属性进行绘制
plt.scatter(x=t0["Sepal.Length"][:40], y=t0["Petal.Length"][:40], color="r", label='virginica')
plt.scatter(x=t1["Sepal.Length"][:40], y=t1["Petal.Length"][:40], color="green", label='setosa')
plt.scatter(x=t2["Sepal.Length"][:40], y=t2["Petal.Length"][:40], color="b", label='versicolor')
# 绘制测试集数据
right = test_X[result == test_y]
wrong = test_X[result != test_y]
plt.scatter(x=right["Sepal.Length"], y=right["Petal.Length"],color='c', marker="x", label='right')
plt.scatter(x=wrong["Sepal.Length"], y=wrong["Petal.Length"],color='m', marker=">", label='wrong')
plt.xlabel("花萼长度")
plt.ylabel("花瓣长度")
plt.title("KNN分类结果显示")
plt.legend()
plt.show()
下图是输出结果,蓝色的×代表预测正确的值,紫色的三角符号代表预测错误的值,三个圆点代表训练数据集。
红色标注的是将数据集按照种类分类后每类的数据集的个数
紫色标注的是预测正确的个数、测试集总数以及预测准确率
数据集在百度网盘,链接如下
链接:https://pan.baidu.com/s/1gOTQ1KoKbFUmDNQYA_0nWg
提取码:soft
python实现KNN算法并可视化展示相关推荐
- Python实现kNN算法
Python实现kNN算法 1. 原理 k-最近邻: kNN(k-NearestNeighbor)分类算法机器学习中最简单的分类方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用 ...
- Python疫情数据采集, 并做可视化展示
前言 嗨喽!大家好,这里是魔王~ 本次目的 Python疫情数据采集, 并做可视化展示(数据采集, 数据分析) 知识点: 爬虫基本流程 requests 发送请求 re 正则表达式 json 结构化数 ...
- Python实现KNN算法(鸢尾花集)
不同颜色的鸢尾花花语不尽相同,蓝色鸢尾花语是精致的美丽,红色鸢尾花的花语代表着热情.适应力强.紫蓝色鸢尾花花语代表着好消息.想念你.黄色鸢尾花的花语代表着友谊永固.热情开朗,白色鸢尾花花语代表着纯真. ...
- 用Python实现KNN算法(从原理到代码的实现)
用Python实现KNN算法(从原理到代码的实现) 环境 1.Pycharm 2.python3.6 声明:本栏的所有文章皆为本人学习时所做笔记而整理成篇,转载需授权且需注明文章来源,禁止商业用途,仅 ...
- python实现KNN算法在电影分类中的应用
使用python实现KNN算法在电影分类中的应用 代码如下: import numpy as np import operator""" 使用KNN算法对电影进行分类 K ...
- 计算机基础数据结构和算法动态可视化展示网站收录
计算机中有很多数据结构.算法对于小白来说非常难理解,交互式动画一步步展示整个过程可以帮助我们快速准确地理解这些算法.我们整理了12个可动态交互和展示常见数据结构和排序.图算法等网站,总计12个 收录到 ...
- ML一:python的KNN算法
(1):list的排序算法: 参考链接:http://blog.csdn.net/horin153/article/details/7076321 示例: DisListSorted = sorted ...
- 原生Python实现KNN算法,并用鸢尾花(iris)数据集测试
用原生python语法实现K近邻算法,了解K近邻法的实际操作内核,并用自带鸢尾花的集合验证K近邻算法,并掌握运用散点图的绘制 先对KNN算法做了解: 源代码获取: https://github.com ...
- python的knn算法list_机器学习实战学习笔记1——KNN算法
一.KNN算法概述: 1.KNN算法的工作原理是: (1)存在一个训练样本集,并且知道样本集中每一数据与所属分类的对应关系,即每个数据都存在分类标签. (2)若此时输入不带标签的新数据之后,将新数据的 ...
最新文章
- Sublime配置C和C++编译运行环境
- 给字母保密的c语言,C语言练习题
- 当硬核动作游戏《怪物猎人》变成了回合制RPG,还会那么好玩吗?
- WIN7与WIN10 安装
- [转]Chrome 错误代码:ERR_UNSAFE_PORT
- 深入解读Docker底层技术Cgroup系列(5)——cgroup子系统cpuset
- windows 中hosts文件
- matlab求线性规划最大值,matlab线性规划算例
- 个人安卓学习笔记---搭建Androd开发环境
- c++ Beep函数的雪之梦
- PX4 FMU [17] stabilize
- 分享一个很好的卸载绿色软件:Geek Uninstaller(个人用户免费)
- Escape/Unescape,HTML实体编码,敲击码(Tap code),摩尔斯电码(Morse Code)
- Android 集成 Agora SDK 快速体验 RTC 版多人视频聊天|掘金技术征文
- pyside2/pyqt5实时显示时间
- 爱与灾难·《致我们终将逝去的青春》
- JavaSE基础(132) 缓冲流
- 前端工程师是做什么的?
- 可编程控制器的基本结构
- tidb-dumpling备份数据库并上传到oss上