1.k-近邻算法(KNN)

2023-10-27

概念

在这里插入图片描述
根据你的“邻居”判断你的类别
在这里插入图片描述

流程

在这里插入图片描述

KNN api 初步使用

机器学习流程

在这里插入图片描述

Scikit-learn工具

在这里插入图片描述

安装

pip3 install scikit-learn==0.19.1

注:需要Numpy,Scipy等库的支持
Python (>= 3.5),
NumPy (>= 1.11.0),
SciPy (>= 0.17.0),
joblib (>= 0.11).

检验安装

import sklearn

Scikit-learn包含内容

在这里插入图片描述

K-近邻算法API

在这里插入图片描述

测试

from sklearn.neighbors import KNeighborsClassifier

# 构造数据
x = [[1], [5], [10], [20]]
y = [2, 2, 6, 6]

# 训练模型
# 实例化估计器对象
estimator = KNeighborsClassifier(n_neighbors=1)

# 调用fit方法 进行训练
estimator.fit(x, y)

# 数据预测
ret = estimator.predict([[2]])
print(ret)

ret = estimator.predict([[30]])
print(ret)

在这里插入图片描述

K值的选择

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

k近邻搜索算法

在这里插入图片描述

KD树

why

在这里插入图片描述

what

在这里插入图片描述

how

在这里插入图片描述
在这里插入图片描述

树的建立

在这里插入图片描述

  • 多个维度,选择最分散的一个维度排序、取中位数进行第一次划分(这里选择x轴)
  • 根据第一次选择的维度的中位数进行左右划分(2、4、5 | 8、9),将对应的另一维度数值进行排序、取中位数划分
  • 重复上两步,直到无法划分
    在这里插入图片描述

在这里插入图片描述

最近领域搜索

在这里插入图片描述

例:查(2.1,3.1)

在这里插入图片描述

例:查(2,4.5)

在这里插入图片描述

KD树总结

在这里插入图片描述

scikit-learn 数据集

在这里插入图片描述

sklearn小数据集

在这里插入图片描述

sklearn大数据集

在这里插入图片描述

sklearn 数据集返回值介绍

在这里插入图片描述

from sklearn.datasets import load_iris,fetch_20newsgroups

# 小数据集获取
iris = load_iris()
# print(iris)

# 大数据集获取
# news = fetch_20newsgroups()
# print(news)


# 数据集属性描述
print("数据集特征值是:\n", iris.data)
print("数据集目标值是:\n", iris["target"])
print("数据集特征值名字是:\n", iris.feature_names)
print("数据集目标值名字是:\n", iris.target_names)
print("数据集描述是:\n", iris.DESCR)

在这里插入图片描述

数据可视化

在这里插入图片描述

from sklearn.datasets import load_iris, fetch_20newsgroups
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
from pylab import mpl

# 设置显示中文字体
mpl.rcParams['font.sans-serif'] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams['axes.unicode_minus'] = False


# 小数据集获取
iris = load_iris()

# 数据可视化
iris_d = pd.DataFrame(data=iris.data, columns=["Sepal_Length", "Sepal_Width", "Petal_length", "Petal_Width"])
print(iris_d)
iris_d["target"] = iris.target


def iris_plot(data, col1, col2):
    sns.lmplot(x=col1, y=col2, data=data,hue="target",fit_reg=False)
    plt.xlabel(col1)
    plt.ylabel(col2)
    plt.title("种类分布图")
    plt.show()

iris_plot(iris_d, "Sepal_Width", "Petal_Length")

在这里插入图片描述

在这里插入图片描述

数据集划分

在这里插入图片描述

from sklearn.datasets import load_iris, fetch_20newsgroups
from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22, test_size=0.2)
print("训练集的特征值是:\n", x_train)
print("训练集的目标值是:\n", y_train)
print("测试集的特征值是:\n", x_test)
print("测试集的目标值是:\n", y_test)

x_train1, x_test1, y_train1, y_test1 = train_test_split(iris.data, iris.target, random_state=2, test_size=0.2)
print("测试集的目标值是:\n", y_test)
print("测试集1的目标值是:\n", y_test1)

