分类算法(KNN算法)

KNN(k-Nearest Neighbors)算法是一种常见的分类和回归算法。它的核心思想是通过计算待分类对象和训练集中已分类对象之间的距离来确定待分类对象所属的类别。其中,k表示选取距离待分类对象最近的k个训练样本,将这些样本的类别作为待分类对象的类别进行判定。

在分类问题中,KNN算法的基本步骤如下:

1.计算训练集中每个样本和待分类对象之间的距离。

2.选取距离待分类对象最近的k个训练样本。

3.统计这k个样本中出现最多的类别。

4.将待分类对象归为出现最多的类别。

在回归问题中,KNN算法的基本步骤如下:

1.计算训练集中每个样本和待预测对象之间的距离。

2.选取距离待预测对象最近的k个训练样本。

3.求这k个样本的平均值。

4.将待预测对象的预测值设为这个平均值。

需要注意的是,KNN算法中的距离度量方式会影响算法的分类或回归结果,一般使用欧氏距离、曼哈顿距离等度量方式。同时,在选择k值时,需要通过交叉验证等方法来确定最优的k值。

代码实现:

python 复制代码
import numpy as np

class KNN:
    def __init__(self, k=3):
        self.k = k
        
    def euclidean_distance(self, x1, x2):
        return np.sqrt(np.sum((x1 - x2)**2))
    
    def fit(self, X, y):
        self.X_train = X
        self.y_train = y
        
    def predict(self, X):
        y_pred = []
        for x in X:
            distances = [self.euclidean_distance(x, x_train) for x_train 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)
            y_pred.append(most_common[0][0])
        return np.array(y_pred)
相关推荐
北邮刘老师2 小时前
智能体治理:人工智能时代信息化系统的全新挑战与课题
大数据·人工智能·算法·机器学习·智能体互联网
诗词在线2 小时前
中国古代诗词名句按主题分类有哪些?(爱国 / 思乡 / 送别)
人工智能·python·分类·数据挖掘
AlenTech2 小时前
155. 最小栈 - 力扣(LeetCode)
算法·leetcode·职场和发展
mit6.8243 小时前
正反两次扫描|单调性cut
算法
Yzzz-F3 小时前
牛客小白月赛127 E
算法
大锦终3 小时前
递归回溯综合练习
c++·算法·深度优先
Keep__Fighting3 小时前
【神经网络的训练策略选取】
人工智能·深度学习·神经网络·算法
晚风吹长发3 小时前
初步了解Linux中的动静态库及其制作和使用
linux·运维·服务器·数据结构·c++·后端·算法
sin_hielo3 小时前
leetcode 3453(二分法)
算法
风之歌曲4 小时前
c++高精度模板
c++·算法·矩阵