机器学习——Day05

发布时间:2026/10/25 14:21:38

机器学习——Day05 一、K-近邻算法1.K-近邻算法简介1.1什么是K-近邻算法根据你的“邻居”来推断出你的类型是一种分类算法1.2K-近邻算法KNN概念定义如果一个样本在特征空间中的k个最相似即特征空间中最邻近的样本中的大多数属于某一个类别则该样本也属于这个类别距离公式一般使用欧氏距离2.K-近邻算法api初步使用使用Scikit-learnsklearn.neighbors.KNeighborsClassifier(n_neighbors5) n_neighbors选定参考几个邻居 int默认是5 k_neighbors查询默认使用的邻居数2.1代码实现过程from sklearn.neighbors import KNeighborsClassifier #构造数据集 x [[0],[1],[2],[3]] y [0,0,1,1,] #模型训练 ##实例化API estimator KNeighborsClassifier(n_neighbors2) ##使用fit方法进行训练 estimator.fit(x,y) estimator.predict([[1]])3.距离度量3.1 欧氏距离3.2 曼哈顿距离3.3 切比雪夫距离3.4 闵可夫斯基距离缺点将各个分量的单位没有区分未考虑到各个分量的分布期望、方差等可能是不同的3.5 标准化欧氏距离针对欧氏距离的缺点而改进的3.6 余弦距离3.7 汉明距离两个等长字符串s1和s2的汉明距离为将其中一个变为另一个所需要做的最小字符替换次数汉明重量是字符串相对于同样长度的零字符串的汉明距离也就是说他是字符串中非零的元素个数。因此向量空间中的元素a和b之间的汉明距离等于他们汉明重量的差a-b3.8 杰卡德距离3.9 马氏距离与单位无关排除变量之间的相关性干扰计算建立在总体样本的基础上如果拿同样的两个样本放入不同的总体中最后计算得出的两个样本间的马氏距离通常是不相同的除非两个总体的协方差矩阵碰巧相同计算过程中要求总体样本数大于样本的维数否则得到的总体样本协方差矩阵逆矩阵不存在二、K值选择近似误差对现有训练集的训练误差关注训练集如果近似误差过小可能会出现过拟合现象对现有的训练集能有很好的预测但对未知的测试样本将会出现较大误差的预测。模型本身不是最接近最佳模型估计误差对测试机的测试误差关注测试集估计误差小说明对未知数据的预测能力好模型本身最接近最佳模型1.K值过小相当于用较小的领域中的训练实例进行预测“学习”近似误差会减小只有与输入实例较近或相似的训练实例才会对预测结果起作用与此同时带来的问题是“学习”的估计误差会增大即K值的减小意味着整体模型变得复杂容易发生过拟合2.K值过大有点事可以减少学习的估计误差但缺点是学习的近似误差会增大。这时候与输入实例较远不相似的训练实例也会对预测起作用使预测发生错误并且K值的增大意味着整体模型变得简单3.KNN为训练样本数完全不足取因为此时无论输入实例是什么都只是简单的预测它属于在训练实例中最多的类模型过于简单忽略了训练实例中大量有用信息三、kd树1.kd树简介1.1 什么是kd树根据KNN每次需要预测一个点时我们都需要计算训练数据集里每个点到这个点的距离然后选出距离最近的K个点进行投票当数据集很大时计算成本很高针对N个样本D个特征的数据集其算法复杂度为O(DN^2)kd树为了避免每次都重新计算一遍距离算法会把距离信息保存在一颗树里这样在计算之前从梳理查询距离信息尽量避免重新计算。其基本原理是如果A和B距离很远B和C距离很近那么A和C的距离也很远。有了这个信息就可以在合适的时候跳过距离远的点1.2 原理2.构造方法构造根节点是根节点对应于K维空间中包含所有实例点的超矩形区域通过递归的方法不断对K维空间进行切分生成子节点。再超巨星区域上选择一个坐标轴和在此坐标轴上的一个切分点确定一个超平面这个超平面通过选定的切分点并垂直于选定的坐标轴将当前超巨星区域切分为左右两个子区域子结点这是实例被分到两个子区域上述过程直到子区域内没有实例时终止终止时的结点为叶结点。在此过程中将实例保存在相应的节点上通常循环的选择坐标轴对空间切分选择训练实例点在坐标轴上的中位数为切分点这样得到的kd树是平衡的平衡二叉树它是一棵空树或其左子树和右子树的深度值差的绝对值不超过1且它的左子树和右子树都是平衡二叉树2.1选择向量的哪一维进行划分随机选择某一维或按顺序选择但更好的方法是在数据比较分散的那一维进行划分分散程度可以根据方差来衡量。好的划分方法可以使构建的数比较平衡可以每次选择中位数来进行划分3.kd树搜索3.1 最近邻域搜索在本域内没有进行跨域搜索要跨到其他域搜索四、案例1.scikit_learn数据集API介绍sklearn.datasets # 获取小规模数据集数据包含在datasets里 datasets.load() # 获取大规模数据集需要从网络上下载 datasets.fetch_20newsgroups(data_homeNone, subsettrain) data_home:数据集下载的目录默认是~/scikit_learn_data/ subset:train训练集的“训练”或者test测试集的“测试”,all两者的全部,可选选择要加载的数据集2.sklearn数据集返回值介绍# load和fetch返回的数据类型datasets.base.Bunch(字典格式) data特征数据数组是[n_samples *n_features]的二维numpy.ndarray数组 target标签目标数组是n_samples的一位numpy.ndarray数组 DESCR数据描述 feature_names特征名 target_names标签目标名3.查看数据分布3.1 seaborn介绍seaborn是基于Matplotlib核心库进行了更高级的API封装安装pip install seaborn# 绘制二维散点图时自动完成回归拟合 seaborn.lmplot() x,y分别代表横纵坐标的列名 data 关联到数据集 hue 代表按照species即花的类别分类显示 fit_reg 是否进行线性拟合3.2 数据可视化import seaborn as sns import matplotlib.pyplot as plt import pandas as pd from sklearn.datasets import load_iris,fetch_20newsgroups iris load_iris() iris_data pd.DataFrame(data iris.data, columns[Sepal_Length,Sepal_Width,Petal_Length,Petal_Width]) iris_data[target] iris.target def iris_plot(data, col1, col2): sns.lmplot(xcol1, ycol2, datadata, huetarget, fit_regFalse) plt.xlabel(col1) plt.ylabel(col2) plt.show() iris_plot(iris_data, Sepal_Length, Petal_Width) iris_plot(iris_data, Sepal_Width, Petal_Length)3.3 数据集划分sklearn.model_selection.train_test_split(arrays, *options) x数据集的特征值 y数据集的标签值 test_size测试集的大小一般为float random_state随机数种子不同的种子会造成不同的随机采样结果相同的种子采样结果相同 return训练集特征值、测试集特征值、训练集标签、测试集标签默认随机取from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test train_test_split(iris.data, iris.target, test_size 0.2, random_state2) print(训练集的特征值是\n,x_train) print(测试集的特征值是\n,x_test) print(训练集的标签是\n,y_train) print(测试集的标签是\n,y_test) x_train1, x_test1, y_train1, y_test1 train_test_split(iris.data, iris.target, test_size 0.2, random_state20) x_train2, x_test2, y_train2, y_test2 train_test_split(iris.data, iris.target, test_size 0.2, random_state20) print(训练集的标签是\n,y_test1) print(训练集的标签是\n,y_test2)五、特征工程-特征预处理1.什么是特征预处理1.1 特征预处理定义通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程为什么要进行归一化特征的单位或大小相差较大或者某特征的方差相比其他的特征要大出几个数量级容易影响支配目标结果使得一些算法无法学习到其他的特征1.2 包含内容数值型数据的无量纲化归一化标准化1.3 特征预处理APIsklearn.preprocessing2.归一化2.1 定义通过对原始数据进行变换把数据映射到默认为[01]之间2.2 公式mx、mi分别为指定区间默认mx为1mi为02.3 APIsklearn.preprocessing.MinMaxScaler(feature_range(0,1)...) feature_range自己指定范围默认0-1from sklearn.preprocessing import MinMaxScaler import pandas as pd data pd.read_csv(D:\major\myjupyter\MachineLearning\data\dating.txt) print(data) # 1.归一化 # 1.1实例化一个转换器 transfer MinMaxScaler(feature_range(0,1)) # 1.2调用fit_transform方法 minmax_data transfer.fit_transform(data[[milage,Liters,Consumtime]]) print(经过归一化处理之后的数据为\n,minmax_data)2.4 归一化总结最大值最小值是变化的最大值与最小值非常容易受异常点影响所以这种方法鲁棒性较差只适合传统精确小数据场景3.标准化3.1 定义通过对原始数据进行变换把数据变换到均值为0标准差为1范围内3.2 公式作用域每一列mean为平均值分母为标准差3.3 APIsklearn.preprocessing.StandardScaler()from sklearn.preprocessing import StandardScaler import pandas as pd # 2.标准化 # 2.1实例化一个转换器 transfer StandardScaler() # 2.2调用fit_transform方法 minmax_data transfer.fit_transform(data[[milage,Liters,Consumtime]]) print(经过标准化处理之后的数据为\n,minmax_data)六、鸢尾花种类预测——流程实现1.再识K-近邻算法sklearn.neighbors.KNeighboresClassifier(n_neighbors5, algorithmauto) n_neighborsint可选默认5k_neighbors查询默认使用的邻居数 algorithm{auto,ball_tree,kd_tree,brute} 快速k近邻搜索算法默认参数为auto可以理解为算法自己决定适合的搜索算法 brute蛮力搜索即线性扫描当训练集很大时计算非常耗时 kd_tree构造kd树存储数据以便对其进行快速检索的树形数据结构kd树也就是数据结构中的二叉树。以种植切分构造的书每个节点是一个超巨星在维数小于20时效率高 ball_tree为了克服kd树高维失败而发明的其构造过程是以质心C和半径r分割样本空间每一个节点是一个超球体2.案例鸢尾花种类预测2.1 数据集介绍2.2 步骤分析获取数据集数据基本处理特征工程机器学习模型训练模型评估2.3 代码过程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.数据基本处理 # 2.1 数据分割 x_train, x_test, y_train, y_test train_test_split(iris.data, iris.target, test_size 0.2, random_state22) # 3.特征工程 # 3.1 实例化一个转换器 transfer StandardScaler() # 3.2 调用fit_transform方法 x_train transfer.fit_transform(x_train) x_test transfer.fit_transform(x_test) # 4.机器学习模型训练 # 4.1 实例化一个估计器 estimator KNeighborsClassifier(n_neighbors5) # 4.2 模型训练 estimator.fit(x_train, y_train) # 5.模型评估 # 5.1 输出预测值 y_pre estimator.predict(x_test) print(预测值是\n, y_pre) print(真实值和预测值对比\n, y_pre y_test) # 5.2 输出准确率 ret estimator.score(x_test, y_test) print(准确率是\n,ret)七、交叉验证和网格搜索1.什么是交叉验证将拿到的训练数据分为训练和验证集1.1 分析1.2 为什么需要交叉验证为了让被评估的模型更加准确可信2.什么是网格搜索3.交叉验证、网格搜索模型选择与调优APIsklearn.model_selection.GridSearchCV(estimator, param_gridNone, cvNone) estimator估计器对象 param_grid估计器参数(dict){n_neighbors:[1,3,5]}即需要传递的超参数 cv指定几折交叉验证 fit输入训练数据 score准确率 结果分析 best_score_在交叉验证中的最好结果 best_estimator_最好的参数模型 cv_results_每次交叉验证后的验证集准确率结果和训练集准确率结果4.鸢尾花案例增加K值调优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.数据基本处理 # 2.1 数据分割 x_train, x_test, y_train, y_test train_test_split(iris.data, iris.target, test_size 0.2, random_state22) # 3.特征工程 # 3.1 实例化一个转换器 transfer StandardScaler() # 3.2 调用fit_transform方法 x_train transfer.fit_transform(x_train) x_test transfer.fit_transform(x_test) # 4.机器学习模型训练 # 4.1 实例化一个估计器 estimator KNeighborsClassifier(n_neighbors1) # 4.2 调用交叉验证网格搜索模型 param_grid {n_neighbors:[1,3,5,7,9]} estimator GridSearchCV(estimator, param_grid param_grid, cv10, n_jobs-1) # 4.3 模型训练 estimator.fit(x_train, y_train) # 5.模型评估 # 5.1 输出预测值 y_pre estimator.predict(x_test) print(预测值是\n, y_pre) print(真实值和预测值对比\n, y_pre y_test) # 5.2 输出准确率 ret estimator.score(x_test, y_test) print(准确率是\n,ret) # 5.3 其他评价指标 print(最好的模型\n,estimator.best_params_) print(最好的结果\n,estimator.best_score_) print(整体模型结果\n,estimator.cv_results_)八、案例2预测FaceBook签到位置1.数据集介绍2.流程分析2.1 获取数据集2.2 基本数据处理缩小数据范围选择时间特征去掉签到较少的地方确定特征值和目标值分割数据集2.3 特征工程——特征预处理标准化2.4 机器学习——knncv2.5 模型评估
延伸阅读

