【发布时间】:2018-02-08 10:44:22
【问题描述】:
我想建立一个简单的数字预测模型。
所以我:
- 加载到 sklearn 数据集中
- 将图形尺寸从 8*8 扩展到 32*32
- 使用 sklearn 数字教授 SVM
- 预测新图像。
--> 对于大多数测试图像,模型返回 8 或 1。我的代码有错误吗?
图片如下:
我使用的代码是:
def predictimage(file):
import matplotlib.pyplot as plt
from skimage import transform
from PIL import Image
import pandas as pd
import numpy as np
from sklearn import svm
from sklearn import datasets
import PIL.ImageOps
#Load in the query instance
img= Image.open(file)
img=img.convert("L")
img=PIL.ImageOps.invert(img)
img=img.resize((32,32),Image.ANTIALIAS)
imgplot=plt.imshow(img)
query=np.array(img).flatten()
query=(query/16).round()
#Plot query digit
plt.imshow(query.reshape((32,32)))
#Load in the training dataset
digits=datasets.load_digits()
features=digits.data
targets=digits.target
#Expand 8*8 image to a 32*32 image (64 to 1024)
newfeatures=[transform.resize(features[i].reshape(8,8),(32,32))for i in range(len(features))]
newfeatures=np.array(newfeatures).reshape((1797,1024)).round()
#Plot expanded image with 32*32 pixels
for l in range(9):
ax[1+l].imshow(newfeatures[100+l].reshape((32,32)).round())
#Instantiate, Train and predict
clf=svm.SVC(gamma=0.001,C=100)
clf.fit(newfeatures,targets)
prediction=clf.predict(query)
plt.show()
return prediction
predictimage(r"C:\...\digit.jpg")
数组([8])
【问题讨论】:
-
您可能想查看本教程martin-thoma.com/svm-with-sklearn,该教程讨论了如何在 MNIST 数据集上使用 svm...顺便问一下,您如何选择 C 和 gamma?你优化了吗?
-
我根据图像处理的 scikit 教程选择了这些。唯一的新事物是调整图像大小以及新数字(这自然不属于 scikit Digits 数据集)
标签: python pandas scikit-learn image-recognition