KNN 鸢尾花

这篇博客主要介绍了作者使用原生Python实现KNN算法的过程,包括算法设计、源代码展示、运行结果和调试分析。通过KNN算法的学习,作者对机器学习有了初步的认识,理解了其基于数据构建模型并进行预测的思想。

1、作业题目

原生python实现knn算法

2、算法设计

在这里插入图片描述

3、源代码

import random
import time
import math
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

class MyKNN:
    
    def __init__(self, n_neighbors):
        '''指定近邻个数'''
        self.n_neighbors = n_neighbors # 近邻数
        # self.x_new = [] # 预测数据集
        
    def predict(self, x_new):
        '''预测模型'''
        targetList = [] # 存储预测数据的预测所属类
        for i in range(len(x_new)):
            tp = x_new[i]
            #print(tp)
            distList = self.get_deftDist(tp) # 获取此时测试数据x_new[i]与预先序列的距离
            for j in range(len(self.x_train)):
                Lmax = max(distList)
                L = 0
                for k in range(len(self.x_train[j])):
                    L += (tp[k]-self.x_train[j][k])**2 # 遍历训练集,计算当前x_new[i]训练集与x_train[j]的距离
                L =
### 使用KNN算法对鸢尾花数据集进行分类 #### 数据准备 为了使用KNN算法对鸢尾花数据集进行分类,首先需要加载并准备好数据。可以从`sklearn.datasets`模块中导入鸢尾花数据集。 ```python from sklearn import datasets import numpy as np iris = datasets.load_iris() X = iris.data y = iris.target ``` 由于提到过在应用KNN之前应当考虑数据预处理[^2],因此建议对特征数据执行标准化操作: ```python from sklearn.preprocessing import StandardScaler scaler = StandardScaler().fit(X) X_standardized = scaler.transform(X) ``` #### 划分训练集与测试集 合理划分训练集和测试集有助于评估模型性能。通常情况下,可以按照一定比例分割原始数据集。 ```python from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( X_standardized, y, test_size=0.3, random_state=42, stratify=y) ``` 这里设置了`stratify=y`来保持类别分布的一致性。 #### 构建与训练KNN模型 接下来创建一个KNN分类器对象,并指定邻居数量k值。然后利用训练集对其进行拟合。 ```python from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier(n_neighbors=5) knn.fit(X_train, y_train) ``` #### 测试模型准确性 最后通过预测测试集中样本所属类别并与真实标签对比得出准确率。 ```python y_pred = knn.predict(X_test) print(f"Test set score: {np.mean(y_pred == y_test):.2f}") ``` 上述过程展示了如何基于Python实现KNN算法对鸢尾花数据集的分类任务[^4]。值得注意的是,当面对图像这类高维复杂数据时,直接运用KNN可能会遇到挑战,如计算成本过高以及容易受到背景因素干扰等问题[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值