python机器学习(手写数字识别)

导包

import matplotlib.pyplot as plt

import pandas as pd

from sklearn.model_selection import train_test_split

from sklearn.neighbors import KNeighborsClassifier

import joblib

from collections import Counter

1. 定义函数 show_digit(idx), 用于查看: 数字图片.

def show_digit(idx):

idx: 行索引, 即: 要哪行的数据.

1. 读取数据, 获取df对象.

data = pd.read_csv('data/手写数字识别.csv')

细节: 非法值校验.

if idx < 0 or idx > len(data) - 1 :

return

2. 获取数据, 即: 特征 + 标签

x = data.iloc[:, 1:]

y = data.iloc[:, 0]

3. 查看下数据集.

print(f'x的维度: {x.shape}') # (42000, 784)

print(f'y的各分类数量: {Counter(y)}') # Counter({1: 4684, 7: 4401, 3: 4351, 9: 4188, 2: 4177, 6: 4137, 0: 4132, 4: 4072, 8: 4063, 5: 3795})

4. 获取具体的 某张图片, 即: 某行数据 => 样本数据.

step1: 把图片转成 28 * 28像素(二维数组)

digit = x.iloc[idx].values.reshape(28, 28)

step2: 显示图片.

plt.imshow(digit, cmap='gray') # 灰色显示 => 灰度图

step3: 取消坐标显示.

plt.axis('off')

step4: 显示图片

plt.show()

2. 定义函数 train_model(), 用于训练模型.

def train_model():

1. 读取数据, 获取df对象.

data = pd.read_csv('data/手写数字识别.csv')

2. 获取数据, 即: 特征 + 标签

x = data.iloc[:, 1:]

y = data.iloc[:, 0]

3. 数据的预处理.

step1: x轴(像素点)的 归一化处理.

x = x / 255

step2: 区分训练集和测试集. stratify: 按照y的类别比例进行分割

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, stratify=y, random_state=21)

4. 训练模型.

estimator = KNeighborsClassifier(n_neighbors=3)

estimator.fit(x_train, y_train)

5. 模型预估, 评测正确率.

my_score = estimator.score(x_test, y_test)

print(f'模型预估正确率: {my_score}') # 0.9657142857142857

6. 保存模型.

joblib.dump(estimator, 'model/knn.pth')

3. 定义use_model()函数, 用于: 测试模型.

def use_model(): # pytest

1. 加载图片.

img = plt.imread('data/demo.png') # 28 * 28像素

plt.imshow(img, cmap='gray') # 灰度图

plt.show()

2. 加载模型.

estimator = joblib.load('model/knn.pth')

3. 预测图片.

img = img.reshape(1, -1) # 效果等价于: reshape(1, 784)

y_test = estimator.predict(img)

print(f'预测的数字是: {y_test}')

4. 在main函数中测试.

if name == 'main':

显示数字图片.

show_digit(10)

show_digit(21)

训练模型

train_model()

测试模型

use_model()

相关推荐
AI狂热爱好者4 分钟前
Meta 上周宣布正式开源小型语言模型 MobileLLM 系列
人工智能·ai·语言模型·自然语言处理·gpu算力
光锥智能5 分钟前
腾讯混元宣布大语言模型和3D模型正式开源
人工智能·语言模型·自然语言处理
新手小白勇闯新世界7 分钟前
论文阅读-用于图像识别的深度残差学习
论文阅读·人工智能·深度学习·学习·计算机视觉
大拨鼠10 分钟前
【多模态读论文系列】LLaMA-Adapter V2论文笔记
论文阅读·人工智能·llama
小嗷犬13 分钟前
【论文笔记】Dense Connector for MLLMs
论文阅读·人工智能·语言模型·大模型·多模态
子午22 分钟前
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
人工智能·python·深度学习
AI_小站24 分钟前
【AI工作流】FastGPT - 深入解析FastGPT工作流编排:从基础到高级应用的全面指南
人工智能·程序人生·语言模型·大模型·llm·fastgpt·大模型应用
是个热心市民26 分钟前
构建一个导航栏web
前端·javascript·python·django·html
B站计算机毕业设计超人38 分钟前
计算机毕业设计Hadoop+大模型地震预测系统 地震数据分析可视化 地震爬虫 大数据毕业设计 Spark 机器学习 深度学习 Flink 大数据
大数据·hadoop·爬虫·深度学习·机器学习·数据分析·课程设计
、你的风衣40 分钟前
FITS论文解析
人工智能·深度学习·论文笔记