Sono un neo novellino in questo settore, quindi gradirei il vostro aiuto. Sto giocando con il set di dati di mnist. Ho preso il codice da http://g.sweyla.com/blog/2012/mnist-numpy/ ma ho cambiato "immagini" per essere bidimensionale in modo che ogni immagine fosse un vettore di funzionalità. Poi ho eseguito PCA sui dati e poi SVM e controllato il punteggio. Tutto sembra funzionare bene, ma sto ricevendo il seguente avviso e non sono sicuro del perché.Perché ricevo un avviso di conversione dati?
"DataConversionWarning: A column-vector y was passed when a 1d array was expected.\
Please change the shape of y to (n_samples,), for example using ravel()."
Ho provato diverse cose ma non riesco a liberarmi di questo avviso. Eventuali suggerimenti? Ecco il codice completo (ignorare le rientranze mancanti, sembra hanno ottenuto un po 'incasinato copiare il codice qui):
import os, struct
from array import array as pyarray
from numpy import append, array, int8, uint8, zeros, arange
from sklearn import svm, decomposition
#from pylab import *
#from matplotlib import pyplot as plt
def load_mnist(dataset="training", digits=arange(10), path="."):
"""
Loads MNIST files into 3D numpy arrays
Adapted from: http://abel.ee.ucla.edu/cvxopt/_downloads/mnist.py
"""
if dataset == "training":
fname_img = os.path.join(path, 'train-images.idx3-ubyte')
fname_lbl = os.path.join(path, 'train-labels.idx1-ubyte')
elif dataset == "testing":
fname_img = os.path.join(path, 't10k-images.idx3-ubyte')
fname_lbl = os.path.join(path, 't10k-labels.idx1-ubyte')
else:
raise ValueError("dataset must be 'testing' or 'training'")
flbl = open(fname_lbl, 'rb')
magic_nr, size = struct.unpack(">II", flbl.read(8))
lbl = pyarray("b", flbl.read())
flbl.close()
fimg = open(fname_img, 'rb')
magic_nr, size, rows, cols = struct.unpack(">IIII", fimg.read(16))
img = pyarray("B", fimg.read())
fimg.close()
ind = [ k for k in range(size) if lbl[k] in digits ]
N = len(ind)
images = zeros((N, rows*cols), dtype=uint8)
labels = zeros((N, 1), dtype=int8)
for i in range(len(ind)):
images[i] = array(img[ ind[i]*rows*cols : (ind[i]+1)*rows*cols ])
labels[i] = lbl[ind[i]]
return images, labels
if __name__ == "__main__":
images, labels = load_mnist('training', arange(10),"path...")
pca = decomposition.PCA()
pca.fit(images)
pca.n_components = 200
images_reduced = pca.fit_transform(images)
lin_classifier = svm.LinearSVC()
lin_classifier.fit(images_reduced, labels)
images2, labels2 = load_mnist('testing', arange(10),"path...")
images2_reduced = pca.transform(images2)
score = lin_classifier.score(images2_reduced,labels2)
print score
Grazie per l'aiuto!
Grazie! Per qualche ragione ero sicuro che il problema fosse con la matrice "images". Non ci ho nemmeno pensato. Silly me. Comunque, niente più avvertimenti. Grazie ancora :) – shmibloo