K最近邻算法

K近邻算法(KNN,k-Nearest Neighbor),每个样本都可以用它的最接近的K个邻近值来代表。

算法说明:

①输入没有标签的新数据,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。

②一般来说,只选择样本数据集中k个最相似的数据。k一般不大于20,最后选择k个数据中出现次数最多的分类,作为新数据的分类。

K近邻算法(KNN,k-Nearest Neighbor),每个样本都可以用它的最接近的K个邻近值来代表。

如图所示,包围圈上有两个梨一个苹果,因此问号的应该为梨。

K近邻算法(KNN,k-Nearest Neighbor),每个样本都可以用它的最接近的K个邻近值来代表。

计算已知类别数据集众多点与当前点之间的距离

按照距离递增次序排序

选取与当前点距离最小的k个点

确定前k个点所在类别的出现频率

返回前k个点出现频率最高的类别作为当前点的预测分类

如图所示K=3时?表示红三角;当K=5时?表示蓝方块

距离度量

欧式距离

   欧式距离也称欧几里得距离,是最常见的距离度量,衡量的是多维空间中两个点之间的绝对距离 。      

   在二维和三维空间中的欧式距离的就是两点之间的距离。 ·

二维空间里的欧氏距离公式:

三维空间里的欧氏距离公式:

n 维空间里的欧氏距离公式:

曼哈顿距离

在平面上,坐标(x1,y1)的i点与坐标(x2,y2)的j点的曼哈顿距离为:d(i,j)=|X1-X2|+|Y1-Y2|。

鸢尾花分类

①鸢尾花特征说明:  sepal length (cm), sepal width (cm), petal length (cm), petal width (cm)

②基于kNN算法使用sklearn实现鸢尾花分类

加载鸢尾花数据集  iris=datasets.load_iris()

分类的标签 iris.target

特征  iris.feature_names

类别  iris.target_names

划分训练集和测试集

x_train, x_test, y_train, y_test = train_test_split(iris.data,iris.target,test_size=0.3)

训练模型,创建实例 k=5

knn = KNeighborsClassifier(n_neighbors=5,metric="euclidean")

#n_neighbors近邻数量

#metric距离标准(euclidean欧式距离)

#训练 knntrain = knn.fit(x_train, y_train) print("训练",knntrain)

训练集得分     train_score = knn.score(x_train,y_train)

测试集得分     test_score = knn.score(x_test,y_test)

预测y的值     y_pred = knn.predict(x_test)

from sklearn import datasets
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
import matplotlib.pyplot as plt# 设置随机种子,保证结果可复现
np.random.seed(0)# 单元格 2:加载鸢尾花数据集并查看
iris = datasets.load_iris()
# 可取消注释查看数据集内容,包含数据、标签、特征名、类别名等信息
# iris  
# 查看前 10 条数据
iris.data[:10]  

# 查看数据形状(样本数、特征数)
iris.data.shape  
#(150, 4)
# 查看分类标签
iris.target  

 # 查看预测结果
y_predict  

# 用测试集评估模型准确率(标签精度),score 方法会返回模型在测试集上的预测准确率
score = knn.score(x_test, y_test)  
score  
#0.9777777777777777
# 单元格 7:选择最优 k 值(交叉验证法)
# k 值搜索范围
k_range = range(1, 31)  
# 用于存储不同 k 值对应的误差率
k_error = []  
x = iris.data
y = iris.target
k_sel = 0
min_error = 1  # 初始化最小误差for k in k_range:knn = KNeighborsClassifier(n_neighbors=k)# 6 折交叉验证,scoring='accuracy' 表示用准确率评估scores = cross_val_score(knn, x, y, cv=6, scoring='accuracy')  # 计算误差率(1 - 平均准确率)并添加到列表k_error.append(1 - scores.mean())  if (1 - scores.mean()) < min_error:min_error = 1 - scores.mean()k_sel = k# 输出最优 k 值和对应的最小误差
print("k:", k_sel, "min_error:", min_error)  
k: 12 min_error: 0.020000000000000018
# 单元格 8:可视化 k 值与误差率关系
# 绘制折线图,x 轴为 k 值,y 轴为误差率
plt.plot(k_range, k_error)  
plt.xlabel('Value of K for KNN')
plt.ylabel('Error')
plt.show()  