更多相关文章

2026/10/23 21:43:50

如何选择人生第一套房

1、户型与房屋性质1一梯一户是首选2一梯两户选西户3两梯两户选东户4两梯四户选边户5两梯五户换个盘6三梯六户安置房通过小区名称区分房屋的性质:湾临水房苑安置房园刚需房城大盘房院高端盘府亲奢房2、如何选择房子1)根据自己的经济状况做出一个合理的买房…

2026/10/24 18:48:51

AI如何重构ToB获客逻辑?拓氪科技数据智能获客闭环值得选吗?

AI赋能获客的核心变革价值,在于彻底革新传统ToB行业“人工拓客、被动等待、低效获客”的传统模式,依托数据找人、算法筛客、智能转客的数字化全新逻辑,实现企业获客效率的跨越式、指数级提升。优质的AI获客理念,离不开成熟、落地、…

2026/10/24 13:34:51

Kimi苹果版导出表格的终极解法:当“AI导出鸭”重新定义效率边界

Kimi苹果版导出表格的终极解法:当“AI导出鸭”重新定义效率边界 在移动办公场景中,一个被反复提及却始终未被妥善解决的痛点,正随着大模型能力的跃迁而愈发尖锐——Kimi苹果版生成的表格,究竟如何无损导出? 这个问题在…

