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

基本流程:

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
  • 1
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
好的,您的问题是导入交叉验证工具集,迭代次数为6,使用KNN模型(K从1至20),打印出KNN模型的最好得分和最优参数K。这个问题可以通过以下步骤来解决: 1. 导入必要的Python库,包括sklearn、numpy和matplotlib。 2. 读取数据集,将数据集划分为训练集和测试集。 3. 构建KNN模型,并使用交叉验证工具集来评估模型的性能。 4. 打印出KNN模型的最好得分和最优参数K。 下面是一个Python代码示例,可以用来实现这个问题: ```python from sklearn import datasets from sklearn.model_selection import train_test_split, cross_val_score from sklearn.neighbors import KNeighborsClassifier import numpy as np import matplotlib.pyplot as plt # 读取数据集 iris = datasets.load_iris() X = iris.data y = iris.target # 将数据集划分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 构建KNN模型,并使用交叉验证工具集来评估模型的性能 k_range = range(1, 21) k_scores = [] for k in k_range: knn = KNeighborsClassifier(n_neighbors=k) scores = cross_val_score(knn, X_train, y_train, cv=6, scoring='accuracy') k_scores.append(np.mean(scores)) # 打印出KNN模型的最好得分和最优参数K best_score = max(k_scores) best_k = k_range[k_scores.index(best_score)] print("KNN模型的最好得分为:{:.2f}%".format(best_score * 100)) print("KNN模型最优参数K为:{}".format(best_k)) # 可视化K交叉验证得分的关系 plt.plot(k_range, k_scores) plt.xlabel('Value of K for KNN') plt.ylabel('Cross-Validated Accuracy') plt.show() ``` 这个示例代码,我们使用了sklearn库的datasets模块来加载iris数据集。接着使用train_test_split()函数将数据集划分为训练集和测试集。然后,使用KNeighborsClassifier()函数构建KNN模型,并使用cross_val_score()函数和交叉验证工具集来评估模型在训练集上的性能。在这个例子,我们选择了6次迭代(cv=6)作为交叉验证的次数。最后,我们使用max()函数和index()函数来找到KNN模型的最好得分和最优参数K,并使用matplotlib库来可视化K交叉验证得分的关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值