首页 > 编程语言 >Python 机器学习 K-近邻算法 K值的选择

Python 机器学习 K-近邻算法 K值的选择

时间:2024-02-01 22:13:59浏览次数:31  
标签:iris Python 近邻 选择 算法 import 数据

 

1、选择说明

K-近邻算法通过查找测试数据点的K个最近的邻居来进行预测。这些邻居的类别(对于分类问题)或值(对于回归问题)用于决定测试点的类别或值。K是一个正整数,通常较小。

1)避免过小的K值

K值过小可能会导致模型过于复杂,容易受到数据中噪声的影响,从而导致过拟合。避免在K-近邻算法中选择过小的K值是非常重要的,因为过小的K值会导致模型过于敏感,容易受到数据中噪声的影响,从而引起过拟合。当K值很小时,模型可能会对训练数据中的异常值和噪声过于敏感。

2)避免过大的K值

在使用K-近邻(KNN)算法时,避免选择过大的K值是很重要的。过大的K值可能导致模型过于简化,无法捕捉到数据的关键特征,进而导致欠拟合。如果数据集很小,选择一个较大的K值可能不合适,因为这会导致每个预测都依赖于数据集中的大部分点。考虑数据集的特征数量和种类。在高维数据集上,可能需要选择更小的K值,因为在高维空间中找到“近邻”变得更加困难。

3)选择奇数K值

在使用K-近邻算法(KNN)时,选择奇数的K值可以是一个有益的策略,尤其是在解决分类问题时。这是因为奇数的K值有助于避免在决策过程中出现平票的情况。尽管奇数的K值可以帮助避免平票问题,但选择哪个奇数作为K值仍然需要通过测试和验证来确定。

4)考虑数据集大小

选择K-近邻算法(KNN)的K值时,考虑数据集的大小是非常重要的。数据集的大小不仅影响K值的选择,还影响算法的性能和准确性。对于较小的数据集,较小的K值通常更好,因为较大的K值可能导致模型过于简化,无法捕捉数据中的细微差异。但需要注意,K值过小(如1或2)可能导致模型对噪声过于敏感,从而过拟合。在大型数据集上,可以考虑使用更大的K值。这有助于减少噪声的影响,并提高预测的稳定性。大型数据集通常包含更多的噪声和异常值,较大的K值有助于在这些情况下保持模型的健壮性。

2、操作方法

1)交叉验证

使用交叉验证来评估不同K值的性能。通常,可以从较小的K值开始,逐渐增加,观察模型性能如何变化。通过交叉验证来选择最佳的K值是一种有效的方法。交叉验证是一种统计分析方法,用于评估机器学习模型的泛化能力。它通过将数据集分成多个小的子集来进行,每次使用其中一个子集作为验证集,其余作为训练集。这种方法可以帮助我们理解不同K值对模型性能的影响,并选择最优的K值。

使用示例:Python 机器学习 K-近邻算法 K值的选择-CJavaPy

2)误差分析

绘制K值与误差率的图表,选择误差最小的K值。如果存在多个具有相似误差的K值,选择更简单的模型(较大的K值)。通过误差分析来选择K值是一种有效的方法。误差分析通常涉及评估不同K值下模型的性能,以便找到平衡偏差和方差的最佳K值。

import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 测试不同的K值
k_range = range(1, 40)
accuracy_scores = []

for k in k_range:
    knn = KNeighborsClassifier(n_neighbors=k)
    knn.fit(X_train, y_train)
    y_pred = knn.predict(X_test)
    accuracy_scores.append(accuracy_score(y_test, y_pred))

# 绘制K值和准确率之间的关系
plt.plot(k_range, accuracy_scores)
plt.xlabel('Value of K for KNN')
plt.ylabel('Testing Accuracy')
plt.draw()
plt.show()

3)平方根法则

一种常用的启发式方法是选择数据点总数的平方根作为K值。如有N个数据点,那么选择K值为sqrt(N)。这个方法的一个变体是选择数据点总数的平方根的整数部分。使用平方根法则来选择K-近邻算法(KNN)的K值是一种常见的经验法则。这个方法简单而直观,尤其适用于初步探索和快速实验。平方根法则建议将K值设置为训练集大小的平方根。

from sklearn.model_selection import cross_val_score
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
import numpy as np

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target

# 应用平方根法则选择K值
n_samples = X.shape[0]
k = int(np.sqrt(n_samples))

