当前位置: 首页 > news >正文

机器学习-KNN

一、相关知识点

二、利用KNN完成香蕉和苹果的识别

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import cv2
import os
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifierdef preprocess(img):# image_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 灰度化# # 加入sobel算子用于提取边缘信息# # # 高斯滤波,去除噪声防止干扰边缘提取# gaussian = cv2.GaussianBlur(image_gray, (5, 5), sigmaX=2)  # sigmax为2是因为只有两种颜色# # 垂直梯度处理,(滤波)# image_ver = cv2.filter2D(gaussian, -1, kernel_ver)# # # 水平梯度处理,(滤波)# # image_hor = cv2.filter2D(gaussian, -1, kernel_hor)# image_ver = cv2.resize(image_ver,  target_size)# flattened_edge = image_ver.flatten()# # -----至此获取到了图像的边缘信息-----img = cv2.resize(img,  target_size)img_flat = img.flatten()  # 展平,否则knn无法读取# -----以上是图像的原本信息-----# combined_features = np.concatenate([flattened_edge, img_flat])# -----拼接,在不损失颜色信息的前提下同时加入边缘信息----return img_flat# # sobel算子,用于提取边缘
# # 垂直梯度算子
# kernel_ver = np.array([[-1, 0, -1],
#                        [-2, 0, 2],
#                        [-1, 0, 1]])
# # 水平梯度算子
# kernel_hor = np.array([[-1, -2, -1],
#                        [0, 0, 0],
#                        [1, 2, 1]])# 读取图片并预处理
images = []
target_size = (100, 100)
for file_name in os.listdir('../data/fruit/img'):img = cv2.imread(f'../data/fruit/img/{file_name}')img_flat = preprocess(img)images.append(img_flat)
print(len(images))
# 2. 转成 NumPy 数组 (n_samples, n_features)
X = np.array(images, dtype=np.float32)
# 3.标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 4.读取标签
labels = []
for file_name in os.listdir('../data/fruit/label'):with open(f'../data/fruit/label/{file_name}', 'r', encoding='utf-8') as f:first_char = f.read(1)labels.append(first_char)
print(len(labels))y = labels# -----------------训练# 分出训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=42
)# 训练
for i in range(3, 15):estimator = KNeighborsClassifier(n_neighbors=i, weights='distance')estimator.fit(X_train, y_train)  # fit的X参数必须输入二维的# 评估y_pred = estimator.predict(X_test)# 准确率accuracy = estimator.score(X_test, y_test)print(accuracy)# 对比找出分类错误的样本misclassified_indices = np.where(y_pred != y_test)[0]print(misclassified_indices)# 
estimator = KNeighborsClassifier(n_neighbors=5)
estimator.fit(X_train, y_train)  # fit的X参数必须输入二维的
sample = cv2.imread('F:\py_MachineLearning\MachineLearning\MachineLearning\img.png')
sample=preprocess(sample)
sample = sample.reshape(1, -1)
sample_pred = estimator.predict(sample)print("测试:",sample_pred)

 

http://www.dtcms.com/a/311712.html

相关文章:

  • springboot大学生成绩管理系统设计与实现
  • Git 的基本使用指南(1)
  • 人类学家与建筑师:区分UX研究和项目管理的需求分析
  • TFS-2022《A Novel Data-Driven Approach to Autonomous Fuzzy Clustering》
  • LVGL代码框架简介
  • 从底层架构到多元场景:计算机构成与应用的深度剖析
  • Mac电脑安装HomeBrew
  • 从AI智能体出发,重构数据中台:迈向Agentic时代的数据能力体系
  • 微积分基础 | 核心概念 / 公式推导
  • 【51单片机6位数码管密码锁】2022-10-15
  • 入门MicroPython+ESP32:安装逗脑IDE及驱动
  • 深入 Go 底层原理(十一):Go 的反射(Reflection)机制
  • ESP32 外设控制基础:GPIO 应用详解与输入输出案例
  • Text2SQL:如何通过自然语言直接获取数据,打破技术壁垒?
  • ventoy 是一个非常棒的开源工具,可以制作多系统的usb启动盘
  • Allegro降版本工具
  • Python 全局解释器锁
  • 如何静态链接 YARA 库,实现免依赖的独立可执行文件部署
  • MySqL(加餐)
  • 代码随想录Day36:动态规划(最后一块石头的重量 II、目标和、一和零)
  • 在线问诊系统源码解析:图文+视频双模式架构开发全攻略
  • 【07】VisionMaster入门到精通——Blob分折
  • IDM下载失败排查
  • 北京-4年功能测试2年空窗-报培训班学测开-今天来聊聊我的痛苦
  • 浪漫温柔的表白
  • 在linux(ubuntu)服务器上安装NTQQ并使用
  • 链表【数据结构】
  • UDP受限广播地址255.255.255.255的通信机制详解
  • 信号产生机制全解析:从硬件异常到软件触发的深度探索
  • sc-atac的基础知识(0)