ML之kNN:k最近邻kNN算法的简介、应用、经典案例之详细攻略(二)

简介: ML之kNN:k最近邻kNN算法的简介、应用、经典案例之详细攻略

2、K 近邻算法的三要素


K 近邻算法使用的模型实际上对应于对特征空间的划分。K 值的选择,距离度量和分类决策规则是该算法的三个基本要素:


K 值的选择会对算法的结果产生重大影响。K值较小意味着只有与输入实例较近的训练实例才会对预测结果起作用,但容易发生过拟合;如果 K 值较大,优点是可以减少学习的估计误差,但缺点是学习的近似误差增大,这时与输入实例较远的训练实例也会对预测起作用,使预测发生错误。在实际应用中,K 值一般选择一个较小的数值,通常采用交叉验证的方法来选择最优的 K 值。随着训练实例数目趋向于无穷和 K=1 时,误差率不会超过贝叶斯误差率的2倍,如果K也趋向于无穷,则误差率趋向于贝叶斯误差率。


该算法中的分类决策规则往往是多数表决,即由输入实例的 K 个最临近的训练实例中的多数类决定输入实例的类别


距离度量一般采用 Lp 距离,当p=2时,即为欧氏距离,在度量之前,应该将每个属性的值规范化,这样有助于防止具有较大初始值域的属性比具有较小初始值域的属性的权重过大。




k最近邻kNN算法的应用


1、kNN代码解读


   """Regression based on k-nearest neighbors.

   The target is predicted by local interpolation of the targets associated of the nearest neighbors in the training set.

   Read more in the :ref:`User Guide <regression>`.

 

   Parameters

   ----------

   n_neighbors : int, optional (default = 5)

   Number of neighbors to use by default for :meth:`kneighbors queries.

   weights : str or callable

   weight function used in prediction.  Possible values:

 

   - 'uniform' : uniform weights.  All points in each neighborhood are weighted equally.

   - 'distance' : weight points by the inverse of their distance.

   in this case, closer neighbors of a query point will have a greater influence than neighbors which are further away.

   - [callable] : a user-defined function which accepts an array of distances, and returns an array of the same shape containing the weights.

 

   Uniform weights are used by default.

 

   algorithm : {'auto', 'ball_tree', 'kd_tree', 'brute'}, optional

   Algorithm used to compute the nearest neighbors:

 

   - 'ball_tree' will use :class:`BallTree`

   - 'kd_tree' will use :class:`KDTree`

   - 'brute' will use a brute-force search.

   - 'auto' will attempt to decide the most appropriate algorithm

   based on the values passed to :meth:`fit` method.

基于k近邻的回归。

通过对训练集中最近邻相关的目标进行局部插值来预测目标。

请参阅:ref: ' User Guide <regression> '。</regression>

参数

---------

n_neighbors: int,可选(默认= 5)

kneighbors:meth: ' kneighbors查询默认使用的邻居数。

权值:str或callable

用于预测的权函数。可能的值:


-“均匀”:重量均匀。每个邻域中的所有点的权值都是相等的。

-“距离”:权重点的距离的倒数。

在这种情况下,查询点附近的邻居比远处的邻居有更大的影响。

- [callable]:一个用户定义的函数,它接受一个距离数组,并返回一个包含权值的形状相同的数组。


默认情况下使用统一的权重。


算法:{'auto', 'ball_tree', 'kd_tree', 'brute'},可选

计算最近邻的算法:


- 'ball_tree'将使用:class: ' BallTree '

- 'kd_tree'将使用:class: ' KDTree '

-“蛮力”将使用蛮力搜索。

- 'auto'将尝试决定最合适的算法

基于传递给:meth: ' fit '方法的值。

   Note: fitting on sparse input will override the setting of this parameter, using brute force.

 

   leaf_size : int, optional (default = 30)

   Leaf size passed to BallTree or KDTree.  This can affect the speed of the construction and query, as well as the memory required to store the tree.  The optimal value depends on the nature of the problem.

 

   p : integer, optional (default = 2)

   Power parameter for the Minkowski metric. When p = 1, this is equivalent to using manhattan_distance (l1), and  euclidean_distance (l2) for p = 2. For arbitrary p, minkowski_distance (l_p) is used.

 

   metric : string or callable, default 'minkowski'

   the distance metric to use for the tree.  The default metric is minkowski, and with p=2 is equivalent to the standard Euclidean metric. See the documentation of the DistanceMetric class for a list of available metrics.

 

   metric_params : dict, optional (default = None)

   Additional keyword arguments for the metric function.

 

   n_jobs : int, optional (default = 1)

   The number of parallel jobs to run for neighbors search.

   If ``-1``, then the number of jobs is set to the number of CPU  cores.

   Doesn't affect :meth:`fit` method.

注意:拟合稀疏输入将覆盖该参数的设置,使用蛮力。


leaf_size: int,可选(默认值为30)

叶大小传递给BallTree或KDTree。这可能会影响构造和查询的速度,以及存储树所需的内存。最优值取决于问题的性质。


p:整数,可选(默认= 2)

Minkowski度规的功率参数。当p = 1时,这相当于在p = 2时使用manhattan_distance (l1)和euclidean_distance (l2)。对于任意p,使用minkowski_distance (l_p)。


度量:字符串或可调用,默认'minkowski'

用于树的距离度量。默认的度量是minkowski, p=2等于标准的欧几里德度量。有关可用指标的列表,请参阅distancem类的文档。


metric_params: dict,可选(默认= None)

度量函数的附加关键字参数。


n_jobs: int,可选(默认值为1)

要为邻居搜索运行的并行作业的数量。

如果' ' -1 ' ',则作业的数量被设置为CPU核心的数量。

不影响:冰毒:'适合'方法。

   Examples

   --------

   >>> X = [[0], [1], [2], [3]]

   >>> y = [0, 0, 1, 1]

   >>> from sklearn.neighbors import KNeighborsRegressor

   >>> neigh = KNeighborsRegressor(n_neighbors=2)

   >>> neigh.fit(X, y) # doctest: +ELLIPSIS

   KNeighborsRegressor(...)

   >>> print(neigh.predict([[1.5]]))

   [ 0.5]

 

   See also

   --------

   NearestNeighbors

   RadiusNeighborsRegressor

   KNeighborsClassifier

   RadiusNeighborsClassifier

例子

--------

>>> X = [[0], [1], [2], [3]]

>>> y = [0, 0, 1, 1]

从sklearn > > >。邻居进口KNeighborsRegressor

>>> neigh = KNeighborsRegressor(n_neighbors=2)

> > >马嘶声。fit(X, y) # doctest: +省略号

KNeighborsRegressor (…)

> > >打印(neigh.predict ([[1.5]]))

[0.5]


另请参阅

--------

NearestNeighbors

RadiusNeighborsRegressor

KNeighborsClassifier

RadiusNeighborsClassifier

   Notes

   -----

   See :ref:`Nearest Neighbors <neighbors>` in the online  documentation for a discussion of the choice of ``algorithm`` and ``leaf_size``.

 

   .. warning::

 

   Regarding the Nearest Neighbors algorithms, if it is found that  two neighbors, neighbor `k+1` and `k`, have identical distances but different labels, the results will depend on the ordering of the training data.

 

  https://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm

   """ 笔记