# 创建K-近邻模型
knn = KNeighborsClassifier(n_neighbors=k)

# 使用交叉验证评估模型
scores = cross_val_score(knn, X, y, cv=10, scoring='accuracy')
print(f"平均准确率: {scores.mean()},使用K值: {k}")

详细文档:Python 机器学习 K-近邻算法

标签:iris,Python,近邻,选择,算法,import,数据
From: https://www.cnblogs.com/tinyblog/p/18002221

相关文章

  • python基础爬虫
    python基础爬虫基于beautifulSoup的爬虫:一:先导包:importrequestsfrombs4importBeautifulSoup二:伪装:headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:122.0)Gecko/20100101Firefox/122.0'}user-agent在浏览器按f12->网络->消息头......
  • Selenium自动化测试之python
    1、简介Selenium是一个自动化测试工具,它支持多种浏览器和操作系统,可以模拟真实用户的行为,如点击、输入文本、滚动页面等。Selenium可以在多种编程语言中使用,如Java、Python、C#等。它可以帮助测试人员快速、准确地测试应用程序的功能和性能。Selenium还提供了丰富的API和库,使得测......
  • 很好用的python游戏环境(续2):强化学习算法走迷宫游戏环境(导航问题 navigation):分享一个py
    相关前文:很好用的python游戏环境(续):强化学习算法走迷宫游戏环境(导航问题navigation):分享一个python语言的迷宫游戏环境项目的GitHub地址:https://github.com/Wonz5130/Maze_AIPS.这个游戏有个非常严重且致命的error,那就是单击这个游戏界面的时候会自动转成AI执行,否则就是人......
  • 很好用的python游戏环境(续):强化学习算法走迷宫游戏环境(导航问题 navigation):分享一个pyt
    相关:很好用的python游戏环境:强化学习算法走迷宫游戏环境(导航问题navigation):分享一个python语言的迷宫游戏环境前文分享了一个python下的maze游戏环境,本文再给出一个不错的实现项目,这个项目的实现更加的简单,并且可视化界面做的很好看,是用tkinter框架做的可视化:相关:迷宫游戏p......
  • python语言下的迷宫游戏的实现猜想
    由于本人是研究AI的,尤其是AI的强化学习方向,有时候就会对一些小游戏环境的实现有几分兴趣,因为刚看了有关reinforcementlearning解决maze游戏的论文,于是就突发奇想的对这个maze迷宫的实现有些想了解了。迷宫其实就是在一个表格上画线,然后构成的从某点到另一个点的一个通路的环境:......
  • 代码随想录算法训练营第九天| 28. 实现 strStr() 459.重复的子字符串 字符串总结 双
     28.实现strStr()给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从0开始)。如果 needle 不是 haystack 的一部分,则返回  -1 。题目链接:28.找出字符串中第一个匹配项的下标-力扣(LeetCode)思路:标......
  • 快乐学Python,如何正确使用pandas处理时间类型的数据?
    在日常的数据分析工作中,常常会有根据日期来对数据进行分析。比如我们需要通过用户的下单时间来分析用户在不同时间段对商品的喜好;如通过访问日志的访问时间来分析系统的访问周期和负载,为不同时间段的资源调配提供依据;如通过用户刷短视频的时间来分析用户的行为特征和工作时间和工种......
  • 解决Python报错SSLError,如果试了网上一大堆方法还不行,看看这个吧!!
    前言这个问题困扰了群友一天,我怀着好奇心去试试看,不到5分钟给解决了哈哈。报错代码报错代码中对相关的host和url进行了替换,大家在网上发布内容也要注意隐私哈,多长个心眼子总没错。requests.exceptions.SSLError:HTTPSConnectionPool(host='xxx.com',port=443):Maxretries......
  • 很好用的python游戏环境:强化学习算法走迷宫游戏环境(导航问题 navigation):分享一个pyth
    项目的GitHub地址(作者:莫凡):https://github.com/MorvanZhou/mmaze运行的示例代码:importmmazestart=(0,0)end=(10,10)m=mmaze.generate(width=11,height=11,symmetry="horizontal")solutions=m.solve(start=start,end=end)m.plot(solution=solutions[0],......
  • python爬取教习网试卷下载
    #!/usr/local/bin/python3#-*-encoding:utf-8-*-importrequestsfromlxmlimportetreeimportosfromPILimportImageimportshutildefget_doc_url(url):headers={"User-Agent":"Mozilla/5.0(Macintosh;IntelMacOS......