【机器学习】KNN算法-鸢尾花种类预测

KNN算法-鸢尾花种类预测

文章目录

K最近邻(K-Nearest Neighbors,KNN)算法是一种用于模式识别和分类的简单但强大的机器学习算法。它的工作原理非常直观:给定一个新数据点,KNN算法会查找离这个数据点最近的K个已知数据点,然后基于这K个最近邻数据点的类别来决定新数据点的类别。简而言之,KNN算法通过周围数据点的多数投票来决定新数据点所属的类别。KNN常用于分类问题,如图像分类、文本分类、垃圾邮件检测等。它也可以用于回归问题,称为K最近邻回归(K-Nearest Neighbors Regression),用于预测数值型输出。

1. 数据集介绍

Iris数据集是常用的分类实验数据集,由Fisher,1936搜集整理。Iris也称为鸢尾花数据集,是一类多重变量分析的数据集。关于数据集的介绍:

  • 实例数量:150个,三种各有50个
  • 属性数量:4个,数值型,数值型,帮助预测的属性和类
  • Attribute Information:
    • 萼片长度,萼片宽度,花瓣长度,花瓣宽度 cm
    • 山鸢尾,变色鸢尾,维吉尼亚鸢尾

以下是代码、注释以及输出:

python 复制代码
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# K---近邻算法
def KNN_demo():
    """
    sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')
    n_neighbors:int可选,默认为5,k_neighbors查询默认使用的邻居数
    algorithm:{'auto','ball_tree','kd_tree','brute'},可选用于计算最近邻居的算法:'ball_tree'将会使用BallTree,'kd_tree'
    将会使用KDTree。'auto'将尝试根据传递给fit方法的值来决定最合适的算法。(不同实现方式影响效率)
    :return:
    """
    # 获取数据
    iris = load_iris()
    # 划分数据集
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state= 6)
    # 特征工程 标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    # KNN算法预估器
    estimator = KNeighborsClassifier(n_neighbors= 3)
    estimator.fit(x_train, y_train)
    # 模型评估
    # 方法一:
    y_predict = estimator.predict(x_test)
    print("y_predict:\n", y_predict)
    print("直接比对真实值和预测值:\n", y_test == y_predict)
    # 方法二:
    score = estimator.score(x_test, y_test)
    print("准确率为:\n", score)
    return None

if __name__ == "__main__":
    KNN_demo()
    pass
y_predict:
 [0 2 0 0 2 1 1 0 2 1 2 1 2 2 1 1 2 1 1 0 0 2 0 0 1 1 1 2 0 1 0 1 0 0 1 2 1
 2]
直接比对真实值和预测值:
 [ True  True  True  True  True  True False  True  True  True  True  True
  True  True  True False  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True False  True
  True  True]
准确率为:
 0.9210526315789473

2. KNN优缺点:

  • 优点:简单,易于实现,不需训练
  • 缺点:懒惰算法,对测试样本分类时计算量大,内存开销大;必须指定K值,K值选择不当则分类精度不能保证。
  • 使用场景:小数据场景,几千~几万样本,具体场景具体业务去测试。
相关推荐
香菜大丸7 分钟前
链表的归并排序
数据结构·算法·链表
jrrz08287 分钟前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
oliveira-time18 分钟前
golang学习2
算法
北京搜维尔科技有限公司32 分钟前
搜维尔科技:【应用】Xsens在荷兰车辆管理局人体工程学评估中的应用
人工智能·安全
说私域35 分钟前
基于开源 AI 智能名片 S2B2C 商城小程序的视频号交易小程序优化研究
人工智能·小程序·零售
YRr YRr36 分钟前
深度学习:Transformer Decoder详解
人工智能·深度学习·transformer
知来者逆41 分钟前
研究大语言模型在心理保健智能顾问的有效性和挑战
人工智能·神经网络·机器学习·语言模型·自然语言处理
云起无垠1 小时前
技术分享 | 大语言模型赋能软件测试:开启智能软件安全新时代
人工智能·安全·语言模型
老艾的AI世界1 小时前
新一代AI换脸更自然,DeepLiveCam下载介绍(可直播)
图像处理·人工智能·深度学习·神经网络·目标检测·机器学习·ai换脸·视频换脸·直播换脸·图片换脸
南宫生1 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法