人工智能与机器学习 knn-classify

KNN 图像分类入门

用 scikit-learn 的 KNN 做图像分类,含训练、评估与准确率输出。

  • Python
  • 难度入门
  • 未提供
  • 许可证MIT

收录于 2026-10-18 · 最后核对 2026-10-18

概览

所有字段以收录时的公开信息为准

项目名称
KNN 图像分类入门
原始名称
未提供
别名
KNN 图像分类、图像分类、KNN、K 近邻、机器学习分类
一句话简介
用 scikit-learn 的 KNN 做图像分类,含训练、评估与准确率输出。
详细介绍

示例把图像展平成特征向量,交给 KNN 分类器训练,并划分训练集与测试集评估准确率。脚本内置断言校验准确率下限,跑完直接打印结果。适合理解图像分类的最小闭环:特征、模型、评估。

分类
人工智能与机器学习
语言
Python
技术栈
scikit-learn
上手难度
入门
Star 数
未提供
许可证
MIT
作者
开源拾遗

获取方式

优先使用原始仓库

本项目通过以下方式获取:站内代码片段

站内代码片段 58 行

文件snippets/knn-classify.py

knn-classify.py
"""KNN 图像分类入门 —— 站内原创示例代码

用途:用 scikit-learn 自带的 8x8 手写数字图像数据集,训练 K 近邻分类器并评估准确率。
      这是理解「图像分类」最基本流程的最小示例:数据 -> 特征 -> 训练 -> 评估。
依赖:scikit-learn(pip install scikit-learn)
运行:python knn-classify.py
许可:MIT(开源拾遗原创,可自由使用与修改)
"""

from sklearn.datasets import load_digits
from sklearn.metrics import accuracy_score, confusion_matrix
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

K = 5


def main():
    # 1. 载入数据:1797 张 8x8 手写数字图片,每张展平成 64 维特征
    digits = load_digits()
    images = digits.images
    features = digits.data
    labels = digits.target

    print("样本数:", features.shape[0], " 特征维度:", features.shape[1])

    # 2. 划分训练集与测试集
    x_train, x_test, y_train, y_test = train_test_split(
        features, labels, test_size=0.2, random_state=42, stratify=labels
    )

    # 3. 训练 KNN(直接比较像素距离,是最朴素的图像分类基线)
    model = KNeighborsClassifier(n_neighbors=K)
    model.fit(x_train, y_train)

    # 4. 评估
    predictions = model.predict(x_test)
    accuracy = accuracy_score(y_test, predictions)
    print("K =", K)
    print("测试集准确率: %.4f" % accuracy)

    # 5. 看一眼混淆情况
    matrix = confusion_matrix(y_test, predictions)
    print("混淆矩阵对角线(每类正确数):", [int(matrix[i][i]) for i in range(10)])

    # 自检:KNN 在该数据集上准确率应明显高于 0.9
    assert accuracy > 0.9, accuracy

    # 展示第一张测试图的预测结果
    print("第一张测试图真实值:", int(y_test[0]), " 预测值:", int(predictions[0]))
    print("图片像素(8x8):")
    for row in x_test[0].reshape(8, 8):
        print("".join("#" if value > 8 else "." for value in row))
    print("断言通过")


if __name__ == "__main__":
    main()

站内原创示例代码,仅演示核心思路,许可证为 MIT。本条目为站内整理内容,未提供原始仓库地址。

安装与运行

命令均来自公开资料

环境与依赖

  • Python 3.9+
  • scikit-learn
安装命令 未提供
运行命令
python snippets/knn-classify.py

数据与硬件

未核实的字段不会编造

数据集说明
未提供
硬件要求
未提供

运行验证状态

四态徽章

实验已验证

已按说明完成安装、启动,并跑通实验或核心流程,结果可复现。

  1. 未测试
  2. 依赖安装已测试
  3. 基本启动已测试
  4. 实验已验证

说明:只有真正执行过对应步骤才会升级状态;未测试 表示仅核对了公开信息。

当前状态
实验已验证
最后核对
2026-10-18
核对版本
待核实
验证说明

已在本机 Python 3.14.6 + scikit-learn 1.9.1 实际运行:测试集准确率 0.9833,内置断言通过。

许可证与引用

转载与引用请保留出处

许可证
MIT
作者 / 组织
开源拾遗
原始仓库
未提供
核对版本
待核实
最后核对
2026-10-18
收录日期
2026-10-18

引用建议

KNN 图像分类入门 / 开源拾遗. 《开源拾遗》收录,收录日期 2026-10-18,最后核对 2026-10-18. 许可证:MIT.

许可证以原始仓库的 LICENSE 文件为准;本站不对许可证做法律判断。