测试使用K-最近邻(kNN)算法的30个问题

这是一个关于k-最近邻(kNN)算法的技能测试,涵盖测试时间的计算量、最佳k值选择、距离度量、算法应用等多个方面。测试包括20个问题,涉及kNN的理论知识和实践应用,如计算距离度量、选择合适的k值以优化模型等。解答这些问题有助于深入理解kNN算法的工作原理和优化策略。
摘要由CSDN通过智能技术生成

作者|SUNIL RAY 编译|Flin 来源|analyticsvidhya

介绍

如果你要问我机器学习中2种最直观的算法——那就是k最近邻(kNN)和基于树的算法。两者都易于理解,易于解释,并且很容易向人们展示。有趣的是,上个月我们对这两种算法进行了技能测试。

如果你不熟悉机器学习,请确保在了解这两种算法的基础上进行测试。它们虽然简单,但是功能强大,并且在工业中得到广泛使用。此技能测试将帮助你在k最近邻算法上进行自我测试。它是专为你测试有关kNN及其应用程序的知识而设计的。

超过650人注册了该测试。如果你是错过这项技能测试的人之一,那么这篇文章是测试问题和解决方案。这是参加考试的参与者的排行榜。

有用的资源

这里有一些资源可以深入了解该主题。

技能测试问答

1) k-NN算法在测试时间而不是训练时间上进行了更多的计算。

A)真 B)假

解决方案:A

该算法的训练阶段仅包括存储训练样本的特征向量和类别标签。

在测试阶段,通过分配最接近该查询点的k个训练样本中最频繁使用的标签来对测试点进行分类——因此需要更高的计算量。

2)假设你使用的算法是k最近邻算法,在下面的图像中,____将是k的最佳值。

A) 3 B) 10 C) 20 D) 50 解决方案:B

当k的值为10时,验证误差最小。

3)在k-NN中不能使用以下哪个距离度量?

A) Manhattan B) Minkowski C) Tanimoto D) Jaccard E) Mahalanobis F)都可以使用

解决方案:F

所有这些距离度量都可以用作k-NN的距离度量。

4)关于k-NN算法,以下哪个选项是正确的?

A)可用于分类 B)可用于回归 C)可用于分类和回归

解决方案:C

我们还可以将k-NN用于回归问题。在这种情况下,预测可以基于k个最相似实例的均值或中位数。

5)关于k-NN算法,以下哪个陈述是正确的?
  1. 如果所有数据的比例均相同,则k-NN的效果会更好
  2. k-NN在少数
