k近邻算法(K-Nearest Neighbors)KNN
k近邻算法(K-Nearest Neighbors)KNN
将当前样本的类别归类于距离最近的k个样本的类别
距离公式(2维)
- 欧式距离
$$
d = \sqrt{(x_1-y_1)^2 + (x_2 - y_2)^2}
$$ - 曼哈顿距离
$$
d = |x_1 - x_2| + |y_1 - y_2|
$$ - 切比雪夫距离
$$
d = \max\left(|x_1 - x_2|, |y_1 - y_2|\right)
$$
k值选择问题
| k值 | 影响 |
|---|---|
| 越大 | 模型过拟合,准确率波动较大 |
| 越小 | 模型欠拟合,准确率趋于稳定但可能较低 |
特征预处理
通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程
归一化
将数据变换到指定区间(默认是[0,1])
$$ x’ = \frac{x- x_{\text {min}}}{x_{\text{max}} - x_{\text{min}}} $$
若需要缩放到任意区间 ([a, b]),公式为: $$ x’ = a + \frac{(x - x_{\text{min}}) \cdot (b - a)}{x_{\text{max}} - x_{\text{min}}} $$
其中:( [a, b] ):目标区间的范围
归一化受到数据集的异常值的影响,需要进行标准化处理(更加合理)1
from sklearn.preprocessing import MinMaxScaler # 归一化
标准化
将数据调整为均值为 0,标准差为 1 的标准正态分布
$$ z = \frac{x - \mu}{\sigma} $$
( z ):标准化后的值 ( x ):原始数据值 ( $\mu$ ):数据的均值 ( $\sigma$):数据的标准差1
from sklearn.preprocessing import StandardScaler # 标准化
KNN代码实现
1 | import seaborn as sns |

交叉验证与网格搜索
1 | import seaborn as sns |

机器学习的基本步骤
- 获取数据集
- 数据集基本处理
- 去重去空、填充等操作
- 确定特征值和目标值
- 分割数据集
- 特征工程(特征预处理 标准化等)
- 机器学习
- 模型评估
数据分割的方法
- 留出法
训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响。
单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21from sklearn.model_selection import KFold,StratifiedKFold
import pandas as pd
X = np.array([
[1,2,3,4],
[11,12,13,14],
[21,22,23,24],
[31,32,33,34],
[41,42,43,44],
[51,52,53,54],
[61,62,63,64],
[71,72,73,74]
])
y=np.array([1,1,0,0,1,1,0,0])
folder = KFold(n_splits=4)
sfloder = StratifiedKFold(n_splits=4)
print("KFOLD:")
for train,test in folder.split(X,y):
print(f"train:{train},test:{test}")
print("SKFOLD:")
for train,test in sfloder.split(X,y):
print(f"train:{train},test:{test}")
- 自助法
- 交叉验证法
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 QuickReference!

