人工智能
python,机器学习,深度学习,NLP,CV
一、K近邻算法(KNN)
适用场景(优缺点)
低维度下的一个非常高效的算法。
注:
- 不适合高维度(如1000维以上)— KNN算法核心是计算距离的,若x=(x1, x2, …, x1000), y=(y1, y2, …, y1000),但极端情况可能是只有两个特征如x1, x2与y1, y2有用,其他特征与相似度无关,如果则把每一个特征都考虑进来计算距离(相似度)则会不断地削减这两个实际上有用的特征,最后可能就会被算法忽略掉了。
- 不适合数据量大的(需要把样本数量简化一下)。
定义
利用KNN判断“我”是哪一类的原理:
KNN中的k就是选取离“我”最近的k个样本,然后通过少数服从多数投票决策的方式,来判断“我”是哪一类的(如Offer / No offer)。
知识点
1.向量
建模:即把一个物体表示成向量,以方便进行数学计算!
特征工程:把一个物体表示成向量的过程叫特征工程。
注:向量/矩阵/张量 都是数组。如下:
向量:一维
矩阵:二维
张量:多维
2.标签
3.相似度(距离)
多维:
4.决策边界
- 决策边界很重要!!!且决策边界是判断一个算法是线性还是非线性的唯一标准。
注:一个算法是线性还是非线性不是由算法的形态或目标函数的形式来决定的,而是由决策边界来决定的。 - 我们要了解每个算法的决策边界是什么样的。线性算法如线性回归、逻辑回归的决策边界是线性的。而随机森林、神经网络这种的决策边界是非线性的(曲线的)。
越复杂的算法找出来的决策边界就越陡峭(“弯弯越多”):
图3不一定是最好的算法,虽然将当前的训练数据给完美分开了,但对于其他未知的测试数据不一定能很好的分类,有可能属于过拟合的情况。
5.交叉验证
K折交叉验证。如K=5。
交叉验证的特例,K=N(留一法):
如图:每次留一个黄色样本点作为测试,其余点作为训练。分别得到准确率a1, a2, a3, …。最后对这些准确率求平均值。
6.特征缩放
方式(1)线性归一化(即min-max标准化)
目的:数值转化,达到将值 映射到0~1之间。
方法:利用D = max-min的宽度作为分母,d = x-min的宽度作为分子,看占比。由此d/D的值必定在[0, 1]
方式(2)标准差标准化(即高斯标准化)
目的:数值转化,达到将值 映射到均值为0、方差为1的高斯分布上。
方法:用x-均值mean(x),再除以标准差std(x)
带权重的KNN
如图:k=3时圆圈里有两个offer一个No offer,正常投票决策会将预测点(2.4, 12.8)划分为offer。但是x3离预测点更近,即影响的权重更大,可能是No offer的,设想一下离着非常非常近如双胞胎一样极其相似则可能也是No offer的,故考虑用指数函数exp(-1)来设定权重值。
权重计算:exp(-
λ
\lambda
λ |x-xi|2)