机器学习(二)——k-邻近算法

目录

k-邻近算法概述

KNN算法流程

1. 准备数据集

2. 选择K值

3. 计算距离

4. 选择最近邻居

5. 进行预测

6. 评估模型性能

算法实现

实验中遇到的问题

总结


k-邻近算法概述

k-邻近算法是一种常用的机器学习算法,用于分类和回归问题。它基于一个简单的思想:给定一个未标记的数据点,在训练集中找到其K个最近邻居,并根据这K个最近邻居的标签来预测该数据点的标签。

KNN算法流程

1. 准备数据集

    准备带有标签的训练数据集,其中每个数据点都有特征和对应的标签

2. 选择K值

     k值过小,容易受异常值影响。k值过大,受到样本均衡的问题

3. 计算距离

     欧氏距离是最容易直观理解的距离度量方法

4. 选择最近邻居

    根据计算得到的距离,选择K个距离最近的训练数据点作为最近邻居。

5. 进行预测

    根据K个最近邻居的标签中出现次数最多的标签来预测未标记数据点的标签。

6. 评估模型性能

    使用测试集来评估KNN模型的性能

算法实现

import numpy as np
from collections import Counter

class KNN:
    def __init__(self, k):
        self.k = k
    
    def fit(self, X, y):
        self.X_train = X
        self.y_train = y
    
    def distance(self, x1, x2):
        return np.sqrt(np.sum((x1 - x2)**2))
    
    def _predict(self, x):
        distances = [self.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)
        return most_common[0][0]
    
    
    def predict(self, X):
        y_pred = [self._predict(x) for x in X]
        return np.array(y_pred)
    

    def accuracy(self, y_true, y_pred):
        accuracy = np.sum(y_true == y_pred) / len(y_true)
        return accuracy
# 加载数据集
X_train = np.array([[1, 2], [3, 4], [5, 6], [7, 8],[2, 3], [6, 7], [4, 5]])
y_train = np.array([0, 0, 1, 1, 0, 1, 1])
X_test = np.array([[2, 3], [6, 7]])
y_test = np.array([0, 1])


# 创建KNN对象并进行训练
knn = KNN(k=3)
knn.fit(X_train, y_train)

# 进行预测
y_pred = knn.predict(X_test)
print(y_pred)

# 评估模型性能
accuracy = knn.accuracy(y_test, y_pred)
print("准确率:", accuracy)

实验中遇到的问题

k的取值太大,数据集中某个种类的点太多,准确率会变得很低,k取1时容易被错误的数据干扰准确率也会变得很低

总结

KNN算法是一种简单而强大的分类和回归算法,易于理解和实现,要调整的参数少, 适用于各种类型的数据,能够捕捉到非线性关系,对于复杂的决策边界有较好的表现,可以轻松处理多类别问题,然而,它也有一些限制,如高计算复杂度、对异常值敏感等

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值