KNN分类-python

  • KNN(k-近邻算法)
    • 算法原理
    • 代码介绍
      • 1、knn_classify
      • 2、数据集
      • 3、结果
    • 完整代码

KNN(k-近邻算法)

算法原理

knn算法原理非常简单,这里不再赘述,注重算法实现。

代码介绍

1、knn_classify

下面是我写的knn函数,每一步的步骤都是按照算法原理写的,并标明了注释,可以直接使用。

def knn_classify(new_data, X, label, k):""":param new_data: 待预测数据:param X: 原始特征数据:param label: 标签数据:param k: k值-奇数:return: 分类结果"""# 1.构建已经分类好的原始数据集 -dataSetresult = []# 2.计算已知类别数据集中的点与当前点之间的距离dist = (np.sum((X - new_data) ** 2, axis=1)) ** 0.5# 3.将距离升序排列,然后选取距离最小的k个点dist_up = pd.DataFrame({"欧氏距离": dist, "类型": label})d_k_neighbor = dist_up.sort_values(by="欧氏距离")[: k]# 4.确定前k个点所在类别的出现频率res = d_k_neighbor.loc[:, "类型"].value_counts()# 5.选择频率最高的类别作为当前点的预测类别result.append(res.index[0])return result

2、数据集

我以两个数据集为例对结果进行验证
1、第一个数据集合共 12 个样本,每个样本包括:电影名称、搞笑镜头、打斗镜头、接吻镜头等信息,标签为电影类型。

# 加载数据集 一共12个样本
rowdata = {'电影名称': ['无问西东', '后来的我们', '前任 3', '红海行动', '唐人街探案', '战狼', '宝贝当家', '美人鱼', '澳门风云 3', '谍影重重', '功夫熊猫 3', '叶问 3'],'搞笑镜头': [5, 8, 35, 2, 77, 7, 45, 21, 54, 9, 57, 3],'打斗镜头': [1, 5, 12, 108, 56, 115, 9, 5, 11, 31, 27, 65],'接吻镜头': [101, 89, 97, 5, 9, 8, 2, 35, 9, 0, 2, 2],'电影类型': ['爱情片', '动作片', '爱情片', '动作片', '喜剧片', '动作片', '喜剧片', '爱情片', '喜剧片', '动作片', '喜剧片', '动作片']
}


2、第2个数据集为比较常用的鸢尾花数据集
它是python sklearn.datasets库里的数据集,可以直接加载,iris里有两个属性iris.data,iris.target。data是一个矩阵,每一列代表了萼片或花瓣的长宽,一共4列,每一行代表某个被测量的鸢尾植物,一共采样了150条记录。
如下所示,x1为所有样本属性值数据,y1为所有样本标签数据。

from sklearn.datasets import load_iris
x1 = load_iris().data
y1 = load_iris().target
print(x1)
print(y1)

3、结果

(1)利用train_test_split对样本进行训练集和测试集的划分,得到测试集如下所示

对应的编号与类型如下

先对其测试集进行预测,与原来的标签对比,得到结果如下,仅有一个分类错误

(2)最后对鸢尾花数据集进行分类,得到均方误差如下,误差较小

完整代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.metrics import mean_squared_errordef knn_classify(new_data, X, label, k):""":param new_data: 待预测数据:param X: 原始特征数据:param label: 标签数据:param k: k值-奇数:return: 分类结果"""# 1.构建已经分类好的原始数据集 -dataSetresult = []# 2.计算已知类别数据集中的点与当前点之间的距离dist = (np.sum((X - new_data) ** 2, axis=1)) ** 0.5# 3.将距离升序排列,然后选取距离最小的k个点dist_up = pd.DataFrame({"欧氏距离": dist, "类型": label})d_k_neighbor = dist_up.sort_values(by="欧氏距离")[: k]# 4.确定前k个点所在类别的出现频率res = d_k_neighbor.loc[:, "类型"].value_counts()# 5.选择频率最高的类别作为当前点的预测类别result.append(res.index[0])return result# 加载数据集 一共12个样本
rowdata = {'电影名称': ['无问西东', '后来的我们', '前任 3', '红海行动', '唐人街探案', '战狼', '宝贝当家', '美人鱼', '澳门风云 3', '谍影重重', '功夫熊猫 3', '叶问 3'],'搞笑镜头': [5, 8, 35, 2, 77, 7, 45, 21, 54, 9, 57, 3],'打斗镜头': [1, 5, 12, 108, 56, 115, 9, 5, 11, 31, 27, 65],'接吻镜头': [101, 89, 97, 5, 9, 8, 2, 35, 9, 0, 2, 2],'电影类型': ['爱情片', '动作片', '爱情片', '动作片', '喜剧片', '动作片', '喜剧片', '爱情片', '喜剧片', '动作片', '喜剧片', '动作片']
}
# print(rowdata)
# 为了更直观了解数据,将数据转化成了表格的形式
data = pd.DataFrame(rowdata)
print(data)# new_data = np.array(
#     [7, 10, 60]
# )
X = np.array([data["搞笑镜头"], data["打斗镜头"], data["接吻镜头"]]).T
label = data["电影类型"]x_train, x_test, y_train, y_test = train_test_split(X, label,test_size=0.3,random_state=3,shuffle=True,stratify=label)
print(x_test)
print(y_test)pred = []
for i in range(0, len(x_test)):pred.append(knn_classify(x_test[i], X, label, k=3))print(pred)x1 = load_iris().data
y1 = load_iris().target
# print(x1)
# print(y1)
x1_train, x1_test, y1_train, y1_test = train_test_split(x1, y1,test_size=0.3,random_state=1,shuffle=True)
pred1 = []
for i in range(0, len(x1_test)):pred1.append(knn_classify(x1_test[i], x1, y1, 3))
print("iris_test:\n", y1_test)
print("iris_predict:\n", pred1)mse = mean_squared_error(pred1, y1_test)
print("均方误差为=", mse)