2026/10/26 8:51:40

合并区间算法详解:原理、实现与应用场景

1. 合并区间问题概述合并区间是算法与数据结构中的经典问题,也是实际开发中处理时间调度、资源分配等场景的常见需求。简单来说,就是给定一组可能重叠的区间,将它们合并成不重叠的区间集合。比如处理会议时间表时,把重叠的时间段合…

2026/10/26 8:51:40

知网AIGC检测服务价格与使用全攻略

1. 知网AIGC检测服务概述作为国内最权威的学术资源平台,知网推出的AIGC(人工智能生成内容)检测服务近期备受关注。这项服务主要面向高校师生、科研人员和内容创作者,用于鉴别论文、报告等文本内容是否由AI生成。根据知网官方说明&…

2026/10/26 8:51:40

Google Gemini 3 Flash多模态AI开发实战指南

1. 项目概述Google Gemini 3 Flash Preview的发布标志着多模态AI技术进入了一个新阶段。作为开发者,我第一时间体验了这个融合文本、图像、音频处理能力的强大模型,并对比测试了其与OpenAI产品的差异。本文将分享从API获取到实际调用的完整流程&#xff…

2026/10/26 8:51:40

VisionMaster SDK 四级对象模型与工业视觉开发避坑指南

简介:本资源是面向工业视觉开发工程师与自动化系统集成人员的海康机器人VisionMaster算法SDK配套Demo详解文档,聚焦图像处理、算法调用与二次开发实践,解决工业相机场景下视觉检测方案快速验证与落地难题。压缩包为1个1.85MB的PDF文件&#x…

