结语
小编也是很有感触,如果一直都是在中小公司,没有接触过大型的互联网架构设计的话,只靠自己看书去提升可能一辈子都很难达到高级架构师的技术和认知高度。向厉害的人去学习是最有效减少时间摸索、精力浪费的方式。
我们选择的这个行业就一直要持续的学习,又很吃青春饭。
虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。
送给每一位想学习Java小伙伴,用来提升自己。
本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!
- 简介
K近邻 (k-Nearest Neighbors, KNN) 算法是一种分类与回归算法,是机器学习算法中最基础、最简单的算法之一, 1968年由 Cover和 Hart 提出, 应用场景有字符识别、 文本分类、 图像识别等领域。
- 算法的核心思想
一个样本与数据集中的k个样本最相似, 如果这k个样本中的大多数属于某一个类别, 则该样本也属于这个类别,具体来说即每个样本都可以用它最接近的k个邻居来代表。
如下图,如果 K = 1,未知数据(绿色的问号点)被小圈中的红色方块”决策“为class2 ;如果 K = 2 , 未知数据就会被大圈里的蓝色三角形”决策“为class1(理由是,有3个蓝色三角,大于红色方块的数目)。
- 算法执行的步骤
-
构造训练样本集,样本集中每一数据都有一个标签;
-
输入没有标签的数据,根据每一个维度的特征,从样本集选出k的最靠近的邻居;
-
用这k个邻居去投票得出未知数据的标签。
- 学习特点
K近邻算法是监督学习,训练样本集中的每一个数据都有确定的已知的标签。
K近邻法不具有显式的学习过程,事实上,它是懒惰学习(lazy learning)的著名代表,此类学习技术在训练阶段仅仅是把样本保存起来,训练时间开销为零,待收到测试样本后再进行处理。
- KNN算法的三要素
距离待预测点的邻居的个数K;
样本点之间距离的计算方式;
决策函数的选择;
下面分点依次对着KNN的三要素进行介绍。
K值的选择和影响
K是K近邻算法中的唯一一个超参数。
在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。
记样本数据集的容量为n;
K的选取一般来源于经验,一般选取一个较小的大于1的奇数,一般在 ( 1 , n ) (1,\sqrt n) (1,n )。
-
n较小时,n取 ( 1 , 10 ) (1,10) (1,10)中的奇数;
-
n较大时,n取 ( 1 , n / 2 ) (1,\sqrt n/2) (1,n /2)中的奇数;
简单介绍一下,k值过小或过大的对预测结果的影响。
k取值偏小
k取值偏小时,预测结果对近邻点的周围的实例及其敏感,容易受到噪声点的干扰,导致过拟合。
不妨取k的一个极小值来分析,比如 k = 1 k = 1 k=1,那么绿色三角形原本属于红色方块的类别,但却由于一个最邻近的噪声点呗误判为蓝色方块类型。
k取值偏大
k取值偏大时,相当于用较大邻域中的训练实例进行预测,模型鲁棒性比较好,其优点是可以减少学习的估计误差,但会导致欠拟合,因为离测试点很远的实例也会影响到预测结果,这就违背了KNN算法的基本思想 —— 用邻居数据点的去决策出未知点的类别。
如下图,有于K值取值太大,所以即使离三角形很远的点也被纳入的考虑范围,所以导致预测结果是真。
样本点距离的计算方式
在上述阐述中,经常需要衡量实例点之间的距离,而特征空间中的两个实例点的距离是两个实例点相似程度的反映。
不同的距离计算方式,有不同的几何意义,所以对结果的评价的也不近相同。
下面介绍几个数学上常用的距离计算。
假设有两个 m m m维的向量: x = [ x 1 , x 2 , … x i , … , x m ] x = [x_1,x_2,…x_i,…,x_m] x=[x1,x2,…xi,…,xm]
闵可夫斯基距离
严格来说闵氏距离并不是某种特定的距离,而是距离的一个定义:
p是参数
L p = ( ∑ i = 1 m ∣ x i − y i ∣ p ) 1 p L_p = (\sum_{i=1}^m |x_i - y_i |^{p} )^{{\tfrac{1}{p}}} Lp=(i=1∑m∣xi−yi∣p)p1
曼哈顿距离
L 1 = ( ∑ i = 1 m ∣ x i − y i ∣ ) L_1 = (\sum_{i=1}^m |x_i - y_i | )^{} L1=(i=1∑m∣xi−yi∣)
欧几里得距离
欧式距离是最常用在KNN算法距离计算中的。
它反映的是m维空间的点与点(向量与向量)之间的距离。
L 2 = ( ∑ i = 1 m ∣ x i − y i ∣ 2 ) 1 2 L_2 = (\sum_{i=1}^m |x_i - y_i |^{2} )^{{\tfrac{1}{2}}} L2=(i=1∑m∣xi−yi∣2)21
切比雪夫距离
由极限知识可以证明,当 p p p趋向于无穷大时,闵氏距离等于两个向量各特征维度差值的最大值
L ∞ = max i = 1 m ( ∣ x i − y i ∣ ) L_\infty = \max_{i=1}^{m}(|x_i-y_i|) L∞=i=1maxm(∣xi−yi∣)
余弦距离
上述三种距离体现的是数值上的绝对差异,而余弦距离体现方向上的相对差异。
两个向量之间的余弦公式为:
s i m i l a r i t y = c o s ( θ ) = ∑ i = 1 m x i ∗ y i ∑ x i 2 ∑ y i 2 similarity = cos(\theta) = \frac{\sum_{i=1}^m x_i*y_i}{\sqrt{\sum x_i^{2}} \sqrt{\sum y_i^{2}} } similarity=cos(θ)=∑xi2 ∑yi2 ∑i=1mxi∗yi
那么 余弦距离为:
d i s t a n c e = 1 − s i m i l a r i t y distance = 1 - similarity distance=1−similarity
显然, d i s t a n c e ∈ [ 0 , 2 ] distance \in [0,2] distance∈[0,2]。
这个距离越小,说明两个向量在方向上差别越小,反之,方向差异性大。
最后
由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!
小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》
15688248353)]