【问题标题】:Predicting numbers using sklearn digits dataset - wrong predictions使用 sklearn 数字数据集预测数字 - 错误的预测
【发布时间】:2018-02-08 10:44:22
【问题描述】:

我想建立一个简单的数字预测模型。

所以我:

  1. 加载到 sklearn 数据集中
  2. 将图形尺寸从 8*8 扩展到 32*32
  3. 使用 sklearn 数字教授 SVM
  4. 预测新图像。

--> 对于大多数测试图像,模型返回 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


【解决方案1】:

你需要缩进你的代码:

from matplotlib import 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

def predictimage(file):

    #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

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 2017-08-29
    • 2017-06-24
    • 2015-09-14
    相关资源
    最近更新 更多