1. 介绍KNN算法
KNN(k-Nearest Neighbors)算法是一种常用的机器学习算法,用于分类和回归问题。KNN算法通过在训练数据中寻找与新样本最相似的k个邻近样本,来确定新样本的类别。其基本思想是“近朱者赤,近墨者黑”,即新样本的类别与其邻近样本的类别相同。
2. KNN算法的实现流程
2.1 数据预处理
KNN算法要求数据具有数值特征,因此需要对原始数据进行预处理。常见的预处理步骤包括数据清洗、数据标准化等。例如,将分类问题中的类别标签转换为数值标签。
2.2 计算样本之间的距离
对于每个新样本,需要计算其与训练样本之间的距离。常用的距离度量方法有欧氏距离、曼哈顿距离等。以欧氏距离为例,其计算公式为:
import numpy as np
def euclidean_distance(x1, x2):
return np.sqrt(np.sum((x1 - x2) ** 2))
2.3 寻找最近的k个邻近样本
根据计算得到的样本之间的距离,选择距离最近的k个邻近样本。可以使用排序算法(如快速排序)对距离进行排序,或者使用堆数据结构来寻找最小的k个距离。
def get_neighbors(X_train, y_train, x_new, k):
distances = []
for i in range(len(X_train)):
dist = euclidean_distance(X_train[i], x_new)
distances.append((X_train[i], y_train[i], dist))
distances.sort(key=lambda x: x[2])
neighbors = []
for i in range(k):
neighbors.append((distances[i][0], distances[i][1]))
return neighbors
2.4 进行分类
根据最近的k个邻近样本的类别,通过投票或权重方式来决定新样本的类别。投票方式是选择k个邻近样本中最多的类别作为新样本的类别。
def predict_classification(neighbors):
class_votes = {}
for neighbor in neighbors:
label = neighbor[1]
if label in class_votes:
class_votes[label] += 1
else:
class_votes[label] = 1
sorted_votes = sorted(class_votes.items(), key=lambda x: x[1], reverse=True)
return sorted_votes[0][0]
3. 使用KNN算法进行分类
以下是一个使用KNN算法进行分类的示例:
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 定义KNN分类器
class KNNClassifier:
def __init__(self, k):
self.k = k
def fit(self, X_train, y_train):
self.X_train = X_train
self.y_train = y_train
def predict(self, X_test):
y_pred = []
for x in X_test:
neighbors = get_neighbors(self.X_train, self.y_train, x, self.k)
y_pred.append(predict_classification(neighbors))
return np.array(y_pred)
# 创建KNN分类器并进行训练
knn = KNNClassifier(k=3)
knn.fit(X_train, y_train)
# 进行预测
y_pred = knn.predict(X_test)
# 计算准确率
accuracy = np.mean(y_pred == y_test) * 100
print(f"Accuracy: {accuracy}%")
4. 总结
本文介绍了KNN算法的基本原理以及在Python中如何实现KNN算法进行分类。KNN算法通过寻找最近的k个邻近样本来确定新样本的类别,适用于分类问题。通过数据预处理、距离计算、邻近样本选择和分类决策等步骤,可以完成KNN算法的实现。使用sklearn库中的相关函数可以简化KNN算法的实现过程。
需要注意的是,KNN算法的性能很大程度上依赖于数据的质量、特征选择和距离度量方法的选择等因素。在实际应用中,可以尝试不同的k值和距离度量方法,以达到更好的分类效果。