机器学习系列(十)——更多关于knn的思考
2019-07-06 本文已影响4人
Ice_spring
knn算法解决回归问题简介
在前面的系列中,knn算法主要用于解决分类问题,不只是二分类问题,knn算法可以天然地解决多分类问题。而且knn算法思想简单,但效果非常之好。
不过knn算法也可以用于解决回归问题,比如下面的问题:
knn_regress
离绿色点最近的三个点数值分别为:100,120,150。那么可以将三个点的平均值作为绿色点的值,当然也可以考虑权值进行加权平均。
sklearn中封装了KNeighborsRegressor类专门用于解决回归问题。(可以参考文档进行了解和自学。)
KNeighborsRegressor文档
knn算法的缺点
- knn算法最大的缺点是它的效率及其低下,如果训练集有m个样本,n个特征,则预测每个新的数据都需要计算它与每个训练集样本的距离,时间复杂度是O(m*n),而且仅仅是一个新的数据。
现在针对knn算法有很多优化,如KD-Tree,Ball-Tree,能更快地找到最近邻关于KD-Tree和Ball-Tree属于搜索算法,可以查阅资料书自学,这里给出一些简单参考:
knn算法优化KD-Tree和Ball-Tree
但是尽管有很多优化,knn仍然是一个效率比较低的算法。 - knn算法缺点之二是高度数据相关,算法表现极度依赖数据好坏,当然理论上几乎所有机器学习算法都是数据相关的。
- knn算法缺点之三是预测结果不具有可解释性,我们只是找到离他最近的样本点就作出分类的预测,但是更深层次的理论依据却无法证明。
- knn算法缺点之四是维数灾难,随着维度的增加,看似很近的两个点其实距离是越来越大的。
维数 | 点 | 距离 |
---|---|---|
1 | 0~1 | 1 |
2 | (0,0)~(1,1) | 1.414 |
3 | (0,0,0)~(1,1,1) | 1.732 |
... | ... | ... |
10000 | (0,0,...,0)~(1,1,...,1) | 100 |
维数灾难有一个解决办法是降维,这在本系列后面会介绍。
机器学习流程再探讨
截至目前学到的知识,将机器学习流程概括如下:
- 将数据分为预测集和训练集
- 训练数据归一化(scaler)
- 归一化的数据训练得到模型
- 测试数据用同样的scaler进行归一化
- 送入训练得到的模型得到准确度
- 网格搜索调节超参数得到最好的模型
有些时候机器学习算法本身的学习并非那么重要,更重要的是对于机器学习流程的关注,这能让我们更好地理解机器学习和寻找到更好的算法。