使用逻辑回归对mnist手写数字进行识别

什么是AI?
The theory and development of computer systems able to perform tasks normally requiring human intelligence.(–Oxford Dictionary)
Using data to solve problems.(–cy)

前言

本文使用逻辑回归对mnist手写数字进行识别,可以体现一下机器学习基本流程:获取数据;数据探索;特征工程(数据预处理);模型训练(调参);模型评估。

流程

导包(用的过程中发现需要哪个再导入哪个)

from sklearn.model_selection import train_test_split
from sklearn import preprocessing
from sklearn.metrics import accuracy_score
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
import matplotlib.pyplot as plt
import random

加载数据

digits = load_digits()
digits

在这里插入图片描述

探索数据

#先看看数据的维度
data=digits.data
images=digits.images
print('data:',data.shape,type(data))
print('images:',images.shape,type(images))
print('target:',digits.target.shape,type(digits.target))

data: (1797, 64) <class ‘numpy.ndarray’>
images: (1797, 8, 8) <class ‘numpy.ndarray’>
target: (1797,) <class ‘numpy.ndarray’>

#data和images实际上数据是一样的 但是维度不同data中的64x1变成了images里的8x8 可以找个例子看看
print('data:\n',data[0],data[0].shape)
print('images\n',images[0],images[0].shape)
#images[0]是一个二维数组 可以将其用plt.imshow()方法画出来
plt.imshow(images[0])#显示出来的图形 应该跟标签是对应的吧
print('图片对应的target数字:',digits.target[0])

在这里插入图片描述

# 随机找其中的几副图像 然后显示出来看看
plt.figure(figsize=(15,2.5))
i=1
for e in [random.randint(1,data.shape[0]) for i in range(4)]:#在(1,1797)中间随机的找4个数 然后将图像显示出来 对应的数字也显示
    ax=plt.subplot(140+i)#子图141 142 143 144  
    plt.title('index:'+str(e)+'  number:'+str(digits.target[e]))
    plt.imshow(digits.images[e])
    i+=1
plt.show() 

在这里插入图片描述

划分数据集

# 分割数据,将25%的数据作为测试集,其余作为训练集
# 要训练的特征的数据是data  目标是target  只不过感觉这里的data维度有点高1794x64
train_x, test_x, train_y, test_y = train_test_split(data, digits.target, test_size=0.25, random_state=33)

特征工程:标准化数据

# 采用Z-Score规范化
ss = preprocessing.StandardScaler()#实例化一个模型 
train_ss_x = ss.fit_transform(train_x)#训练集数据需要fit_transform
test_ss_x = ss.transform(test_x)#测试集的数据只需要transform就行了

模型创建与训练

lr = LogisticRegression()# 创建LR分类器
lr.fit(train_ss_x, train_y)#模型训练

LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, l1_ratio=None, max_iter=100,
multi_class=‘auto’, n_jobs=None, penalty=‘l2’,
random_state=None, solver=‘lbfgs’, tol=0.0001, verbose=0,
warm_start=False)

模型评估

predict_y=lr.predict(test_ss_x)
print('LR准确率: %0.4lf' % accuracy_score(predict_y, test_y))

LR准确率: 0.9644

总结

(如果您发现我写的有错误,欢迎在评论区批评指正)。

猜你喜欢

转载自blog.csdn.net/qq_27328197/article/details/113981335
今日推荐