在这里插入图片描述

特征预处理

在这里插入图片描述

归一化

在这里插入图片描述

公式

在这里插入图片描述
在这里插入图片描述

api

在这里插入图片描述

标准化

在这里插入图片描述

公式

在这里插入图片描述
在这里插入图片描述

api

在这里插入图片描述

预处理总结

在这里插入图片描述

案例:鸢尾花种类预测

数据集介绍

在这里插入图片描述

# @Author : CG
# @File : 03-鸢尾花种类预测.py
# @Time : 2022/2/8 17:19
# @contact: gchencode@126.com

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

# 1.获取数据集
iris = load_iris()

# 2.数据基本处理 不同的random_state将导致训练集和测试集的不同,进而导致最终准确率不同
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)

# 3.特征工程
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

#fit(): 用来计算mean(均值)和std(标准差),以便后面进行数据的标准化
#transform(): 根据fit()函数计算的mean和std对数据进行标准化
#fit_transform(): 是fit()函数和transform()函数的组合,先进行fit,之后再进行transform(标准化)


# fit_transform方法是fit和transform的结合,
# fit_transform(X_train) 意思是找出X_train的平均值和标准差,并应用在X_train上。
# 这时对于X_test,我们就可以直接使用transform方法。
# 因为此时StandardScaler已经保存了X_train的平均值和标准差。

#因为我们必须保证,测试集在进行标准化的时候,使用的是统一的缩放参数,即为均值和标准差。所以先使用fit_transform()在训练集上,再使用transform()在测试集上。



# 4.机器学习(模型训练)knn
# 实例化估计器
estimator = KNeighborsClassifier(n_neighbors=5)
# 模型训练
estimator.fit(x_train, y_train)

# 5.模型评估
# 预测值结果输出
y_pre = estimator.predict(x_test)
print("预测值是:\n", y_pre)
print("预测值与真实值的对别是:\n", y_pre == y_test)
# 准确率计算  
score = estimator.score(x_test, y_test)
print(score)

在这里插入图片描述

KNN算法总结

优点

在这里插入图片描述

缺点

在这里插入图片描述

交叉验证,网格搜索

什么是交叉验证

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

什么是网格搜索

在这里插入图片描述

交叉验证,网格搜索(模型选择与调优)API

在这里插入图片描述

# @Author : CG
# @File : 03-鸢尾花种类预测.py
# @Time : 2022/2/8 17:19
# @contact: gchencode@126.com

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

# 1.获取数据集
iris = load_iris()

# 2.数据基本处理
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)

# 3.特征工程
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

#fit(): 用来计算mean(均值)和std(标准差),以便后面进行数据的标准化
#transform(): 根据fit()函数计算的mean和std对数据进行标准化
#fit_transform(): 是fit()函数和transform()函数的组合,先进行fit,之后再进行transform(标准化)


# fit_transform方法是fit和transform的结合,
# fit_transform(X_train) 意思是找出X_train的平均值和标准差,并应用在X_train上。
# 这时对于X_test,我们就可以直接使用transform方法。
# 因为此时StandardScaler已经保存了X_train的平均值和标准差。

#因为我们必须保证,测试集在进行标准化的时候,使用的是统一的缩放参数,即为均值和标准差。所以先使用fit_transform()在训练集上,再使用transform()在测试集上。



# 4.机器学习(模型训练)knn
# 实例化估计器
estimator = KNeighborsClassifier(n_neighbors=5)

# 模型调优 - 交叉验证,网格搜索
param_grid = {"n_neighbors": [1, 3, 5, 7]}
estimator = GridSearchCV(estimator, param_grid=param_grid, cv=5)

# 模型训练
estimator.fit(x_train, y_train)

# 5.模型评估
# 预测值结果输出
y_pre = estimator.predict(x_test)
print("预测值是:\n", y_pre)
print("预测值与真实值的对别是:\n", y_pre == y_test)
# 准确率计算
score = estimator.score(x_test, y_test)
print(score)

