分类分析|KNN分类模型及其Python实现

KNN分类模型及其Python实现

  • 1. KNN算法思想
  • 2. KNN算法步骤
    • 2.1 KNN主要优点
    • 2.2 KNN主要缺点
  • 3. Python实现KNN分类算法
    • 3.1 自定义方法实现KNN分类
    • 3.2 调用scikit-learn模块实现KNN分类
  • 4. K值的确定

在之前文章 分类分析|贝叶斯分类器及其Python实现中,我们对分类分析和分类模型进行了介绍,这里

1. KNN算法思想

 KNN(K-Nearest Neighbor)最邻近分类算法是一种基于类比学习的分类算法,其指导思想是”近朱者赤,近墨者黑“,即由你的邻居来推断出你的类别。其算法原理是在训练数据集中找出K个与预测样本距离最近且最相似的样本,这些样本大部分属于哪个类别,则该预测样本也属于哪个类别。
 KNN分类算法的实现原理:为了判断未知样本的类别,以所有已知类别的样本作为参照,计算未知样本与所有已知样本的距离,从中选取与未知样本距离最近的K个已知样本,根据少数服从多数的投票法则(majority-voting),将未知样本与 K K K个最邻近样本中所属类别占比较多的归为一类。

k k k最近邻分类主要的问题是确定样本集、距离函数、组合函数和 k k k值。

分类分析|KNN分类模型及其Python实现_第1张图片

2. KNN算法步骤

  1. 计算预测数据样本与各个训练数据样本之间的距离;
  2. 按照距离的递增关系进行排序;
  3. 选取距离最小的K个数据样本(前面K个);
  4. 确定前K个数据样本所在类别的出现频率;
  5. 前K个数据样本中出现频率最高的类别作为预测数据样本的类别。

2.1 KNN主要优点

(1) 简单好用,容易理解,精度高,理论成熟,既可以用来做分类也可以用来做回归。
(2) 可用于数值型数据和离散型数据。
(3) 训练时间复杂度为 O ( n ) O(n) O(n),无数据输入假定。
(4) 对异常值不敏感。

2.2 KNN主要缺点

KNN算法是目前较为常用且成熟的分类算法,但是KNN算法也有一定的不足:
(1) 计算复杂性高、空间复杂性高。
(2) 当样本不平衡(有些类别的样本数量很大,而其它样本的数量又很少)时,容易产生误分。
(3) 一般样本数量很大的时候不用KNN,因为计算量很大。但是数据样本量又不能太少,此时容易产生误分。
(4) 无法给出数据的内在含义。

3. Python实现KNN分类算法

3.1 自定义方法实现KNN分类

 下例中,假设训练集数据为学生各门课程测验成绩,标签为综合等级评价。利用KNN方法对样本进行分类预测。

#trainData-训练集、testData-测试集、labels-分类
def knn(trainData, testData, labels, k):
    rowSize = trainData.shape[0] #计算训练样本的行数
    diff=np.tile(testData,(rowSize,1))-trainData #计算训练样本和测试样本的差值
    sqrDiff = diff ** 2  #计算差值的平方和
    sqrDiffSum = sqrDiff.sum(axis=1)
    distances = sqrDiffSum ** 

你可能感兴趣的:(商务智能,数据挖掘,分类,python,数据挖掘)