4-kNN-k近邻算法(k-Nearest Neighbors)
4-1 kNN算法基础
4-2 scikit-learn中的机器学习算法封装
4-3 训练数据集,测试数据集
4-4 分类准确度
4-5 超参数
KNN算法没有模型参数,只有一个超参数K,就是相邻点的数量。
但是如果考虑相邻点的距离占据权重,那么相邻的点都需要赋予权值,一般都是 取距离的导数加权,1/distance。
可以参考scikit-learn关于KNN的官方文档说明。
KNN的参数说明:https://scikit-learn.org/stable/modules/neighbors.html
官方文档关于KNN相关参数的介绍:
https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html
4-6 网格搜索与k近邻算法中更多超参数
sklearn.neighbors.DistanceMetric也可以认为是一种超参数,但是这个参数好像和p是互斥的。
参考文档:https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.DistanceMetric.html#sklearn.neighbors.DistanceMetric
4-7 数据归一化
4-8 scikit-learn中的Scaler
在官方文档找到的主要归一化的方式应该是四种,比较常用的有均值方差归一化和最值归一化,相关文档说明如下:
均值方差归一化:
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html#sklearn.preprocessing.StandardScaler
最值归一化:
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.MinMaxScaler.html#sklearn.preprocessing.MinMaxScaler
1.均值方差归一化 StandardScaler
z = (x - u) / s —— 减均值除均方差(但是验证数据的时候,还是有偏差,没搞明白)
文档里的例子,官方文档的链接里有许多样本案例。
>>> from sklearn.preprocessing import StandardScaler
>>> data = [[0, 0], [0, 0], [1, 1], [1, 1]]
>>> scaler = StandardScaler()
>>> print(scaler.fit(data))
StandardScaler()
>>> print(scaler.mean_)
[0.5 0.5]
>>> print(scaler.transform(data))
[[-1. -1.]
[-1. -1.]
[ 1. 1.]
[ 1. 1.]]
>>> print(scaler.transform([[2, 2]]))
[[3. 3.]]
和Z-score标准化好像是一个东西。
2.最值归一化 MinMaxScaler
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std * (max - min) + min
4-9 更多有关k近邻算法的思考
小结
KNN是没有模型参数,超参数1个以上的分类算法(n_neighbors是一定存在的,但是p和distance在特定情况下也是超参数),而且可以用于多分类问题。
本文暂时以文字和图片为主,具体的代码在ipynb上运行过了,等下次复习回顾的时候,再整理过来。