KNN算法Python包实现教程
简介
K近邻(K Nearest Neighbors)算法是一种常见的分类和回归算法,它通过计算样本之间的距离来确定新样本的类别。在这篇文章中,我将教会你如何使用Python包来实现KNN算法。
整体流程
下面是实现KNN算法的整体流程,我们将按照以下步骤进行操作:
步骤 | 描述 |
---|---|
1 | 数据预处理 |
2 | 计算样本之间的距离 |
3 | 选择K个最近的邻居 |
4 | 使用投票法确定新样本的类别 |
接下来,我将为每个步骤提供详细的说明和示例代码。
步骤 1:数据预处理
在开始之前,我们需要对数据进行预处理。这包括加载数据集、将数据集拆分为训练集和测试集,以及对数据进行归一化处理。
# 引入所需的库
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 加载数据集
dataset = np.loadtxt("dataset.csv", delimiter=",")
# 划分特征和标签
X = dataset[:, 0:4]
y = dataset[:, 4]
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 对数据进行归一化处理
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
步骤 2:计算样本之间的距离
接下来,我们将计算训练集中每个样本与测试集样本之间的距离。常见的距离度量方法包括欧氏距离、曼哈顿距离等。
# 引入所需的库
from scipy.spatial.distance import cdist
# 计算训练集和测试集之间的距离
distances = cdist(X_test, X_train, metric='euclidean')
步骤 3:选择K个最近的邻居
在这一步中,我们需要选择K个最近的邻居。这里我们选择了默认值K=5,但你可以根据实际问题来调整K的值。
# 选择K个最近的邻居
K = 5
nearest_neighbors = np.argsort(distances, axis=1)[:, :K]
步骤 4:使用投票法确定新样本的类别
最后,我们使用投票法来确定新样本的类别。我们将根据K个最近邻居的类别进行投票,并选取票数最多的类别作为预测结果。
# 对K个最近邻居的类别进行投票
y_pred = np.zeros(X_test.shape[0])
for i, neighbors in enumerate(nearest_neighbors):
neighbor_labels = y_train[neighbors]
unique_labels, label_counts = np.unique(neighbor_labels, return_counts=True)
y_pred[i] = unique_labels[np.argmax(label_counts)]
完整代码
下面是完整的代码示例:
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from scipy.spatial.distance import cdist
# 加载数据集
dataset = np.loadtxt("dataset.csv", delimiter=",")
# 划分特征和标签
X = dataset[:, 0:4]
y = dataset[:, 4]
# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 对数据进行归一化处理
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 计算训练集和测试集之间的距离
distances = cdist(X_test, X_train, metric='euclidean')
# 选择K个最近的邻居
K = 5
nearest_neighbors = np.argsort(distances, axis=1)[:, :K]