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

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

一、分类-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)
然后我就暂时不想写了


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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值