波士顿房价预测

# CRIM、连续型、城镇人均犯罪率 
# ZN、连续型、住宅用地中占地面积 
# INDUS、连续型、城镇非零售商用土地占比
# CHAS、离散型、查尔斯河虚拟变量(是否邻近河流)
# NOX、连续型、一氧化氮 (NO) 浓度
# AGE、连续型、1940年前建成的自住单位比例
# DIS、连续型、距波士顿5个就业中心的加权距离
# RAD、连连续型、径向高速公路可达性指数
# TAX、每万美元房产税率
# PTRATIO、连续型、城镇师生比例
# LSTAT、连续型、低收入人群占比
#RM、连续型、住宅平均房间数
import numpy as np  # 关键修复:导入numpy并简写为np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt# 加载数据集(适配新版sklearn)
boston = fetch_openml(name='boston', version=1, as_frame=True)
X = pd.DataFrame(boston.data, columns=boston.feature_names)
y = pd.Series(boston.target, name='MEDV')  # 目标变量:房价中位数(千美元)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体显示中文
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题
import seaborn as sns
import matplotlib.pyplot as plt
# 绘制特征相关性热力图
corr_matrix = X.join(y).corr()
sns.heatmap(corr_matrix, annot=True, fmt=".2f", cmap='coolwarm')# annot在单元格内显示数值
plt.title("特征与房价相关性")
plt.show()

# 将数据转换为均值为 0、标准差为 1的标准正态分布
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score# 划分训练集/测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)# 训练与评估
lr = LinearRegression()
lr.fit(X_train, y_train)
y_pred = lr.predict(X_test)print(f"线性回归性能:")
print(f"RMSE: {np.sqrt(mean_squared_error(y_test, y_pred)):.2f}")#反映预测值与真实值的绝对偏差
print(f"R²: {r2_score(y_test, y_pred):.4f}") # 衡量模型拟合优度

from sklearn.ensemble import RandomForestRegressor
from sklearn.pipeline import Pipeline# 构建流水线(标准化+模型)
pipeline = Pipeline([('scaler', StandardScaler()),('regressor', RandomForestRegressor(random_state=42))
])# 训练与评估
pipeline.fit(X_train, y_train)
y_pred_rf = pipeline.predict(X_test)
print(f"随机森林初始性能:")
print(f"RMSE: {np.sqrt(mean_squared_error(y_test, y_pred_rf)):.2f}")
print(f"R²: {r2_score(y_test, y_pred_rf):.4f}")

plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, alpha=0.6, color='blue') 
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'r--', lw=2)#X轴与Y轴范围
plt.xlabel('真实价格(千美元)')
plt.ylabel('预测价格(千美元)')
plt.title('真实值 vs 预测值')
plt.grid(True)
plt.show()

residuals = y_test - y_pred
plt.figure(figsize=(10, 6))
plt.scatter(y_pred, residuals, alpha=0.6, color='green')
plt.axhline(y=0, color='r', linestyle='--')
plt.xlabel('预测值')plt.ylabel('残差')
plt.title('残差分布图')
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96013.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96013.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/96013.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣 hot100 Day77

连做了几个动态规划的中等题&#xff0c;还是比较有套路的&#xff0c;这里只简要分析一下最长递增子序列&#xff0c;设定dp[i]为以nums[i]结尾的最长子序列&#xff0c;递推公式就好推了乘积最大子数组&#xff0c;和上面类似&#xff0c;但考虑到负负得正&#xff0c;所以需…

深入解析RabbitMQ与AMQP-CPP:从原理到实战应用

