K-近邻算法(K Nearest Neighbor,KNN)是一种基本分类与回归方法。在机器学习领域,KNN算法的核心思想是通过测量不同特征值之间的距离来进行分类。基于输入样本与样本集中已知类别的样本之间的距离,将其归类于最近的K个邻近样本的类别中。 在Python中,KNN算法可以使用诸如scikit-learn这样的库来实现。KNN算法的原理可以总结为以下几点: 1. 训练阶段:在训练阶段,算法不需要进行复杂的训练。它仅需要存储训练数据集,每一个数据点都包含了一组特征和一个标签。 2. 预测阶段:当输入一个新的数据点时,算法会计算该点与数据集中所有点的距离。距离可以使用不同的度量方式,最常用的是欧氏距离。一旦所有点的距离都被计算出来,算法会取出距离最小的K个点。 3. 分类决策:这K个最近邻点的标签会被用来决定新数据点的分类。通常通过多数投票法,即选择出现次数最多的类别标签。 关于距离度量,最常见的方法是欧氏距离,它衡量的是空间中两点的直线距离。欧氏距离的计算公式如下: 距离 = sqrt((x1-x2)^2 + (y1-y2)^2 + ... + (zn-xn)^2) 在Python代码实现中,我们使用numpy库来处理数组和数学计算,operator库来帮助我们排序字典。以下是实现KNN算法的Python代码示例: ```python import numpy as np import operator # 训练集 data_set = np.array([[1., 1.1], [1.0, 1.0], [0., 0.], [0, 0.1]]) labels = ['A', 'A', 'B', 'B'] def classify_knn(in_vector, training_data, training_label, k): """ :param in_vector: 待分类向量 :param training_data: 训练集向量 :param training_label: 训练集标签 :param k: 选择最近邻居的数目 :return: 分类器对in_vector分类的类别 """ data_size = training_data.shape[0] diff_mat = np.tile(in_vector, (data_size, 1)) - training_data sq_diff_mat = diff_mat ** 2 sq_distances = sq_diff_mat.sum(axis=1) distances_sorted_index = sq_distances.argsort() class_count_dict = {} for i in range(k): label = training_label[distances_sorted_index[i]] try: class_count_dict[label] += 1 except KeyError: class_count_dict[label] = 1 class_count_dict = sorted(class_count_dict.items(), key=operator.itemgetter(1), reverse=True) return class_count_dict[0][0] if __name__ == '__main__': vector = [0, 0] print classify_knn(in_vector=vector, training_data=data_set, training_label=labels, k=3) ``` 运行结果将给出一个分类结果,如上例中的"B"。 KNN算法的优点包括: - 精度高:如果k的选择得当,算法可以有很好的分类效果。 - 对异常值不敏感:单个离群点不会对KNN产生太大影响。 - 无数据输入假定:不对数据的分布做任何假设。 但是,KNN算法也有缺点,比如: - 计算复杂度高:因为每次分类都要计算新的点与训练集中每个点的距离。 - 空间复杂度高:需要存储整个训练数据集。 使用数据范围包括数据型(连续特征)和标称型(离散特征)数据。KNN方法通常用于一个更复杂分类算法的一部分,例如可以将其估计值作为对象的一个特征。有时候,即使是简单的KNN算法,在良好选择的特征上也可能有出色的表现。
- 粉丝: 3
- 资源: 944
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助