数据挖掘中的算法KNN
引言
在数据挖掘领域,K最近邻算法(K Nearest Neighbors,简称KNN)是一种常用的分类与回归算法。该算法通过计算输入数据与训练数据集中的样本之间的距离,以最近的K个样本的分类结果来进行预测。本文将介绍KNN算法的原理、应用场景以及使用Python实现的示例代码。
算法原理
KNN算法的原理比较简单,它主要包含以下几个步骤:
- 计算输入数据与训练数据集中所有样本之间的距离(通常使用欧氏距离或曼哈顿距离);
- 选择距离最近的K个样本;
- 对于分类问题,选择K个样本中出现次数最多的类别作为预测结果;
- 对于回归问题,选择K个样本中的平均值作为预测结果。
应用场景
KNN算法在许多领域都有广泛的应用,包括但不限于以下几个方面:
- 图像识别:通过对图像像素进行特征提取,利用KNN算法进行图像分类;
- 推荐系统:根据用户的历史行为和兴趣,利用KNN算法为其推荐相似的商品或内容;
- 文本分类:通过对文本进行向量化表示,利用KNN算法进行文本分类;
- 医学诊断:根据病人的症状和历史数据,利用KNN算法进行疾病预测。
示例代码
下面是使用Python实现KNN算法的示例代码:
import numpy as np
def euclidean_distance(x1, x2):
return np.sqrt(np.sum((x1 - x2) ** 2))
class KNN:
def __init__(self, k=3):
self.k = k
def fit(self, X, y):
self.X_train = X
self.y_train = y
def predict(self, X):
y_pred = [self._predict(x) for x in X]
return np.array(y_pred)
def _predict(self, x):
distances = [euclidean_distance(x, x_train) for x_train in self.X_train]
k_indices = np.argsort(distances)[:self.k]
k_nearest_labels = [self.y_train[i] for i in k_indices]
most_common = Counter(k_nearest_labels).most_common(1)
return most_common[0][0]
上述代码中,我们首先定义了欧氏距离函数euclidean_distance
,用于计算两个向量之间的距离。然后定义了一个名为KNN
的类,其中fit
方法用于训练模型,predict
方法用于进行预测。在_predict
方法中,我们计算输入样本与训练样本之间的距离,并选择距离最近的K个样本进行预测。
类图
下面是KNN算法的类图表示:
classDiagram
KNN <|-- KNNClassifier
KNN <|-- KNNRegressor
KNN : +k : int
KNN : +fit(X, y)
KNN : +predict(X)
KNNClassifier : +_predict(x)
KNNRegressor : +_predict(x)
上述类图中,KNN算法是一个抽象类,它包含一个整数属性k和三个方法:fit
、predict
和_predict
。具体的分类和回归算法分别继承自KNN,并实现了_predict
方法。
状态图
下面是KNN算法的状态图表示:
stateDiagram
[*] --> Ready
Ready --> Training : fit(X, y)
Training --> Ready : complete
Ready --> Predicting : predict(X)
Predicting --> Ready : complete
上述状态图表示KNN算法的两个状态:Ready(就绪)和Training(训练)以及Predicting(预测)。算法开始时处于Ready状态,可以进行训练或预