欢迎访问宙启技术站
智能推送

Python函数实现机器学习中的k近邻算法

发布时间:2023-09-25 04:05:05

k近邻算法是机器学习中的一种常用的分类和回归算法。它的基本思想是通过计算样本之间的距离,将待分类的样本归为距离最近的k个训练样本所属的类别。在Python中,我们可以通过编写函数来实现k近邻算法。

首先,我们需要导入必要的库,例如numpy和collections:

import numpy as np
from collections import Counter

接下来,我们可以编写一个函数来计算两个样本之间的距离。在k近邻算法中,常用的距离度量方法包括欧氏距离和曼哈顿距离。这里我们选择使用欧氏距离:

def euclidean_distance(x1, x2):
    return np.sqrt(np.sum((x1 - x2)**2))

然后,我们可以编写一个函数来实现k近邻算法的主要逻辑。该函数需要传入以下参数:训练数据集(X_train),训练数据集的标签(y_train),预测数据集(X_test),以及k值。

def k_nearest_neighbors(X_train, y_train, X_test, k):
    y_pred = []
    for test_sample in X_test:
        distances = []
        for train_sample, label in zip(X_train, y_train):
            distances.append(euclidean_distance(test_sample, train_sample))
        k_indices = np.argsort(distances)[:k]
        k_labels = [y_train[i] for i in k_indices]
        most_common = Counter(k_labels).most_common(1)
        y_pred.append(most_common[0][0])
    return y_pred

在上述函数中,我们遍历预测数据集中的每个样本,并计算其与训练数据集中所有样本的距离。然后,我们选择距离最近的k个训练样本,并统计它们所属的类别。最后,我们选择出现次数最多的类别作为预测结果。

最后,我们可以使用该函数来进行分类预测。下面是一个使用鸢尾花数据集进行分类预测的示例:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 导入数据集
iris_dataset = load_iris()
X = iris_dataset.data
y = iris_dataset.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 使用k近邻算法进行预测
y_pred = k_nearest_neighbors(X_train, y_train, X_test, k=3)

# 打印预测结果
print(y_pred)

这样,我们就完成了在Python中实现k近邻算法的函数。将上述代码复制到Python环境中运行,即可得到预测结果。