一、机器学习是什么?
1.1 学习的定义
近代学习是心理学的一个术语。它有广义和狭义之分。广义的学习是指人和动物在生活过程中获得个体经验的过程,是动物和人类生活中的普遍现象。如动物园里的象学会吹口琴、海狮和鲸鱼学会顶球、熊学会合掌拜谢等。狭义的学习指的是学生在学校里的学习。
1.2 机器学习的定义
维基百科机器学习有下面几种定义:
机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能。
机器学习是对能通过经验自动改进的计算机算法的研究。
机器学习是用数据或以往的经验,以此优化计算机程序的性能标准。
二、Scikit-learn
Scikit-learn(以前称为scikits.learn,也称为sklearn)是针对Python 编程语言的免费软件机器学习库。
Scikit-learn官方网站:https://scikit-learn.org/stable/
Scikit-learn简介:
1.简单有效的工具进行预测数据分析。
2.每个人都可以访问,并且可以在各种情况下重用。
3.基于NumPy,SciPy和matplotlib构建。
4.开源,可商业使用-BSD许可证。
三:机器学习的目的
机器学习的目的:通过特征提取、分类、回归来解决实际问题。
机器学习流程:一般分为两步,第一步是人工提取特征,然后第二步再通过特征分类、回归来选择相应的模型。
机器学习的缺点:人工提取特征效果不好且难度高、应用场景少、数据不能太多。
四:机器学习的分类问题
分类一般指的是标识对象属于哪个类别。常用的算法有K近邻(KNN)、决策树、朴素贝叶斯、逻辑回归、支持向量机(SVM)、随机森林。常用在垃圾邮件检测、图像识别。
4.1 KD-TREE
什么是KD树(k-dimensional树的简称)? 它是一种分割k维数据空间的数据结构,主要应用于多维空间关键数据的近邻查找(Nearest Neighbor)和近似最近邻查找(Approximate Nearest Neighbor)。
KD树的性质:
其实KDTree就是二叉查找树(Binary Search Tree,BST)的变种。二叉查找树的性质如下:
1)若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值;
2)若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值;
3)它的左、右子树也分别为二叉排序树;
KD树的步骤:
一:排序
拿到一堆一维数据,从小到大排序成15,30,20,50,60,70. 然后取中间的数50(如果数据总量是偶数,则取两个数中稍大的数)
二:创建
1) 在一维里面创建二叉树,例如 :
2) 在二维里面创建二叉树,例如:
假设有6个二维数据点{(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)},数据点位于二维空间内(如下图中黑点所示)。kd树算法就是要确定图1中这些分割空间的分割线(多维空间即为分割平面,一般为超平面)。
- 分别计算x,y方向上数据的方差,得知x方向上的方差最大;
- 根据x轴方向的值2,5,9,4,8,7排序选出中值为7,所以该node中的data = (7,2)。这样,该节点的分割超平面就是通过(7,2)并垂直于x轴的直线x = 7;
- 确定左子空间和右子空间。分割超平面x = 7将整个空间分为两部分,如下图所示。x < = 7的部分为左子空间,包含3个节点{(2,3),(5,4),(4,7)};另一部分为右子空间,包含2个节点{(9,6),(8,1)}
k-d树的构建是一个递归的过程。然后对左子空间和右子空间内的数据重复根节点的过程就可以得到下一级子节点(5,4)和(9,6)(也就是左右子空间的’根’节点),同时将空间和数据集进一步细分。如此反复直到空间中只包含一个数据点,如下图所示:
三:查找
1) 查找点Q(2.1, 3.1)
如下图所示,红色的点即为要查找的点。通过图4二叉搜索,顺着搜索路径很快就能找到当前的最邻近点(2,3)。
2)查找点Q(2, 4.5)
KD树-总结:Kd树在维度较小时(比如20、30),算法的查找效率很高,然而当数据维度增大(例如:K≥100),查找效率会随着维度的增加而迅速下降。假设数据集的维数为D,一般来说要求数据的规模N满足N>>2的D次方,才能达到高效的搜索。
KD树-改进:为了能够让Kd树满足对高维数据的索引,Jeffrey S. Beis和David G. Lowe提出了一种改进算法——Kd-tree with BBF(Best Bin First),该算法能够实现近似K近邻的快速搜索,在保证一定查找精度的前提下使得查找速度较快。