本文主要是介绍我的cs231n学习笔记(2)lecture2-K Nearest Neighbor,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
lecture2:KNN
根据KNN算法所做的表现效果并不是很好:
我们可以通过将k值调大的方法使算法表现的更好,但还有另外一个选择,更换距离函数。L2 distance距离函数也叫做欧式距离函数(Euclidean distance)
不同的距离度量函数在预测的空间里对底层的几何或拓扑结构做出不同的假设。
kNN模拟
k值、距离函数成为超参数(hyperparameters),因为他们并不能从训练数据中获得,而是编写程序前人为设定的。超参数的选择取决于具体问题。
假设1:选择一个超参数使你的训练集给出较高的准确率
这是一种非常糟糕的想法,因为在之前的例子中,我们给出k=1,总能完美的分类训练集数据,但k值越大训练集中未出现的数据分类性能越佳。所以这并不是一个好主意。
假设2:将数据分成两个数据集——训练集和测试集,分别选用超参数训练算法
但是在测试集上设定的超参数只能表示在这种情况下的测试表现良好,不能代表所有未知的测试同样表现良好。
假设3:将数据分成三类——大部分作为训练集、建立一个验证集、一个测试集
在训练集上用不同的超参数训练算法,在验证集上评估,然后用一组超参数选择在验证集上表现最好的,最后将这个分类器对测试集进行测试。
设定超参数的另一个策略是交叉验证(cross validation),在深度学习中并不常用。
KNN算法在图像处理中并不常用,一是因为测试时间非常慢;二是距离函数用在比较图像上并不适合图像之间视觉的相似度。还有一个问题就是KNN算法常引发维度灾难(Curse of dimensionality),也就是说,如果我们希望分类器有好的效果,我们需要训练数据能够密集地分布在空间中,否则最近邻点的实际距离会很远,也就是说和待测样本的相似度没有那么高,而问题在于,想要密集地分布在空间中,训练数据会以指数倍的增长
这篇关于我的cs231n学习笔记(2)lecture2-K Nearest Neighbor的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!