K近邻算法如何处理连续型和离散型特征?会有什么影响?

K近邻算法处理连续型和离散型特征

介绍

K近邻(K-nearest neighbors,KNN)算法是一种简单而有效的监督学习算法,用于解决分类和回归问题。它的基本思想是通过计算不同特征之间的距离来进行分类或回归预测。KNN算法对特征类型没有限制,可以同时处理连续型和离散型特征。

算法原理

KNN算法的原理非常简单,对于给定的实例,计算它与训练集中所有实例的距离,选取距离最近的K个实例,根据它们的类别进行投票(分类问题)或计算平均值(回归问题),将得票最多的类别或平均值作为预测结果。

公式推导

距离计算

KNN算法中常用的距离计算方法包括欧式距离、曼哈顿距离和闵可夫斯基距离。其中,欧式距离的计算公式为:
$$
d(x, y) = \sqrt{\sum_{i=1}^{n} (x_i – y_i)^2}
$$
这里,$x$和$y$分别表示两个实例的特征向量,$n$表示特征的数量。

分类规则

KNN算法的分类规则很简单,对于给定的实例$x$,计算它与训练集中所有实例的距离,选取距离最近的K个实例,根据它们的类别进行投票,将得票最多的类别作为$x$的预测类别。

计算步骤

  1. 计算待预测实例与训练集中所有实例的距离。
  2. 对距离进行排序,选取距离最近的K个实例。
  3. 根据K个实例的类别进行投票。
  4. 将得票最多的类别作为待预测实例的类别。

Python代码示例

import numpy as np
from collections import Counter

# 计算欧式距离
def euclidean_distance(x, y):
    return np.sqrt(np.sum((x - y) ** 2))

# KNN分类
def KNN_classifier(X_train, y_train, X_pred, K):
    distances = [euclidean_distance(x, X_pred) for x in X_train]
    nearest = np.argsort(distances)[:K]
    y_nearest = [y_train[i] for i in nearest]
    majority = Counter(y_nearest).most_common(1)
    return majority[0][0]

# 示例数据
X_train = np.array([[1, 2], [2, 3], [3, 4], [4, 5]])
y_train = np.array([0, 0, 1, 1])
X_pred = np.array([2.5, 3.5])
K = 3

# 进行KNN分类
prediction = KNN_classifier(X_train, y_train, X_pred, K)
print("预测类别:", prediction)

代码细节解释

  • euclidean_distance函数用于计算欧式距离。
  • KNN_classifier函数实现了KNN分类的逻辑,首先计算待预测实例与训练集中所有实例的距离,然后选取距离最近的K个实例,根据它们的类别进行投票,最后将得票最多的类别作为预测结果。
  • 示例数据中,X_train表示训练集的特征,y_train表示训练集的类别,X_pred表示待预测实例的特征,K表示KNN算法中的K值。
  • 最后打印出预测的类别。

通过以上介绍,我们可以看到KNN算法可以很好地处理连续型和离散型特征,它的原理简单清晰,代码实现也相对容易。在实际应用中,KNN算法可以处理各种类型的特征,并且具有较好的鲁棒性和预测准确性。

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

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

(0)

大家都在看

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