# 交叉验证、网格搜索结果
print("交叉验证、网格搜索的最好结果是:\n", estimator.best_score_)
print("交叉验证、网格搜索的最好模型是:\n", estimator.best_estimator_)
print("交叉验证、网格搜索的模型结果是:\n", estimator.cv_results_)

在这里插入图片描述

常见距离公式

欧式距离

在这里插入图片描述

曼哈顿距离

在这里插入图片描述

切比雪夫距离

在这里插入图片描述

闵可夫斯基距离

在这里插入图片描述

常见距离小结

在这里插入图片描述

其他距离公式

标准化欧式距离

在这里插入图片描述

余弦距离

在这里插入图片描述

汉明距离

在这里插入图片描述
在这里插入图片描述

杰卡德距离

在这里插入图片描述

马氏距离

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

1.k-近邻算法(KNN) 的相关文章

  • 没有任何元数据的 zip 文件

    我想找到一种简单的方法来压缩一堆文件 而无需任何文件元数据 例如时间戳 这zip命令似乎总是保留元数据 我没有找到禁用元数据的方法 我希望解决方案是一个命令或最多一个 python 脚本 谢谢 正如一些帖子已经指出的那样 zip 标头中的大
  • Django:如何测试“HttpResponsePermanentRedirect”

    我正在为我的 django 应用程序编写一些测试 在我看来 它使用 HttpResponseRedirect 重定向到其他一些网址 那么我该如何测试呢 姜戈TestCase类有一个方法assertRedirects https docs d
  • 如何在Python中循环并存储自变量中的值

    我对 python 很陌生 所以这听起来可能很愚蠢 我进行了搜索 但没有找到解决方案 我在 python 中有一个名为 ExcRng 的函数 我可以对该函数执行什么样的 for 循环 以便将值存储在独立变量中 我不想将它们存储在列表中 而是
  • 一次将Python dict的内容分配给多个变量?

    我想做这样的事情 def f return a 1 b 2 c 3 a b f or a b f IE 这样 a 被分配为 1 b 被分配为 2 并且 c 是未定义的 这与此类似 def f return 1 2 a b f 依赖于变量名称
  • python - 是否可以扩展 xml-rpc 可以序列化的事物集?

    我看到几个问题询问如何发送numpy ndarray通过 xml rpc 调用 这不能开箱即用 因为正如 xml rpc 中所述docs https docs python org 2 library xmlrpclib html 有一组固
  • 在python中将文本文件解析为列表

    我对 Python 完全陌生 我正在尝试读取包含单词和数字组合的 txt 文件 我可以很好地读取 txt 文件 但我正在努力将字符串转换为我可以使用的格式 import matplotlib pyplot as plt import num
  • Python 3 __getattribute__ 与点访问行为

    我读了一些关于 python 的对象属性查找的内容 这里 https blog ionelmc ro 2015 02 09 understanding python metaclasses object attribute lookup h
  • Paramiko - 使用私钥连接 - 不是有效的 OPENSSH 私钥/公钥文件

    我正在尝试找到解决方案 但无法理解我做错了什么 在我的 Linux 服务器上 我运行了以下命令 ssh keygen t rsa 这产生了一个id rsa and id rsa pub file 然后我将它们复制到本地并尝试运行以下代码 s
  • Pandas重置索引未生效[重复]

    这个问题在这里已经有答案了 我不确定我在哪里误入歧途 但我似乎无法重置数据帧上的索引 当我跑步时test head 我得到以下输出 正如您所看到的 数据帧是一个切片 因此索引超出范围 我想做的是重置该数据帧的索引 所以我跑test rese
  • 无法打开 Python。错误 0xc000007b

    我最近一直在学习 Python 3 我在我的上网本 32 位 Windows 7 上创建简单的小程序没有任何问题 当我将它安装在我的上网本上时 我没有遇到任何问题 但现在我已经开始使用它了 我想将它安装在我的台式机上 并且我有一个 我的桌面
  • 创建一个类似于 Tkinter 的表

    我希望创建类似于 Tkinter 中的表格的东西 但它不一定是这样的 例如 我想创建标题 Name1 Name2 Value 并在每个标题下面有几个空白行 然后 我希望稍后用我计算的值或名称的字符串值填充这些行 因此是标签 对于 Name2
  • matplotlib matshow 标签

    我一个月前开始使用 matplotlib 所以我仍在学习 我正在尝试用 matshow 制作热图 我的代码如下 data numpy array a reshape 4 4 cax ax matshow data interpolation
  • Python 中的 @staticmethod 与 @classmethod

    方法和方法有什么区别装饰的 https peps python org pep 0318 with staticmethod http docs python org library functions html staticmethod和
  • 如何在Python和Selenium中通过标签名称或id获取元素[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Python 和 Selenium 获取输入 但它向我显示错误 我该如何解决这个错误 inputElement send keys getStock getStocklFunc 0 Error i
  • 为什么我用 beautifulSoup 刮的时候有桌子,但没有 pandas

    尝试抓取条目页面转换为制表符分隔格式 主要拉出序列和 UniProt 登录号 当我跑步时 url www signalpeptide de index php sess m listspdb bacteria s details id 10
  • 为什么实现 __iter__ 的对象不被识别为可迭代的?

    假设您使用包装对象 class IterOrNotIter def init self self f open tmp toto txt def getattr self item try return self getattribute
  • 如何禁止 celery 中的 pickle 序列化

    Celery 默认使用 pickle 作为任务的序列化方法 如中所述FAQ http ask github com celery faq html isn t using pickle a security concern 这代表一个安全漏
  • TypeError:无法使用抽象方法实例化抽象类 <...>

    这是我的代码 from abc import ABC from abc import abstractmethod class Mamifiero ABC docstring for Mamifiero def init self self
  • 如何将列表字典写入字符串而不是 CSV 文件?

    This 堆栈溢出问题 https stackoverflow com questions 37997085 how to write a dictionary of lists to a csv file将列表字典写入 CSV 文件的答案
  • 异步和协程与任务队列

    我一直在阅读有关 python 3 中的 asyncio 模块的内容 以及更广泛地了解 python 中的协程的内容 但我不明白是什么让 asyncio 成为如此出色的工具 我的感觉是 你可以用协程做的所有事情 通过使用基于多处理模块 例如

随机推荐

  • c ++中的Sort函数

    简介 c 标准库里的Sort 函数是 c 自带的一种排序函数 可替换以前的冒泡排序和选择排序 1 Sort函数包含在头文件 include
  • mybatis 项目配置 xml文件时 报错提示(The reference to entity "useSSL" must end with the ';'

    最近在配置mybatis项目的xml配置文件的时候 出现错误提示 The reference to entity useSSL must end with the delimiter 报错行为
  • 使用pandas从mysql中导出数据

    import pandas as pd import MySQLdb handle MySQLdb connect host xxx xxx xxx xxx user root port xxxx passwd xxxxxx db xxxx
  • 区块链技术与应用实验报告(实验七)

    文章目录 区块链技术与应用实验报告 实验七 关于作者 作者介绍 一 实验目的及要求 二 实验原理简介 三 实验环境 四 实验步骤 1 运行Goland界面 2 编译Go的Hello World程序 3 实现区块的结构 4 区块组成链式结构
  • 世上最全Spring全家桶学习笔记,Spring永远的神

    前言 Spring 框架自诞生以来一直备受开发者青睐 还有人亲切的称之为 Spring 全家桶 毋庸置疑 Spring 早已成为 Java 后端开发的行业标准 许多公司选择 Spring 作为基础的开发框架 大部分Java 后端程序员在日常
  • 中国光刻机行业供需前景与十四五发展态势研究报告2022版

    中国光刻机行业供需前景与十四五发展态势研究报告2022版 HS HS HS HS HS HS HS HS HS HS HS HS 修订日期 2021年11月 搜索鸿晟信合研究院查看官网更多内容 第一章 光刻机行业相关概述 1 1 光刻机的基
  • 手写promise加载图片

    div div
  • 如何开发高质量的软件 - 通过测试集中型的软件开发方法来提高软件质量

    构建技术系统所要做的工作是非常繁重的 同时还需要专业知识 语言和协议 编码与调试 测试与重构 James Garrett 概述 每年各个企业都在努力实现企业的主要目标 通常 这都是通过实现基于度量指标的性能目标 可能包括质量目标 以及利用最
  • 八字精批API接口

    接口平台 https api yuanfenju com 开发文档 https doc yuanfenju com 支持格式 JSON 请求方式 HTTP POST
  • 【QT开发笔记-基础篇】

    本节对应的视频讲解 B 站 视 频 https www bilibili com video BV11G411x7hN Qt 中的单选按钮类是 QRadioButton 它是一个可以切换选中 checked 或未选中 unchecked 状
  • Docker基础(八)—容器卷

    什么是数据卷 数据卷 Data Volumes 是一个可供容器使用的特殊目录 它将主机操作系统目录直接映射进容器 类似于 Linux 中的 mount 行为 数据卷可以提供很多有用的特性 数据卷可以在容器之间共事和重用 容器间传递数据将变得
  • 简单版的数组实现哈希表

    package com wei mybatisflex import java util ArrayList import java util List 用数组实现哈希表 public class ArrayToHash 键值对定义 cla
  • [C++]观察者模式

    当对象间存在一对多关系时 则使用观察者模式 Observer Pattern 比如 当一个对象被修改时 则会自动通知它的依赖对象 观察者模式属于行为型模式 C 代码如下 此文件包含 main 函数 程序执行将在此处开始并结束 参考大话设计模
  • 【Xilinx】如何自动格式化Verilog代码

    开发环境Vivado VSCode Xilinx 自动格式化Verilog代码 前言 一 安装VSCode并修改Vivado的默认编辑器 二 安装Verilog插件 1 语法插件 2 格式化插件 三 演示 如何代码格式化 1 插件演示 2
  • 基于SSM框架的教务管理系统

    前言 教务管理系统是一种基于计算机技术的信息管理系统 主要用于学校 教育机构等管理教务事务 其功能包括但不限于 主要分为三类角色 管理员 教师和学生 系统管理 包括用户管理 角色管理 权限管理 通知管理等 信息管理 包括学生信息 教师信息
  • 2019秋招:460道Java后端面试高频题答案版【模块五:计算机网络】

    点击上方蓝字关注我吧 写在前面 计算机网络 计算机操作系统这两个 兄弟 是所有开发岗位都需要 结拜 的 不管你是 Java C 还是测试 对于后端开发的童鞋来说 计算机网络
  • 12-数据结构-数组、矩阵、广义表

    数组 矩阵 广义表 目录 数组 矩阵 广义表 一 数组 二 矩阵 三 广义表 一 数组 这一章节理解基本概念即可 数组要看清其实下标是多少 并且二维数组 存取数据 要先看清楚是按照行存还是按列存 按行则是正常一行一行的去读写 按列则是 从左
  • LA@相似对角化判定定理和计算方法

    文章目录 方阵相似对角化 引言 相似对角化变换矩阵的性质 构造对角化变换矩阵 方阵可对角化判定定理 推论 无重根特征值的方阵可以对角化 含重根特征值的方阵的对角化判定定理 总结 综合 对角化步骤归纳 例 特征值计算 构造相似变换阵 下结论
  • 51单片机串口通信(UART)

    项目描述 1 串口工作方式为1 8位UART 波特率可变 无校验位 2 通信数据格式为 1位起始位 8位数据位 1位停止位 3 上电后MCU给上位机发送问候语 之后等待上位机的信息 MCU和上位机的通信为收发交替进行 MCU接收到的信息会实
  • 1.k-近邻算法(KNN)

    概念 根据你的 邻居 判断你的类别 流程 KNN api 初步使用 机器学习流程 Scikit learn工具 安装 pip3 install scikit learn 0 19 1 注 需要Numpy Scipy等库的支持 Python