一、RabbitMQ安装 1.安装 RabbitMQ sudo apt install rabbitmq-serverRabbitMQ 的简单使用 # 启动服务 sudo systemctl start rabbitmq-server.service # 查看服务状态 sudo systemctl status rabbitmq-server.service # 安装完成的时候默认有个用户 guest &#xff0c;但是权限…

(论文速读)ViDAR:视觉自动驾驶预训练框架

论文题目&#xff1a;Visual Point Cloud Forecasting enables Scalable Autonomous Driving&#xff08;视觉点云预测实现可扩展的自动驾驶&#xff09; 会议&#xff1a;CVPR2024 摘要&#xff1a;与对通用视觉的广泛研究相比&#xff0c;可扩展视觉自动驾驶的预训练很少被探…

《Unity Shader入门精要》学习笔记二

1、基础光照&#xff08;1&#xff09;看世界的光模拟真实的光照环境来生成一张图像&#xff0c;需要考虑3种物理现象。光线从光源中被发射出来。光线和场景中的一些物体相交&#xff1a;一些光线被物体吸收了&#xff0c;而另一些光线被散射到其他方向摄像机吸收了一些光&…

Windchill 11.0使用枚举类型自定义实用程序实现生命周期状态管理

一、Enumerated Type Customization Utility 枚举类型自定义实用程序,可用于添加或编辑枚举类型的值,在Windchill 12.0+中可直接在类型和属性管理中编辑,如下图所示,而在Windchill 11.0中只能通过windchill shell启动程序,下面将详细介绍Windchill 11.0中启动并使用枚举类…

UGUI源码剖析(10):总结——基于源码分析的UGUI设计原则与性能优化策略

UGUI源码剖析&#xff08;第十章&#xff09;&#xff1a;总结——基于源码分析的UGUI设计原则与性能优化策略 本系列文章对UGUI的核心组件与系统进行了深入的源代码级分析。本章旨在对前述内容进行系统性总结&#xff0c;提炼出UGUI框架最核心的设计原则&#xff0c;并基于这些…

STM32N6引入NPU,为边缘AI插上“隐形的翅膀”

2025年的春天格外特别。伴随着人形机器人、DeepSeek的强势刷屏&#xff0c;AI成了最有前景的赛道。万物皆可AI&#xff0c;万物也在寻觅用上AI或者让AI“转正”的“aha moment”。 帮助机器更好地“思考”&#xff0c;让更多的AI走向边缘&#xff0c;是AI发展的重要趋势之一。…

演练:使用VB开发多智能体协作的荣格八维分析器

在大语言模型高速发展的时代&#xff0c;我们面对困难的语义分析任务&#xff0c;通过构建智能体进行处理是一个流行趋势。本文将介绍如何使用 Visual Basic .NET 开发一个多智能体协作系统&#xff0c;用于分析聊天记录中特定人物的荣格八维人格类型。 本文使用 CC-BY-NC-SA …

llamafactory使用qlora训练

llamafactory使用qlora训练 1.环境搭建 conda create -n qlora python3.10 -y conda activate qlora# 克隆LLaMA-Factory仓库 git clone https://github.com/hiyouga/LLaMA-Factory.git# 进入仓库目录 cd LLaMA-Factory# 切换到0.9.4版本 git checkout v0.9.4pip install -e .2…

模型微调/量化技术整理

一、模型微调技术1.模型微调简介大模型微调(Fine-tuning)&#xff0c;是指在已经预训练好的大语言模型基础上&#xff08;基座模型&#xff09;&#xff0c;使用特定的数据集进行进一步训练&#xff0c;让模型适应特定任务或领域。通常LLM的预训练是无监督的&#xff0c;但微调…

实践笔记-VSCode与IDE同步问题解决指南;程序总是进入中断服务程序。

