KNN中的K值是如何影响结果的?

KNN中的K值是如何影响结果的?

KNN(K-Nearest Neighbors)是一种常用的机器学习算法,用于分类和回归问题。它通过计算待测样本与训练集中最近的k个样本的距离,来确定待测样本的类别或数值。KNN算法中的一个重要参数是k值,它决定了待测样本周围的最近邻样本数量。

在这篇文章中,我们将详细解释KNN中的k值是如何影响结果的。

算法原理

KNN算法基于一个假设:如果一个样本的k个最近邻样本属于某一类别,那么该样本很可能属于该类别。基于这个假设,KNN算法通过统计k个最近邻样本的类别中出现最频繁的类别,来预测待测样本的类别。

对于分类问题,KNN算法的基本步骤如下:
1. 计算待测样本与训练集中所有样本的距离;
2. 选择与待测样本距离最近的k个样本;
3. 统计这k个样本的类别中出现最频繁的类别;
4. 将待测样本标记为出现频率最高的类别。

公式推导

KNN算法中使用的距离度量通常是欧式距离(Euclidean distance)。对于两个样本$x$和$y$,欧式距离的计算公式为:

$$d(x, y) = \sqrt{\sum_{i=1}^{n}(x_i – y_i)^2}$$

其中,$n$为样本的特征数量。在计算距离时,我们需要根据样本的特征值进行比较。

计算步骤

为了更好地理解KNN算法中k值的影响,我们可以通过以下步骤来演示:

  1. 准备数据集:在这个例子中,我们使用一个虚拟数据集来演示。数据集包含两个特征变量和一个类别变量,共有100个样本。
import numpy as np

# 创建虚拟数据集
X = np.random.rand(100, 2) # 特征变量
y = np.random.choice([0, 1], size=100) # 类别变量
  1. 分割训练集和测试集:将数据集划分为训练集和测试集,通常采用70%的数据作为训练集,30%的数据作为测试集。
from sklearn.model_selection import train_test_split

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
  1. 训练KNN模型:使用训练集训练KNN模型,并设置不同的k值。
from sklearn.neighbors import KNeighborsClassifier

# 训练KNN模型并设置不同的k值
k_values = [1, 3, 5, 7]
models = []
for k in k_values:
    model = KNeighborsClassifier(n_neighbors=k)
    model.fit(X_train, y_train)
    models.append(model)
  1. 测试模型性能:使用测试集评估模型的性能,并比较不同k值的效果。
from sklearn.metrics import accuracy_score

# 测试模型性能
accuracies = []
for model in models:
    y_pred = model.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)
    accuracies.append(accuracy)
  1. 可视化结果:将不同k值下的准确率进行可视化,以便更直观地比较它们对结果的影响。
import matplotlib.pyplot as plt

# 绘制准确率曲线
plt.plot(k_values, accuracies, marker='o')
plt.xlabel('k value')
plt.ylabel('Accuracy')
plt.title('KNN Accuracy with Different k')
plt.show()

代码细节解释

在上述代码示例中,我们首先使用numpy库创建了一个包含两个特征变量和一个类别变量的虚拟数据集。然后,我们使用scikit-learn库中的train_test_split函数将数据集划分为训练集和测试集。接下来,我们使用KNeighborsClassifier类创建KNN模型,并使用不同的k值进行训练。最后,我们使用测试集评估模型的准确率,并将不同k值下的准确率进行可视化。

通过上述步骤,我们可以比较不同k值对KNN模型性能的影响。一般来说,较小的k值会导致模型过于敏感,容易受到噪声的影响,从而产生过拟合的问题;而较大的k值则会导致模型过于简单,容易受到样本不平衡的影响,从而产生欠拟合的问题。因此,选择一个合适的k值非常重要。

总之,KNN算法中的k值决定了待测样本周围最近邻样本的数量,从而影响了模型的泛化能力。通过选择合适的k值,我们可以获得更好的模型性能。

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/828431/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球