KNN分类-python相关推荐

  1. KNN分类python实现

    import numpy as np import pandas as pd KNN算法过程 从训练集中选择离预测样本最近的K个样本. 根据这K个样本计算这个样本的值(属于哪个类别或具体数值) 对数据 ...

  2. python分类算法_用Python实现KNN分类算法

    本文实例为大家分享了Python KNN分类算法的具体代码,供大家参考,具体内容如下 KNN分类算法应该算得上是机器学习中最简单的分类算法了,所谓KNN即为K-NearestNeighbor(K个最邻 ...

  3. 用Python开始机器学习(4:KNN分类算法)

    转自: http://blog.csdn.net/lsldd/article/details/41357931 1.KNN分类算法 KNN分类算法(K-Nearest-Neighbors Classi ...

  4. 利用python语言实现分类算法_使用python实现kNN分类算法

    k-近邻算法是基本的机器学习算法,算法的原理非常简单: 输入样本数据后,计算输入样本和参考样本之间的距离,找出离输入样本距离最近的k个样本,找出这k个样本中出现频率最高的类标签作为输入样本的类标签,很 ...

  5. python实现knn分类_KNN图像分类及Python实现

    NN,Nearest Neighbor,最近邻 KNN,K-Nearest Neighbor,K最近邻 KNN分类的思路: 分类的过程其实是直接将测试集的每一个图片和训练集中的所有图片进行比较,计算距 ...

  6. 【机器学习算法】手动Python实现KNN分类算法,并用iris数据集检验模型效果

    目录 一.KNN算法Python实现 1.导入包 2. 画图,展示不同电影在图上的分布 3.训练样本和待测样本准备 4.计算待测样本点到每个训练样本点的距离 5.查找离待测样本点最近的K个训练样本点的 ...

  7. python KNN分类算法 使用鸢尾花数据集实战

    KNN分类算法,又叫K近邻算法,它概念极其简单,但效果又很优秀. 如觉得有帮助请点赞关注收藏啦~~~ KNN算法的核心是,如果一个样本在特征空间中的K个最相似,即特征空间中最邻近的样本中的大多数属于某 ...

  8. kNN分类原理以及python实现手写数字分类

    kNN算法分类原理 K最近邻(kNN,k-Nearest Neighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻 ...

  9. 使用Python处理KNN分类算法

    简介: 我们在这世上,选择什么就成为什么,人生的丰富多彩,得靠自己成就.你此刻的付出,决定了你未来成为什么样的人,当你改变不了世界,你还可以改变自己. KNN分类算法的介绍 KNN分类算法(K-Nea ...

最新文章

  1. 给定一个数组求里面数字拼在一起组成的最小数字
  2. quick 关于触摸的问题
  3. 利用Servlet实现用户永久登录
  4. Jenkins + gitlab webhook实现自动化部署
  5. SpringBoot2.0 基础案例(06):引入JdbcTemplate,和多数据源配置
  6. oracle出现关键字该如何处理
  7. 记录一次JDK版本问题,引发的思考
  8. 微信小程序实现抽奖大转盘
  9. 电脑底部任务栏没反应怎么办?
  10. 动态规划——(很特别的一个动态规划入门教程)#觉得原作者写的很有意思
  11. 迭代数据流分析中的逆后序(Reverse Postorder)
  12. 超级好用的 excel 导入导出框架:excel-import-export
  13. 萌娃投票程序php+mysql,PHP+MySql+jQuery实现的顶和踩投票功能
  14. system分区签名校验方法
  15. 入手评测 天玑1200和骁龙865对比哪个好
  16. 新一代iPhone后盖或将采用超级合金
  17. vue -- watermark水印添加方法
  18. MYSQL的删除和重装
  19. Idea中maven项目热部署,这么好用的IDE怎么会没有热部署,别傻了
  20. 微软、IBM联合开拓移动办公市场 PK苹果?

热门文章

  1. ulimit命令用法详解
  2. 高级指引 + Refs的使用
  3. 网易云音乐工程师,亲自揭晓评论实现技术(二)| 技术头条
  4. 1041A--Heist
  5. 家园防线 | 全栈物联网灌溉系统技术指南
  6. 分布式锁以及三种加锁方式
  7. python分析每月销售数据_CD销售数量分析(python)
  8. Opengl ES之EBO
  9. 数据采集之业务数据采集整理
  10. 使用Lodop控件打印表单和二维码