当前位置: 首页 > news >正文

机器学习 --- KNN算法

机器学习 — KNN算法


文章目录

  • 机器学习 --- KNN算法
  • 一,sklearn机器学习概述
  • 二,KNN算法---分类
    • 2.1样本距离判断
    • 2.2 KNN算法原理
    • 2.3 KNN缺点
    • 2.4 API
    • 2.5 使用sklearn中鸢尾花数据集实现KNN


一,sklearn机器学习概述

获取数据、数据处理、特征工程后,就可以交给预估器进行机器学习,流程和常用API如下。

1.实例化预估器(估计器)对象(estimator), 预估器对象很多,都是estimator的子类(1)用于分类的预估器sklearn.neighbors.KNeighborsClassifier k-近邻sklearn.naive_bayes.MultinomialNB 贝叶斯sklearn.linear_model.LogisticRegressioon 逻辑回归sklearn.tree.DecisionTreeClassifier 决策树sklearn.ensemble.RandomForestClassifier 随机森林(2)用于回归的预估器sklearn.linear_model.LinearRegression线性回归sklearn.linear_model.Ridge岭回归(3)用于无监督学习的预估器sklearn.cluster.KMeans 聚类
2.进行训练,训练结束后生成模型estimator.fit(x_train, y_train)
3.模型评估(1)方式1,直接对比y_predict = estimator.predict(x_test)y_test == y_predict(2)方式2, 计算准确率accuracy = estimator.score(x_test, y_test)
4.使用模型(预测)
y_predict = estimator.predict(x_true)

二,KNN算法—分类

2.1样本距离判断

  • 欧氏距离
    在这里插入图片描述
  • 曼哈顿距离
    在这里插入图片描述

2.2 KNN算法原理

K-近邻算法(K-Nearest Neighbors,简称KNN),根据K个邻居样本的类别来判断当前样本的类别;

如果一个样本在特征空间中的k个最相似(最邻近)样本中的大多数属于某个类别,则该类本也属于这个类别

比如: 有10000个样本,选出7个到样本A的距离最近的,然后这7个样本中假设:类别1有2个,类别2有3个,类别3有2个.那么就认为A样本属于类别2,因为它的7个邻居中 类别2最多(近朱者赤近墨者黑)

2.3 KNN缺点

​ 对于大规模数据集,计算量大,因为需要计算测试样本与所有训练样本的距离。

​ 对于高维数据,距离度量可能变得不那么有意义,这就是所谓的“维度灾难”

​ 需要选择合适的k值和距离度量,这可能需要一些实验和调整

2.4 API

class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, algorithm='auto')
参数:                                             
(1)n_neighbors: int, default=5, 默认情况下用于kneighbors查询的近邻数,就是K
(2)algorithm:{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, default=’auto’。找到近邻的方式,注意不是计算距离		的方式,与机器学习算法没有什么关系,开发中请使用默认值'auto'
方法:(1) fit(x, y) 使用X作为训练数据和y作为目标数据  (2) predict(X)	预测提供的数据,得到预测数据 

2.5 使用sklearn中鸢尾花数据集实现KNN

# 引入数据集
from sklearn.datasets import load_iris
# 引入KNN算法
from sklearn.neighbors import KNeighborsClassifier
# 引入标准化工具
from sklearn.preprocessing import StandardScaler
#引入数据集划分
from sklearn.model_selection import train_test_split
#引入joblib
import joblib#训练函数
def train():#加载数据iris = load_iris()#加载鸢尾花数据集X = iris.data#鸢尾花特征数据y = iris.target#鸢尾花标签数据#数据集划分X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=22)#数据标准化transfer = StandardScaler()X_train = transfer.fit_transform(X_train)#创建knn模型model = KNeighborsClassifier(n_neighbors=5)#使用训练集训练模型model.fit(X_train,y_train)#测试集的预测结果X_test = transfer.transform(X_test)score = model.score(X_test,y_test)print("准确率:",score)#保存模型if score  > 0.9:joblib.dump(model,"./model/knn.pkl")joblib.dump(transfer,"./model/transfer.pkl")else:print("模型效果不佳,重新训练")# 推理函数
# 新数据预测
def detect():#加载数据model = joblib.load("./model/knn.pkl")transfer = joblib.load("./model/transfer.pkl")#新数据推理x_new = [[1,2,3,4]]x_new = transfer.transform(x_new)y_pred = model.predict(x_new)print("预测结果:",y_pred)if __name__ == '__main__':train()detect()
准确率: 0.9333333333333333
预测结果: [1]
http://www.dtcms.com/a/192420.html

相关文章:

  • uniapp在APP上如何使用websocket--详解
  • 驱动-定时-秒-字符设备
  • 2025年叉车证备考题库精选含答案
  • Kotlin 和 Java 混合开发时需要注意哪些问题
  • Vue 3 实现后端 Excel 文件流导出功能(Blob 下载详解)
  • 软考软件评测师——软件工程之系统维护
  • 开机自启动python程序_ubuntu22.04
  • 帧差法识别
  • Ubuntu下配置VScode出现#include错误请更新includePath的解决方法
  • Servlet原理
  • 织梦Dedecms模板文件名介绍与说明
  • Qt信号槽机制与UI设计完全指南:从基础原理到实战应用
  • 基于windows环境Oracle主备切换之后OGG同步进程恢复
  • CSP-J/S初赛知识点:计算机网络与Internet基本概念知识点
  • GCC 使用说明
  • maven报错 You have to use a classifier to attach supplemental artifacts
  • EtherCAT转EtherNet/IP解决方案-泗博网关CEI-382
  • AI、机器学习、深度学习:一文厘清三者核心区别与联系
  • SSM项目集成redis、Linux服务器安装redis
  • idea启动报错:java: 警告: 源发行版 11 需要目标发行版 11(亲测解决)
  • InforSuite AS 可以发布django和vue项目是否可行
  • L - Strange Mirroring (思维)
  • 大模型浪潮下,黑芝麻智能高性能芯片助力汽车辅助驾驶变革
  • maven dependencyManagement标签作用
  • MyBatis XML配置和入门使用
  • <C++> MFC自动关闭对话框(MessageBoxTimeout)
  • Java对象的GC回收年龄的研究
  • 反病毒反垃圾U-Mail邮件系统从容应对
  • python制造一个报错
  • websocket简介与基本使用