以下是为您编写的 KNN 核心算法代码,用于对鸢尾花数据集进行分类: ```python import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 计算两个样本之间的欧氏距离 def euclidean_distance(x1, x2): """ 计算两个样本点之间的欧氏距离 :param x1: 样本 1 :param x2: 样本 2 :return: 欧氏距离 """ return np.sqrt(np.sum((x1 - x2) ** 2)) # KNN 分类器 class KNN: def __init__(self, k=5): """ 初始化 KNN 分类器 :param k: 近邻数量 """ self.k = k def fit(self, X, y): """ 训练模型 :param X: 特征矩阵 :param y: 标签向量 """ self.X_train = X self.y_train = y def predict(self, X_test): """ 预测标签 :param X_test: 测试集特征矩阵 :return: 预测标签 """ predictions = [] for test_sample in X_test: distances = [euclidean_distance(test_sample, x_train_sample) for x_train_sample 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)[0][0] predictions.append(most_common) return np.array(predictions) # 加载鸢尾花数据集 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 分类器对象并训练 knn = KNN(k=3) knn.fit(X_train, y_train) # 进行预测 y_pred = knn.predict(X_test) # 计算准确率 accuracy = np.sum(y_pred == y_test) / len(y_test) print("准确率:", accuracy) ``` 额外需要注意的逻辑点: 1. 数据预处理,比如对数据进行标准化或归一化处理,可能会提高模型的性能。 2. 调整 K 值,通过交叉验证等方法找到最优的 K 值。 3. 考虑对距离计算进行优化,提高算法效率。 [2024-11-19 23:05:12 | AI写代码神器 | 603点数解答]