KNN: K-近邻算法
一.算法解释
- 数据集的样本空间中,总有k个最相似的样本。
- 其中大多数属于与一个类比时,则该样本属于该类比
案例: 客户流失预测,欺诈侦测
1.计算步骤
1.算距离: 给定测试对象,计算其到训练集中所有样本的距离
2.排序: 按距离进行排序
3.选k点: 选取当前距离最小的k个点
4.算频率: 计算k个点的频率
5.做分类: 根据频率最高的k点进行当前样本进行的分类
2.算法特性
- 模型简单,计算开销大,可解释性差
- 对测试样本进行分类时才去找K个邻近
- 适用于稀有问题分类(占比级底的问题)
- 适用于多分类问题
二.算法步骤
1.算距离
计算衡量包括:欧氏距离,余弦夹角
2.找邻居
通过k值选取近邻
决定:近邻的正负
3.分类
- 投票
- 加权投票(权重=距离平方的倒数)
三.参数认知
参数名 | 意义 | 接收 | 默认 |
---|---|---|---|
n_neighbors | 近邻数 | int | 5 |
weights | 预测中使用的权重函数 | “uniform”: 统一权重。 每个邻域中的所有点均被加权。 “distance”: 权重点与其距离的倒数。 在这种情况下,查询点的近邻比远处的近邻具有更大的影响力。 [callable]: 用户定义的函数,该函数接受距离数组,并返回包含权重的相同形状的数组。 | “uniform” |
algorithm | 用于计算最近临近点的算法: | “ ball_tree”: 将使用BallTree “kd_tree”: 将使用KDTree “brute”: 将使用暴力搜索。 “auto”: 将尝试根据传递给fit方法的值来决定最合适的算法。 | ’auto’ |
leaf_size | 叶大小的传递 | int | 30 |
p | Minkowski指标的功率参数 | int | 2 |
metric | 树使用的距离度量 | str | ’minkowski’ |
metric_params | 度量功能的其他关键字参数。 | dict | None |
n_jobs | 为临近点搜索运行的并行作业数 | Int | None |