-----

参见:ref: ' Nearest Neighbors < Neighbors > ' in the online documentation,其中讨论了' '算法' '和' ' leaf_size ' '的选择。


. .警告::

对于最近邻算法,如果发现相邻的‘k+1’和‘k’这两个相邻的距离相同,但是标签不同,那么结果将取决于训练数据的排序。


https://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm

”“”

class KNeighborsRegressor Found at: sklearn.neighbors.regression

class KNeighborsRegressor(NeighborsBase, KNeighborsMixin,

   SupervisedFloatMixin,

   RegressorMixin):

   def __init__(self, n_neighbors=5, weights='uniform',

       algorithm='auto', leaf_size=30,

       p=2, metric='minkowski', metric_params=None, n_jobs=1, **

       kwargs):

       self._init_params(n_neighbors=n_neighbors,

        algorithm=algorithm, leaf_size=leaf_size, metric=metric, p=p,

        metric_params=metric_params, n_jobs=n_jobs, **kwargs)

       self.weights = _check_weights(weights)

 

   def predict(self, X):

       """Predict the target for the provided data

       Parameters

       ----------

       X : array-like, shape (n_query, n_features), \

               or (n_query, n_indexed) if metric == 'precomputed'

           Test samples.

       Returns

       -------

       y : array of int, shape = [n_samples] or [n_samples, n_outputs]

           Target values

       """

       X = check_array(X, accept_sparse='csr')

       neigh_dist, neigh_ind = self.kneighbors(X)

       weights = _get_weights(neigh_dist, self.weights)

       _y = self._y

       if _y.ndim == 1:

           _y = _y.reshape((-1, 1))

       if weights is None:

           y_pred = np.mean(_y[neigh_ind], axis=1)

       else:

           y_pred = np.empty((X.shape[0], _y.shape[1]), dtype=np.

            float64)

           denom = np.sum(weights, axis=1)

           for j in range(_y.shape[1]):

               num = np.sum(neigh_indj]_y[ * weights, axis=1)

               y_pred[:j] = num / denom

     

       if self._y.ndim == 1:

           y_pred = y_pred.ravel()

       return y_pred


 

k最近邻kNN算法的经典案例


1、基础案例


ML之kNN:利用kNN算法对莺尾(Iris)数据集进行多分类预测https://yunyaniu.blog.csdn.net/article/details/87892011

ML之kNN(两种):基于两种kNN(平均回归、加权回归)对Boston(波士顿房价)数据集(506,13+1)进行价格回归预测并对比各自性能https://yunyaniu.blog.csdn.net/article/details/87913163

CV之kNN:基于ORB提取+kNN检测器、基于SIFT提取+flann检测器的图片相似度可视化https://yunyaniu.blog.csdn.net/article/details/103294339


相关文章
|
13天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
54 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
13天前
|
存储 缓存 算法
探索企业文件管理软件:Python中的哈希表算法应用
企业文件管理软件依赖哈希表实现高效的数据管理和安全保障。哈希表通过键值映射,提供平均O(1)时间复杂度的快速访问,适用于海量文件处理。在Python中,字典类型基于哈希表实现,可用于管理文件元数据、缓存机制、版本控制及快速搜索等功能,极大提升工作效率和数据安全性。
49 0
|
2月前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
52 1
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
67 1
|
14天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
146 80
|
2天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
2天前
|
算法
基于龙格库塔算法的锅炉单相受热管建模与matlab数值仿真
本设计基于龙格库塔算法对锅炉单相受热管进行建模与MATLAB数值仿真,简化为喷水减温器和末级过热器组合,考虑均匀传热及静态烟气处理。使用MATLAB2022A版本运行,展示自编与内置四阶龙格库塔法的精度对比及误差分析。模型涉及热传递和流体动力学原理,适用于优化锅炉效率。
|
1天前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
7天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
10天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。

热门文章

最新文章