K-近邻算法(KNN)概述:意思就是找最近的K点来判断属于哪个类别。
-
距离公式:
-
欧式距离:2. 曼哈顿距离:3.切比雪夫距离:4.闵可夫斯基距离: 5.标准化欧氏距离: 6。余弦距离:
-
-
计算流程:
-
计算已知类别的数据集中点与当前点之间的距离
-
按照距离递增次序排序
-
选取与当前点距离最小的K个点
-
统计前K个点所在的类别出现的概率
-
返回前K个点出现频率最高的类别作为当前点的预测分类
-
Scikit-learn的使用:
-
K-近邻算法的API:sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, algorithm = 'auto') n_neighbors表是默认使用的邻居数(默认为5),algorithm:{'auto','ball_tree','kd_tree','brute'}
-
看predict的数距离x的哪个值更近,然后在用x判断y,然后在输出y。 也就是100离4和3比较近,然而更倾向于4,4属于y的1,最后也就输出1.
-
获取数据集:from sklearn.datasets import load_iris
KD树:当KNN每次需要预测一个点时,我们都需要计算训练集中的每个点到这个点的距离,然后选出距离这个点最近的k个点进行投票。而KD树是 为了避免每次都要重新计算距离,算法会将距离信息保存到一棵树里,这样在计算之前从树里查询距离信息,避免重新计算。
-
基本原理:如果A和B很远,B和C很近,那么A和C也就很远,根据这个信息,有时候就可以跳过距离很远的点。类比 “二分查找”
-
案例分析:
-
按照X-Y-X的顺序划分树
-
例如查找(2.1,3.1) ,先看X轴,2.1比7小,所以走左边,然后再看Y轴,3.1比4小,所以又走左边,所以判断出在(2,3)附近
-
数据可视化:
数据集划分:一般会将数据划分为训练数据(用于训练构建模型)和测试数据(在模型检验时使用,用于评估模型是否有效)。
-
训练集占比:70% 80% 75%;测试集占比:30% 20% 25%
-
sklearn中数据集划分API: sklearn.model_selection.train_test_split(arrays,*options)
-
参数:
-
x : 数据集的特征值
-
y : 数据集的标签值
-
test_size : 测试集的大小, 一般为float
-
random_state : 随机数种子, 不同的种子会造成不同的随机采样结果,相同的种子的采样结果相同。
-
-
返回值:x_train, x_test, y_train, y_test (注意顺序是固定的,分别为特征值的训练集和测试集,目标值的训练集额测试集)
-