一、VSCode 修改文件后&#xff0c;IDE 未同步如果你在 VSCode 中异步修改了项目文件内容&#xff0c;但 S32DS 或 Keil&#xff08;等集成开发环境&#xff09;中的项目没有同步更新&#xff0c;有两个解决方法&#xff1a;检查文件是否已保存&#xff1a;确保 VSCode 中修改的…

C#WPF实战出真汁04--登录功能实现

1、登录功能实现要点对于登录系统&#xff0c;应该注意几个要点&#xff1a;用户认证流程设计&#xff0c;密码存储与验证&#xff0c;会话管理&#xff0c;防暴力破解措施&#xff0c;错误处理与提示2、登录功能的视图模型首先在xaml文件中必须指定该页面使用的视图模型&#…

鸿蒙入门简化版

第一步&#xff1a; 首先下载DEVStudio https://developer.huawei.com/consumer/cn/deveco-studio/ 第二步&#xff1a; 了解基本的ArkTs语言 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/introduction-to-arkts 第三步 &#xff1a; 教学视频有两个途径&a…

day25|学习前端js

函数声明&#xff0c;被提升&#xff08;hoisting&#xff09;。函数表达式必须先定义才能用。对象解构&#xff0c;按属性名数组解构按顺序点运算符. 对象.属性名哪些可迭代&#xff08;可以被for..of循环的东西&#xff09;&#xff1a;array&#xff0c;string&#xff0c;m…

quic协议与应用开发

quic为什么出现&#xff1f;quic主要是为了解决TCP协议的局限性而提出的&#xff0c;具体来说是要解决如下问题&#xff1a;1. 加密连接建立时间长TCP协议是传输层协议&#xff0c;而TLS是会话层协议&#xff0c;在Linux等主流操作系统中TCP在内核实现而TLS一般在用户态实现&am…

【浅学】tflite-micro + ESP32S3 + VScode + ESP-IDF 基于例程快速实现自己的图像分类模型训练部署全流程

如果你用Pytorch训练的模型那么可以参考我的步骤&#xff0c;使用的是Tensorflow的话参考官方文档即可&#xff0c;但流程都是一样的&#xff0c;每一步我都会提到部分操作细节及注意事项 官方教程 要详细学习的话tflite-micro里的微控制器章节下都详细看&#xff08;页面左侧…

【HarmonyOS】应用设置全屏和安全区域详解

【HarmonyOS】应用设置全屏和安全区域详解 一、前言 IDE创建的鸿蒙应用&#xff0c;默认采取组件安全区布局方案。顶部会预留状态栏区域&#xff0c;底部会预留导航条区域。这就是所谓的安全区域。 如果不处理&#xff0c;界面效果很割裂。所以业内UI交互设计&#xff0c;都会设…

openfeign 只有接口如何创建bean的

OpenFeign 能够为纯接口创建 Spring Bean&#xff0c;其核心机制是通过动态代理和 Spring 的 FactoryBean 机制实现的。以下是详细的工作原理&#xff1a;1. EnableFeignClients 注解的启动在 Spring Boot 主类上添加 EnableFeignClients 注解&#xff1a;SpringBootApplicatio…

【展厅多媒体】互动地砖屏怎么提升展厅互动感的?

在数字化展厅设计中&#xff0c;互动地砖屏 正成为提升观众参与度的重要工具。这种融合视觉科技与交互体验的装置&#xff0c;通过动态影像与即时反馈&#xff0c;让参观者从被动观看转变为主动探索&#xff0c;从而大幅增强展厅的互动感。 Led地面互动屏的优势在于其强大的视…

AI赋能电力巡检:变压器漏油智能检测系统全解析

&#x1f525; AI赋能电力巡检&#xff1a;变压器漏油智能检测系统全解析 &#x1f4d6; 前言 在电力系统的日常运维中&#xff0c;变压器作为核心设备&#xff0c;其安全运行直接关系到整个电网的稳定性。传统的人工巡检方式不仅效率低下&#xff0c;还存在安全隐患和漏检风险…