码迷,mamicode.com
首页 > 其他好文 > 详细

阅读项目:通过机器学习识别手写数字

时间:2019-03-03 17:38:57      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:value   手写   blank   展示   准确率   dom   lan   header   tps   

地址:https://github.com/JosephPai/KaggleSolution/tree/master/DigitRec

数据集:https://www.kaggle.com/c/digit-recognizer/data

 

import pandas as pd

import matplotlib.pyplot as plt, matplotlib.image as mpimg

from sklearn.model_selection import train_test_split

from sklearn import svm

导入库,这里使用了panadas 库进行数据处理。

通过skllearn库选择分类器进行训练

 

 

labeled_images = pd.read_csv(‘C:/Users/75201/Desktop/train/input/train.csv‘)

images = labeled_images.iloc[0:5000,1:]

labels = labeled_images.iloc[0:5000,:1]

train_images,test_images,train_labels,test_labels=train_test_split(images,labels, train_size=0.8, random_state=0)

 

首先导入训练集,然后将标签与内容分开,labels保存标签,images保存内容,然后划分训练集和测试集

train_images:训练集内容

test_images:测试集内容

train_labels,:训练集标签

test_labels:测试集标签

 

 

这一步可以进行查看图片,将一维的数据展示成图片

i=8

img=train_images.iloc[i].as_matrix()

img=img.reshape((28,28))

plt.imshow(img,cmap=‘gray‘)

plt.title(train_labels.iloc[i,0])

 

可以看出图片是有灰度的

 

 

 

这一步开始训练,使用sklearn 包提供的 svm 模型来建立一个分类器 classifier,

clf = svm.SVC()

clf.fit(train_images, train_labels.values.ravel())

clf.score(test_images,test_labels)

训练结果0.10000,很不理想

 

 

 

这一步将图片转化为黑白,简化特征值,可以大幅提高准确率

test_images[test_images>0]=1

train_images[train_images>0]=1

img=train_images.iloc[i].as_matrix().reshape((28,28))

plt.imshow(img,cmap=‘binary‘)

plt.title(train_labels.iloc[i])

 

 

 

 

 再次使用相同的分类器进行训练

clf = svm.SVC()
clf.fit(train_images, train_labels.values.ravel())
clf.score(test_images,test_labels)

 训练结果0.887

 

成绩初步满意,可以开始测试,导入测试集,并将测试结果写入到test文件中

test_data=pd.read_csv(‘C:/Users/75201/Desktop/train/input/test.csv‘)

test_data[test_data>0]=1

results=clf.predict(test_data[0:5000])

df = pd.DataFrame(results)

df.index.name=‘ImageId‘

df.index+=1

df.columns=[‘Label‘]

df.to_csv(‘C:/Users/75201/Desktop/train/input/results.csv‘, header=True)

 

 

 

 

读完这个项目,我认为可以优化以下几点

  1. 增大训练样本,数据集中的数量不仅仅有5000,加大样本可以提高准确率
  2. 增加外部接口,将图片预处理为28*28像素的图片,方便进行外部测试
  3. 尝试其他分类器。
  4. 优化特征。

 

阅读项目:通过机器学习识别手写数字

标签:value   手写   blank   展示   准确率   dom   lan   header   tps   

原文地址:https://www.cnblogs.com/dayoulaoshi/p/10466461.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!