设计网站 知乎网页制作图
news/
2025/9/26 6:12:32/
文章来源:
设计网站 知乎,网页制作图,wordpress小说网站模板,2345网址大全浏览器下载前言#xff1a;
针对一个完整的机器学习框架目前还没有总结出来#xff0c;所以目前只能总结每一个单独的算法。由于现在研究的重点是算法#xff0c;所以对于数据的处理#xff0c;数据的分析和可视化呈现#xff0c;在现阶段并不进行展示#xff08;这样容易陷入纠结…前言
针对一个完整的机器学习框架目前还没有总结出来所以目前只能总结每一个单独的算法。由于现在研究的重点是算法所以对于数据的处理数据的分析和可视化呈现在现阶段并不进行展示这样容易陷入纠结和浪费过多时间。但是当理解算法的基本原理和实现方法之后再回过头来从头开始实现一个完整的机器学习流程。**
1. KNN 原理
KNN是一种即可用于分类又可用于回归的机器学习算法。对于给定测试样本基于距离度量找出训练集中与其最靠近的K个训练样本然后基于这K个“邻居”的信息来进行预测。 在分类任务中可使用投票法选择这K个样本中出现最多的类别标记作为预测结果在回归任务中可使用平均法将这K个样本的实值输出标记的平均值作为预测结果。当然还可以基于距离远近程度进行加权平均等方法。
2. KNN 优缺点
KNN 优点
理论成熟思想简单既可以用来做分类也可以用来做回归 可用于非线性分类 训练时间复杂度比支持向量机之类的算法低仅为O(n) 和朴素贝叶斯之类的算法比对数据没有假设准确度高对异常点不敏感 由于KNN方法主要靠周围有限的邻近的样本而不是靠判别类域的方法来确定所属类别的因此对于类域的交叉或重叠较多的待分样本集来说KNN方法较其他方法更为适合 该算法比较适用于样本容量比较大的类域的自动分类而那些样本容量较小的类域采用这种算法比较容易产生误分
KNN 缺点
计算量大尤其是特征数非常多的时候 样本不平衡的时候对稀有类别的预测准确率低 KD树球树之类的模型建立需要大量的内存 使用懒散学习方法基本上不学习导致预测时速度比起逻辑回归之类的算法慢 相比决策树模型KNN模型可解释性不强 3. KNN 算法三要素距离度量 K 值的选择
下面分析k值过大和过小造成的影响
k值较小就相当于用较小的领域中的训练实例进行预测训练误差近似误差小偏差小泛化误差会增大方差大换句话说K值较小就意味着整体模型变得复杂容易发生过拟合
k值较大就相当于用较大领域中的训练实例进行预测泛化误差小方差小但缺点是近似误差大偏差大换句话说K值较大就意味着整体模型变得简单容易发生欠拟合一个极端是k等于样本数m则完全没有分类此时无论输入实例是什么都只是简单的预测它属于在训练实例中最多的类模型过于简单。
对于k值的选择没有一个固定的经验sklearn默认为5一般根据样本的分布选择一个较小的值可以通过交叉验证选择一个合适的k值。
分类决策规则
KNN 算法一般是用多数表决方法即由输入实例的K个邻近的多数类决定输入实例的类。这也是经验风险最小化的结果。
我们定义训练误差率是K近邻训练样本标记与输入标记不一致的比例误差率表示为
目的是K近邻的标记值尽可能的与输入标记一致
所以最小化
最大化 4 KNN 算法实现
线性扫描
线性扫描也叫“暴力搜索”是计算输入实例与每一个训练实例的距离并选择前k个最近邻的样本来多数表决。这种实现方法简单但是当训练集或特征维度很大时我们经常碰到样本的特征数有上千以上样本量有几十万以上如果我们这要去预测少量的测试集样本算法的时间效率很成问题计算非常耗时故这种暴力实现原理是不可行的 。
kd 树实现
kd 树是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构构造kd树相当于不断用垂直于坐标轴的超平面将k维空间进行划分构成一系列的k维超矩形区域kd树省去了对大部分数据的搜索大大的较少了计算量。
注意这里的k和KNN中的k的意思不同。KNN中的k代表最近的k个样本kd树中的k代表样本特征的维数。
KD树算法包括三步第一步是建树第二部是搜索最近邻最后一步是预测。
kd 树的建立。kd树实质是二叉树其划分思想与CART树一致切分使样本复杂度降低最多的特征。kd树分别计算k个特征的方差认为特征方差越大则该特征的复杂度亦越大优先对该特征进行切分 切分点是所有实例在该特征的中位数。重复该切分步骤直到切分后无样本则终止切分终止时的样本为叶节点形成kd树。
kd树搜索最近邻。生成kd树以后对于一个目标点以目标点为圆心以目标点到叶子节点样本实例的距离为半径得到一个超球体最近邻的点一定在这个超球体内部。然后返回叶子节点的父节点检查另一个子节点包含的超矩形体是否和超球体相交如果相交就到这个子节点寻找是否有更加近的近邻,有的话就更新最近邻。如果不相交直接返回父节点的父节点在另一个子树继续搜索最近邻。依次下去当回溯到根节点时算法结束此时保存的最近邻节点就是最终的最近邻。
对于kd树来说划分后可以大大减少无效的最近邻搜索很多样本点由于所在的超矩形体和超球体不相交根本不需要计算距离。大大节省了计算时间。
kd树预测。
分类每一次搜寻与输入样本最近的样本节点然后忽略该节点重复同样步骤K次找到与输入样本最近邻的K个样本 投票法确定输出结果。
回归用K个最近样本的输出的平均值作为回归预测值。
球树实现
kd树算法虽然提高了KNN搜索的效率但是在某些时候效率并不高比如当处理不均匀分布的数据集时,不管是近似方形还是矩形甚至正方形都不是最好的使用形状因为他们都有角。为了优化超矩形体导致的搜索效率的问题从而提出了球树实现的方法。其基本思想和kd树类似就是每个分割块都是超球体而不是KD树里面的超矩形体。
5 sklearn实现KNN算法 在scikit-learn 中与近邻法这一大类相关的类库都在sklearn.neighbors包之中。KNN分类树的类是KNeighborsClassifierKNN回归树的类KNeighborsRegressor。除此之外还有KNN的扩展即限定半径最近邻分类树的类RadiusNeighborsClassifier和限定半径最近邻回归树的类RadiusNeighborsRegressor 以及最近质心分类算法NearestCentroid。
在这些算法中KNN分类和回归的类参数完全一样。具体参数如下
sklearn.neighbors.KNeighborsClassifier(n_neighbors5, weights’uniform’,
algorithm’auto’, leaf_size30, p2, metric’minkowski’, metric_paramsNone,
n_jobsNone, **kwargs) n_neighborsKNN中的k值默认为5对于k值的选择前面已经给出解释
weights用于标识每个样本的近邻样本的权重可选择uniform,“distance” 或自定义权重。默认uniform所有最近邻样本权重都一样。如果是distance则权重和距离成反比例如果样本的分布是比较成簇的即各类样本都在相对分开的簇中时我们用默认的uniform就可以了如果样本的分布比较乱规律不好寻找选择distance是一个比较好的选择
algorithm限定半径最近邻法使用的算法可选‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’。 ‘brute’对应第一种线性扫描 ‘kd_tree’对应第二种kd树实现 ‘ball_tree’对应第三种的球树实现 ‘auto’则会在上面三种算法中做权衡选择一个拟合最好的最优算法。
leaf_size这个值控制了使用kd树或者球树时 停止建子树的叶子节点数量的阈值。这个值越小则生成的kc树或者球树就越大层数越深建树时间越长反之则生成的kd树或者球树会小层数较浅建树时间较短。默认是30。
这个值一般依赖于样本的数量随着样本数量的增加这个值必须要增加否则不光建树预测的时间长还容易过拟合。可以通过交叉验证来选择一个适中的值。当然如果使用的算法是蛮力实现则这个参数可以忽略
metricp距离度量前面介绍过默认闵可夫斯基距离 “minkowski”p1为曼哈顿距离 p2为欧式距离
metric_params距离度量其他附属参数具体我也不知道一般用得少
n_jobs并行处理任务数主要用于多核CPU时的并行处理加快建立KNN树和预测搜索的速度。n_jobs -1即所有的CPU核都参与计算。
限定半径最近邻法分类和回归的类的主要参数也和KNN基本一样。具体参数如下
sklearn.neighbors.RadiusNeighborsClassifier(radius1.0, weights’uniform’,
algorithm’auto’, leaf_size30, p2, metric’minkowski’, outlier_labelNone,
metric_paramsNone, n_jobsNone, **kwargs) radius限定半径默认为1。半径的选择与样本分布有关可以通过交叉验证来选择一个较小的半径尽量保证每类训练样本其他类别样本的距离较远 outlier_labeint类型主要用于预测时如果目标点半径内没有任何训练集的样本点时应该标记的类别不建议选择默认值 None,因为这样遇到异常点会报错。一般设置为训练集里最多样本的类别。 参考链接https://blog.csdn.net/qq_40195360/article/details/86714337
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917906.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!