现在我们回到LDA的原理上,我们在第一节说讲到了LDA希望投影后希望同一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大,但是这只是一个感官的度量。现在我们首先从比较简单的二类LDA入手,严谨的分析LDA的原理。     假设我们的数据集D={(x1,y1),(x2,y2),...,((xm,ym))}D={(x1,y1),(x2,y2),...,((xm,ym))},其中任意样本xixi为n维向量,yi∈{0,1}yi∈{0,1}。我们定义Nj(j=0,1)Nj(j=0,1)为第j类样本的个数,Xj(j=0,1)Xj(j=0,1)为第j类样本的集合,而μj(j=0,1)μj(j=0,1)为第j类样本的均值向量,定义Σj(j=0,1)Σj(j=0,1)为第j类样本的协方差矩阵(严格说是缺少分母部分的协方差矩阵)。     μjμj的表达式为: μj=1Nj∑x∈Xjx(j=0,1) μj=1Nj∑x∈Xjx(j=0,1)     ΣjΣj的表达式为: Σj=∑x∈Xj(x−μj)(x−μj)T(j=0,1) Σj=∑x∈Xj(x−μj)(x−μj)T(j=0,1)     由于是两类数据,因此我们只需要将数据投影到一条直线上即可。假设我们的投影直线是向量ww,则对任意一个样本本xixi,它在直线ww的投影为wTxiwTxi,对于我们的两个类别的中心点μ0,μ1μ0,μ1,在在直线ww的投影为wTμ0wTμ0和wTμ1wTμ1。由于LDA需要让不同类别的数据的类别中心之间的距离尽可能的大,也就是我们要最大化||wTμ0−wTμ1||22||wTμ0−wTμ1||22,同时我们希望同一种类别数据的投影点尽可能的接近,也就是要同类样本投影点的协方差wTΣ0wwTΣ0w和wTΣ1wwTΣ1w尽可能的小,即最小化wTΣ0w+wTΣ1wwTΣ0w+wTΣ1w。综上所述,我们的优化目标为: argmaxwJ(w)=||wTμ0−wTμ1||22wTΣ0w+wTΣ1w=wT(μ0−μ1)(μ0−μ1)TwwT(Σ0+Σ1)w argmax⏟wJ(w)=||wTμ0−wTμ1||22wTΣ0w+wTΣ1w=wT(μ0−μ1)(μ0−μ1)TwwT(Σ0+Σ1)w     我们一般定义类内散度矩阵SwSw为: Sw=Σ0+Σ1=∑x∈X0(x−μ0)(x−μ0)T+∑x∈X1(x−μ1)(x−μ1)T Sw=Σ0+Σ1=∑x∈X0(x−μ0)(x−μ0)T+∑x∈X1(x−μ1)(x−μ1)T     同时定义类间散度矩阵SbSb为: Sb=(μ0−μ1)(μ0−μ1)T Sb=(μ0−μ1)(μ0−μ1)T     这样我们的优化目标重写为: argmaxwJ(w)=wTSbwwTSww argmax⏟wJ(w)=wTSbwwTSww     仔细一看上式,这不就是我们的广义瑞利商嘛!这就简单了,利用我们第二节讲到的广义瑞利商的性质,我们知道我们的J(w)J(w)最大值为矩阵S−12wSbS−12wSw−12SbSw−12的最大特征值,而对应的ww为S−12wSbS−12wSw−12SbSw−12的最大特征值对应的特征向量! 而S−1wSbSw−1Sb的特征值和S−12wSbS−12wSw−12SbSw−12的特征值相同,S−1wSbSw−1Sb的特征向量w′w′和S−12wSbS−12wSw−12SbSw−12的特征向量ww满足w′=S−12www′=Sw−12w的关系!     注意到对于二类的时候,SbwSbw的方向恒为μ0−μ1μ0−μ1,不妨令Sbw=λ(μ0−μ1)Sbw=λ(μ0−μ1),将其带入:(S−1wSb)w=λw(Sw−1Sb)w=λw,可以得到w=S−1w(μ0−μ1)w=Sw−1(μ0−μ1), 也就是说我们只要求出原始二类样本的均值和方差就可以确定最佳的投影方向ww了。
在Python中实现K-最近邻(K-Nearest Neighbors, KNN)算法是一种基于实例的学习方法,用于分类和回归问题。下面是简单的步骤: 1. **导入库**: 首先,你需要导入必要的库,如`numpy`, `pandas`, 和`scikit-learn`,它们分别用于数据处理、数据分析以及KNN算法。 ```python import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier ``` 2. **数据预处理**: 加载数据集,通常包含特征和标签。例如,使用`load_iris`或`load_digits`等函数从`sklearn.datasets`模块加载示例数据。 ```python from sklearn.datasets import load_iris data = load_iris() X = data.data y = data.target ``` 3. **拆分数据**: 将数据分为训练集和测试集,以便评估模型性能。 ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` 4. **创建并训练模型**: 创建一个`KNeighborsClassifier`对象,并指定k值(通常是奇数,比如5或7)。然后使用训练数据拟合模型。 ```python knn = KNeighborsClassifier(n_neighbors=5) knn.fit(X_train, y_train) ``` 5. **预测**: 对测试集进行预测,并得到预测结果。 ```python predictions = knn.predict(X_test) ``` 6. **评估模型**: 可以使用各种指标来评估模型性能,如准确率、精确度、召回率等。 ```python from sklearn.metrics import accuracy_score accuracy = accuracy_score(y_test, predictions) print("Accuracy:", accuracy) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值