2026/10/26 8:51:40

软件需求管理实战:文档编写与高效评审指南

1. 需求编辑与评审的核心价值在软件研发流程中,需求管理环节的质量往往决定了整个项目的成败。我经历过太多因为需求文档模糊不清、评审流于形式而导致的项目延期和返工案例。一个结构清晰、描述准确的需求文档,配合有效的评审机制,能够为团队…

2026/10/26 8:46:39

多智能体Transformer在医学网络Meta分析中的应用与优化

1. 项目概述:当医学研究遇上多智能体Transformer网络Meta分析(Network Meta-Analysis, NMA)作为循证医学的黄金标准,长期面临数据处理复杂、研究间异质性高、结果解释困难等痛点。传统流程需要研究人员手动提取数据、统一指标、构…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/26 1:53:47

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/26 0:20:17

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/26 0:00:48

Nested Learning:解决AI灾难性遗忘的分层记忆架构

1. 为什么AI需要"记忆"能力?在传统深度学习模型中,我们常遇到一个根本性问题:模型在处理新任务时,往往会完全遗忘之前学到的知识。这种现象被业界称为"灾难性遗忘"(Catastrophic Forgetting)。想象一下&#…

2026/10/26 0:00:48

企业级大模型应用:OCR预处理、Dify编排与DeepSeek落地实战

1. 这不是“用大模型”,而是重构工作流的起点“大模型的应用和工具”——这八个字现在被贴在无数技术分享、招聘JD、内部立项书的标题栏里,但绝大多数人点进去后看到的,是零散的API调用示例、几个开源UI截图、或者一句“接入LLM就能降本增效”…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