导航:首页 > 源码编译 > 近邻算法预测案例

近邻算法预测案例

发布时间:2023-12-01 03:54:28

❶ 实验二 K-近邻算法及应用

(1)简单,易于理解,易于实现,无需估计参数。

(2)训练时间为零。它没有显示的训练,不像其它有监督的算法会用训练集train一个模型(也就是拟合一个函数),然后验证集或测试集用该模型分类。KNN只是把样本保存起来,收到测试数据时再处理,所以KNN训练时间为零。

(3)KNN可以处理分类问题,同时天然可以处理多分类问题,适合对稀有事件进行分类。

(4)特别适合于多分类问题(multi-modal,对象具有多个类别标签), KNN比SVM的表现要好。

(5)KNN还可以处理回归问题,也就是预测。

(6)和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感。

(1)计算量太大,尤其是特征数非常多的时候。每一个待分类文本都要计算它到全体已知样本的距离,才能得到它的第K个最近邻点。

(2)可理解性差,无法给出像决策树那样的规则。

(3)是慵懒散学习方法,基本上不学习,导致预测时速度比起逻辑回归之类的算法慢。

(4)样本不平衡的时候,对稀有类别的预测准确率低。当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。

(5)对训练数据依赖度特别大,对训练数据的容错性太差。如果训练数据集中,有一两个数据是错误的,刚刚好又在需要分类的数值的旁边,这样就会直接导致预测的数据的不准确。

需要一个特别容易解释的模型的时候。
比如需要向用户解释原因的推荐算法。

通过此次实验我了解了K近邻算法及其思路,该方法的思路是:如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一个类别,则该样本也属于这个类别。
所谓k近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的k个实例。

❷ K-近邻算法简介

1.K-近邻(KNearestNeighbor,KNN)算法简介 :对于一个未知的样本,我们可以根据离它最近的k个样本的类别来判断它的类别。

以下图为例,对于一个未知样本绿色小圆,我们可以选取离它最近的3的样本,其中包含了2个红色三角形,1个蓝色正方形,那么我们可以判断绿色小圆属于红色三角形这一类。
我们也可以选取离它最近的5个样本,其中包含了3个蓝色正方形,2个红色三角形,那么我们可以判断绿色小圆属于蓝色正方形这一类。

3.API文档

下面我们来对KNN算法中的参数项做一个解释说明:

'n_neighbors':选取的参考对象的个数(邻居个数),默认值为5,也可以自己指定数值,但不是n_neighbors的值越大分类效果越好,最佳值需要我们做一个验证。
'weights': 距离的权重参数,默认uniform。
'uniform': 均匀的权重,所有的点在每一个类别中的权重是一样的。简单的说,就是每个点的重要性都是一样的。
'distance':权重与距离的倒数成正比,距离近的点重要性更高,对于结果的影响也更大。
'algorithm':运算方法,默认auto。
'auto':根绝模型fit的数据自动选择最合适的运算方法。
'ball_tree':树模型算法BallTree
'kd_tree':树模型算法KDTree
'brute':暴力算法
'leaf_size':叶子的尺寸,默认30。只有当algorithm = 'ball_tree' or 'kd_tree',这个参数需要设定。
'p':闵可斯基距离,当p = 1时,选择曼哈顿距离;当p = 2时,选择欧式距离。
n_jobs:使用计算机处理器数目,默认为1。当n=-1时,使用所有的处理器进行运算。

4.应用案例演示
下面以Sklearn库中自带的数据集--手写数字识别数据集为例,来测试下kNN算法。上一章,我们简单的介绍了机器学习的一般步骤:加载数据集 - 训练模型 - 结果预测 - 保存模型。这一章我们还是按照这个步骤来执行。
[手写数字识别数据集] https://scikit-learn.org/stable/moles/generated/sklearn.datasets.load_digits.html#sklearn.datasets.load_digits

5.模型的方法
每一种模型都有一些它独有的属性方法(模型的技能,能做些什么事),下面我们来了解下knn算法常用的的属性方法。

6.knn算法的优缺点
优点:
简单,效果还不错,适合多分类问题
缺点:
效率低(因为要计算预测样本距离每个样本点的距离,然后排序),效率会随着样本量的增加而降低。

❸ K-近邻算法(K-NN)

给定一个训练数据集,对于新的输入实例, 根据这个实例最近的 k 个实例所属的类别来决定其属于哪一类 。所以相对于其它机器学习模型和算法,k 近邻总体上而言是一种非常简单的方法。

找到与该实例最近邻的实例,这里就涉及到如何找到,即在特征向量空间中,我们要采取 何种方式来对距离进行度量

距离的度量用在 k 近邻中我们也可以称之为 相似性度量 ,即特征空间中两个实例点相似程度的反映。在机器学习中,常用的距离度量方式包括欧式距离、曼哈顿距离、余弦距离以及切比雪夫距离等。 在 k 近邻算法中常用的距离度量方式是欧式距离,也即 L2 距离, L2 距离计算公式如下:

