欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【机器学习】手写数字识别学习笔记(对三篇文件进行分析记录)

程序员文章站 2024-01-22 11:15:28
...

看了许多网站,涉及的知识也非常多(毕竟是机器学习“第一题”),真正能理解并掌握,或者说记住的内容,并不多。

一、分类-MNIST(手写数字识别)

1、数据集:博客的网盘链接中50多M的.mat文件

获取数据方法:

from sklearn.datasets import fetch_mldata
from sklearn import datasets
import numpy as np

mnist = fetch_mldata('mnist-original', data_home = './datasets/') 
mnist

【机器学习】手写数字识别学习笔记(对三篇文件进行分析记录)
数据基本信息:

#数据和标签的维度信息
X, y = mnist['data'], mnist['target']
print(X.shape)
print(y.shape)
#print(X[0])
#print(y[0])

(70000, 784)
(70000,)
关键点:这里的数据点是范围是:[0,255]

2、时常绕不开的sklearn
这里稍微复习一下一些数据集的名称
sklearn的datasets使用

datasets.load_boston #波士顿房价数据集  
datasets.load_breast_cancer #乳腺癌数据集  
datasets.load_diabetes #糖尿病数据集  
datasets.load_digits #手写体数字数据集  
datasets.load_iris #鸢尾花数据集  
datasets.load_linnerud #体能训练数据集 

自带的经典小数据集练习
一个对于了解sklearn由很大帮助的博客

3、用随机梯度下降分类器SGD训练一个二分类器

这里用了Scikit-Learn的SGDClassifier类

from sklearn.linear_model import SGDClassifier

具体内容见原博客

4、对性能评估
(1)使用交叉验证测量准确性
直接使用sklearn中的库进行交叉评估。使用cross_val_score函数来评估SGDClassifier模型

from sklearn.model_selection import cross_val_score

cross_val_score(sgd_clf, X_train, y_train_5, cv = 3, scoring = "accuracy")

(2)混淆函数
这一块知识强烈建议去认真看原博客
①准确率
【机器学习】手写数字识别学习笔记(对三篇文件进行分析记录)
②召回率
【机器学习】手写数字识别学习笔记(对三篇文件进行分析记录)
③小结
总的来说,准确率低的原因就产将那些看起来像5(只是像,实际并不是5)的预测成了5;而召回率低的原因是把那些看起来不像5(实际上是5,只是可能那个5写得比较丑)预测成不是5。

高准确率,低召回率,找经理例子,在统计学上被称为犯了第一类错误,即弃真。这样做是合理的,因为即使弃真,但我们保真了。(不是很确实是不是要找的,就不要,降低假正例的出现的可能)

低准确率,高召回率,找罪犯例子,在统计学上被称为犯了第二类错误,即取伪。宁可错杀一千,不可放走一个(不是很确实是不是要找的,就,降低假反例出现的可能)

*(3)ROC曲线
真的要完全弄懂确实要花不少精力,多查查资料吧
【机器学习】手写数字识别学习笔记(对三篇文件进行分析记录)

5、多类分类
一些算法(比如随机森林分类器或者朴素贝叶斯分类器)可以直接处理多类分类问题。其他一些算法(比如SVM分类器或者线性分类器)则是严格的二分类器,然后有许多策略可以让你用二分类器去执行多类分类。
(PS:其中提到的四个名词对我来说就是这样的文章还要至少写四篇)

机器学习:逻辑回归(OvR 与 OvO)
OvR(One vs Rest),一对剩余的意思,有时候也称它为 OvA(One vs All);一般使用 OvR,更标准;
OvO(One vs One),一对一的意思;

6、误差分析、多标签分类、多输出分类
略就一个字


二、数据挖掘入门: Kaggle手写数字识别

1、数据集:Kaggle上下载的.cvs文件

获取数据和引入头文件:

import numpy as np
import pandas as pd
from time import time
import matplotlib.pyplot as plt
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn.decomposition import PCA
from sklearn.preprocessing import MinMaxScaler

train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
# 查看训练集和测试集的行列数
print(train.shape)
print(test.shape)

【机器学习】手写数字识别学习笔记(对三篇文件进行分析记录)

2、特征预处理
特征预处理是数据挖掘的必要步骤, 如果不进行特征处理, 会导致模型的拟合程度下降, 分类的精确度下降.

这里采用标准预处理, 使用MinMaxScaler将每个特征的值域规范化到0至1之间. Sklearn模块有标准预处理的函数,直接调用即可.

# 特征预处理,将特征的值域规范化
X = MinMaxScaler().fit_transform(X)
test = MinMaxScaler().fit_transform(test)

# 分开训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.1, random_state = 14)

3、主成分分析
PCA主成分数量(降维维度)选择

4、使用支持向量机预测,使用网格搜索进行调参

# 使用支持向量机预测,使用网格搜索进行调参

clf_svc = GridSearchCV(estimator=svm.SVC(), param_grid={ 'C': [1, 2, 4, 5], 'kernel': [ 'linear', 'rbf', 'sigmoid' ] }, cv=5, verbose=2 ) 
# 训练算法
clf_svc.fit(X, y)

# 预测
preds = clf_svc.predict(test)
image_id = pd.Series(range(1,len(preds)+1))
result_2 = pd.DataFrame({'ImageID': image_id,'Label':preds})
# 保存为CSV文件
result_2.to_csv('result_svc.csv',index = False)


三、极客学院:MNIST机器学习入门

1、数据集:
MNIST数据集的官网是Yann LeCun’s website
下载下来的数据集被分成两部分:60000行的训练数据集(mnist.train)和10000行的测试数据集(mnist.test)
然后我就暂时不想写了


“熟读唐诗三百首,不会作诗也会吟”,在掌握一些知识,能独立解决一些问题之前,原始积累,大量的模仿学习是必不可少的,这也就是写现在这一篇类型博客的意义!