实战案例|手写数字识别模型~

简介: 大家好,我是志斌~今天来跟大家分享一下K近邻算法的原理以及通过识别手写数字模型来看如何用Python实现它。

01原理


K近邻算法又称KNN算法,是非常经典的机器学习算法,它的原理十分简单:对于一个新样本,计算出它距离其他样本点的距离,然后选取K个数,这K个数大多数属于哪个类别,则新样本也属于这个类别。


如下图,绿色的小球是新样本,当K=3时,样本点有两个三角形和一个正方形,所以我们可以认为新样本属于三角形;当K=5时,样本点有三个正方向和两个三角形,所以我们可以认为新样本属于正方形;同理可得,当K=11时,新样本属于正方形。


80.png计算两点间的距离,可以直接使用两点间距离公式:

81.png

n维空间的两点间距离公式为:

82.png

02搭建模型


通过搭建一个手写数字识别模型来讲解如何用Python使用K近邻算法。(ps:本章涉及到图像识别部分知识,因为篇幅原因将放到下篇文章进行分享。)


首先读取数据进行查看。


# 1.读取数据
import pandas as pd
df = pd.read_excel('手写字体识别.xlsx')



83.png

第一列是手写数字,其余每一列则是手写数字的二值化处理后的值。


开始设置特征变量和目标变量。


X = df.drop(columns='对应数字') 
Y = df['对应数字']


对数据集进行划分,其中20%的数据为测试集,80%的数据为训练集。


from sklearn.model_selection import train_test_split
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_si



84.png


85.png


现在对已经划分好的数据集进行训练。


from sklearn.neighbors import KNeighborsClassifier as KNN
knn = KNN(n_neighbors=5) 
knn.fit(X_train, Y_train)


对模型用测试集进行测试


Y_pred = knn.predict(X_test)


查看一下预测的准确度。


from sklearn.metrics import accuracy_score
score = accuracy_score(Y_pred,Y_test)


预测准确度为:


86.png

03模型优化


模型搭建好后,我们还可以对n_neighbors参数进行调优,从而进一步优化模型。


from sklearn.model_selection import GridSearchCV
params = {'n_neighbors':[1,2,3,4,5,6,7,8,9]}
knn = KNN()
grid_search = GridSearchCV(knn,params,cv=5)
grid_search.fit(X_train,Y_train)
grid_search.best_params_


n_neighbors参数最优值为:


87.png

04小结


1. 本文介绍了K近邻算法,并通过识别手写数字模型来看如何用Python实现它。

2. 本文仅供学习,不做它用。

相关文章
|
5月前
|
机器学习/深度学习 数据采集 存储
神经网络案例实战
使用PyTorch解决手机价格分类问题:收集包含RAM、存储等特征的手机销售数据,将价格分为4个等级的分类任务。步骤包括数据预处理、特征工程、选择神经网络模型、训练、评估和预测。模型使用Sigmoid激活的三层网络,训练时采用交叉熵损失和SGD优化器。通过调整模型结构、优化器和学习率以优化性能。
|
6月前
|
机器学习/深度学习 数据可视化
模型性能评价实战
模型性能评价实战
|
5月前
|
机器学习/深度学习 算法 PyTorch
【从零开始学习深度学习】45. Pytorch迁移学习微调方法实战:使用微调技术进行2分类图片热狗识别模型训练【含源码与数据集】
【从零开始学习深度学习】45. Pytorch迁移学习微调方法实战:使用微调技术进行2分类图片热狗识别模型训练【含源码与数据集】
|
6月前
|
机器学习/深度学习 数据采集 算法
机器学习实战第3天:手写数字识别
机器学习实战第3天:手写数字识别
|
6月前
|
机器学习/深度学习 监控 算法
|
6月前
|
机器学习/深度学习 数据采集 前端开发
【Python机器学习专栏】模型泛化能力与交叉验证
【4月更文挑战第30天】本文探讨了机器学习中模型泛化能力的重要性,它是衡量模型对未知数据预测能力的关键。过拟合和欠拟合影响泛化能力,而交叉验证是评估和提升泛化能力的有效工具。通过K折交叉验证等方法,可以发现并优化模型,如调整参数、选择合适模型、数据预处理、特征选择和集成学习。Python中可利用scikit-learn的cross_val_score函数进行交叉验证。
467 0
|
6月前
|
机器学习/深度学习 并行计算 算法
R语言深度学习不同模型对比分析案例
R语言深度学习不同模型对比分析案例
|
6月前
|
机器学习/深度学习 Serverless
机器学习入门案例-鸢尾花
机器学习入门案例-鸢尾花
89 0
|
机器学习/深度学习 算法 PyTorch
机器学习-逻辑回归:从技术原理到案例实战
机器学习-逻辑回归:从技术原理到案例实战
321 0
|
机器学习/深度学习 算法 C++
[笔记]机器学习之机器学习模型及案例分析《一》回归(二)
[笔记]机器学习之机器学习模型及案例分析《一》回归(二)
160 0
下一篇
无影云桌面