一般而言,k 值的大小对分类结果有着重大的影响。 当选择的 k 值较小的情况下,就相当于用较小的邻域中的训练实例进行预测,只有当与输入实例较近的训练实例才会对预测结果起作用。但与此同时预测结果会对实例点非常敏感,分类器抗噪能力较差,因而容易产生过拟合 ,所以一般而言,k 值的选择不宜过小。但如果选择较大的 k 值,就相当于在用较大邻域中的闷郑握训练实例进行预测,但相应的分类误差也会增大,模型整体变得简单,会产生一定程度的欠拟合。所以一般而言,我们需要 采用交叉验证的方式来选择合适的 k 值

k 个实例的多数属于哪丛裤个类,明显是多数表决的归类规则。当然还可能使用其他规则,所以第三个关键就是 分类决策规则。

回归:k个实例该属性值的平均值

它是一个二叉树的数据结构,方便存储 K 维空间的数据

KNN 的计算过程是大量计算样本点之间的距离。为了减少计算距离次数,提升 KNN 的搜索效率,人们提出了 KD 树(K-Dimensional 的缩写)。KD 树是对数据点在 K 维空间中划分的一种数据结构。在 KD 树的构造中,每个节点都是 k 维数值点的二叉树。蚂庆既然是二叉树,就可以采用二叉树的增删改查操作,这样就大大提升了搜索效率。

如果是做分类,你需要引用:from sklearn.neihbors import KNeighborsClassifier
如果是回归, 需要引用:from sklearn.neighbors import KNeighborsRegressor

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None, **kwargs)

❹ k近邻算法的案例介绍

如 上图所示,有两类不同的样本数据,分别用蓝色的小正方形和红色的小三角形表示,而图正中间的那个绿色的圆所标示的数据则是待分类的数据。也就是说,现在, 我们不知道中间那个绿色的数据是从属于哪一类(蓝色小正方形or红色小三角形),下面,我们就要解决这个问题:给这个绿色的圆分类。我们常说,物以类聚,人以群分,判别一个人是一个什么样品质特征的人,常常可以从他/她身边的朋友入手,所谓观其友,而识其人。我们不是要判别上图中那个绿色的圆是属于哪一类数据么,好说,从它的邻居下手。但一次性看多少个邻居呢?从上图中,你还能看到:
如果K=3,绿色圆点的最近的3个邻居是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。 如果K=5,绿色圆点的最近的5个邻居是2个红色三角形和3个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。 于此我们看到,当无法判定当前待分类点是从属于已知分类中的哪一类时,我们可以依据统计学的理论看它所处的位置特征,衡量它周围邻居的权重,而把它归为(或分配)到权重更大的那一类。这就是K近邻算法的核心思想。
KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
KNN 算法本身简单有效,它是一种 lazy-learning 算法,分类器不需要使用训练集进行训练,训练时间复杂度为0。KNN 分类的计算复杂度和训练集中的文档数目成正比,也就是说,如果训练集中文档总数为 n,那么 KNN 的分类时间复杂度为O(n)。
KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
K 近邻算法使用的模型实际上对应于对特征空间的划分。K 值的选择,距离度量和分类决策规则是该算法的三个基本要素: K 值的选择会对算法的结果产生重大影响。K值较小意味着只有与输入实例较近的训练实例才会对预测结果起作用,但容易发生过拟合;如果 K 值较大,优点是可以减少学习的估计误差,但缺点是学习的近似误差增大,这时与输入实例较远的训练实例也会对预测起作用,是预测发生错误。在实际应用中,K 值一般选择一个较小的数值,通常采用交叉验证的方法来选择最优的 K 值。随着训练实例数目趋向于无穷和 K=1 时,误差率不会超过贝叶斯误差率的2倍,如果K也趋向于无穷,则误差率趋向于贝叶斯误差率。 该算法中的分类决策规则往往是多数表决,即由输入实例的 K 个最临近的训练实例中的多数类决定输入实例的类别 距离度量一般采用 Lp 距离,当p=2时,即为欧氏距离,在度量之前,应该将每个属性的值规范化,这样有助于防止具有较大初始值域的属性比具有较小初始值域的属性的权重过大。 KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成反比。该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。 该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进。
该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。
实现 K 近邻算法时,主要考虑的问题是如何对训练数据进行快速 K 近邻搜索,这在特征空间维数大及训练数据容量大时非常必要。

阅读全文

与近邻算法预测案例相关的资料

热点内容
压缩机电机轴承 浏览:971
lol台服对战服务器延迟高怎么办 浏览:299
java路径斜杠 浏览:381
java问号泛型 浏览:143
手动添加编译参数 浏览:459
java图像编程实例库 浏览:161
java程序员2017 浏览:900
简答题编译快捷键的功能是什么 浏览:359
quincy压缩机 浏览:236
论语新解pdf 浏览:579
dnf深渊算法 浏览:335
app画面半截怎么办 浏览:611
苹果怎么设置app退出仍然有声音 浏览:433
javatif转jpg 浏览:165
java设置按钮的位置 浏览:686
互联网商业模式pdf 浏览:440
cmdcopycon命令 浏览:933
pdf火车 浏览:77
幻世九歌怎么选服务器 浏览:163
ubuntu反编译工具使用方法 浏览:910