kNN处理iris数据集-使用交叉验证方法确定最优 k 值

本文介绍了如何运用kNN算法处理iris鸢尾花数据集,通过交叉验证来确定最佳的k值。基本流程包括计算距离、选择最近邻居及统计结果。实验中,对k值从1到120进行遍历,通过验证集计算错误率,以找到错误率最低的最优k值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本流程:

1、计算测试实例到所有训练集实例的距离;
2、对所有的距离进行排序,找到k个最近的邻居;
3、对k个近邻对应的结果进行合并,再排序,返回出现次数最多的那个结果。

交叉验证:

对每一个k,使用验证集计算,记录k对应的错误次数,取错误数最小的k

iris鸢尾花数据集

网上有很多下载的
http://archive.ics.uci.edu/ml/machine-learning-databases/iris/

代码

# -*- coding: utf-8 -*-
import os
import pandas as pd
import matplotlib.pyplot as plt
import math
import operator

#按照8:2的比例分割数据
#testSetIndex : 第几组为测试样本,取值范围0 - 4
def splitData(trainSet, testSet, testSetIndex):
    #data = pd.read_csv('iris.txt', skiprows=0, skipfooter=0, sep=r'\s+', encoding="utf-8", engine='python', header=None)
    data = pd.read_csv('iris.txt', encoding="utf-8", engine='python', header=None)

    for i in range(150):
        if testSetIndex == (i % 50) / 10:
            testSet.append(data.iloc[i])
        else:
            trainSet.append(data.iloc[i])
    return

#计算欧氏距离
#instance1 : 实例1
#instance2 : 实例2
#dimension :维度
def computeDistance(instance1, instance2, dimension
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值