1 .数据采集和标记
实现一个程序之前,首先要采集数据。采集的数据要尽量多且不同才有代表性,然后对数据进行相应的标记。
2 .特征选择
使用图片的每个像素点作为一个特征。
sc
kit
am
使用
Numpy
array
对象来表示数据
,所有的图片
数据保存在digits.images里。
我们在进行机器学习时,需要
把数据保存为
样本个数
特征个数
格式的
array
对象。
3. 数据清洗
把采集到的,不适合用来做机器学习训练的数据进行预处理,从而转换为适合机器学习的数据。
4 .模型选择
使用支持
来作为手写识别算法的模型。
5 .模型训练
在开始训练我们的模型之前,需要先把数据集分成训练数据集和测试数据集。接着,使用训练数据集 Xtra in Ytrain 来训练模型。
6. 模型测试
用训练出
来的模型
预测测试
数据集,然后把预测结果
Ypred
真正的结果
test
较,看有多
少个是正
确的,这样就能评估出模型的准确度了。
7. 模型保存与加载
当我 对模型的准确度感到满意后,就可以用代码把模型保存下来。
8 .实例
1.数据采集和标记
from sklearn import datasets
digits=datasets.load_digits()
images_and_labels= list(zip(digits.images, digits.target))
plt . figure (figsize=(8 , 6 ), dpi= 200
for index , (image, label) in enumerate(images and labels[ : 8]) :
plt . subplot(2 , 4 , index+ 1)
plt . axis (' off ')
plt.imshow(image, cmap=plt.cm.gray_r, interpolation= ’ neares t ’)
plt . title ( ' Digit:%i'% label , fontsize=20)
2 .特征选择
print (” shape of raw image data : {0 } ” . format(digits . images . shape))
print (”shape of data: {0 } ” . format(digits . data . shape))
输出:
shape of raw image data: (1797 , 8 , 8)
shape of data: (1797 , 64)
3 .模型训练
from sklearn.cross_validation import train_test_split
Xtrain , Xtest , Ytrain, Ytest =train test split(digits data,
digits.target , c:est size=0.20, random state=2) ;
from sklearn import s vm
elf= svm.SVC(gamma=0 . 001 , C=lOO .)
clf fit(Xtra , Ytrain);
4. 模型测试
fig,axes= plt . subplots(4 , 4 , gs ze={8, 8 ) )
fig . subplots ad] ust(hspace=O . l , wspace=O.l)
for i , ax in enumerate(axes.flat) :
ax . imshow (Xtest[i) . reshape(8 , 8) ,cmap=plt.cm.gray_r,
interpolat on =’nearest ’)
ax . text (0 . 05 , 0 . 05 , str(Ypred[i]) , fontsize=32,
transf orm=ax . transAxes,
color= ' green ' if Ypred [i]== Ytest [i] else ’ red ’ )
ax.text (0.8 , 0.05 , str(Ytest[i]) , fontsize=32 ,
trasform=a x . transAxes,
color= ’ black ’)
ax . set xticks ( [] )
ax . set yticks ( [] )
5. 模型保存与加载
#保存模型参数
from sklearn . externals import joblib
jobl ib.dump (clf,’digits svm.pkl );
#倒入模型参数,直接进行预测
elf = joblib.load (’ digits svm .pkl ’)
Ypred = clf.predict (Xtest);
clf.score(Ytest , Ypred)