sklearn SVM (fit) «ValueError: la configuración de un elemento de la matriz con una secuencia»

Estoy usando sklearn para aplicar svm en mi propio conjunto de imágenes. Las imágenes se colocan en un marco de datos.
Me pase para el ajuste de la función de una colección de la matriz que ha 2D listas, estos 2D listas representa imágenes y la segunda entrada, me pasa a la función es la lista de objetivos (Los objetivos son números).
Siempre me sale este error «ValueError: la configuración de un elemento de la matriz con una secuencia».

trainingImages = images.ix[images.partID <=9]
trainingTargets = images.clustNo.ix[images.partID<=9]
trainingImages.reset_index(inplace=True,drop=True)
trainingTargets.reset_index(inplace=True,drop=True)

classifier = svm.SVC(gamma=0.001)
classifier.fit(trainingImages.image.values,trainingTargets.values.tolist())

El Error:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-43-5336fbeca868> in <module>()
      8 classifier = svm.SVC(gamma=0.001)
      9 
---> 10 classifier.fit(trainingImages.image.values,trainingTargets.values.tolist())
     11 
     12 #classifier.fit(t, list(range(0,2899)))

/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/sklearn/svm/base.py in fit(self, X, y, sample_weight)
    148         self._sparse = sparse and not callable(self.kernel)
    149 
--> 150         X = check_array(X, accept_sparse='csr', dtype=np.float64, order='C')
    151         y = self._validate_targets(y)
    152 

/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    371                                       force_all_finite)
    372     else:
--> 373         array = np.array(array, dtype=dtype, order=order, copy=copy)
    374 
    375         if ensure_2d:

ValueError: setting an array element with a sequence.
¿Cuál es la forma de trainingImages.image.values? Los valores de X que pasan a la fit función debe ser de la forma (n_samples, n_features). Si usted tiene (n_samples, anchura, altura), intente X.reshape(-1, width*height).

OriginalEl autor Perihan Gad | 2016-03-20

3 Kommentare

  1. 5

    Yo tenía exactamente el mismo error, es una de dos posibilidades:

    1 – los Datos y las etiquetas no son de la misma longitud.

    2 – Para una característica específica del vector, el número de los elementos no
    igual.

    OriginalEl autor Ghanem

  2. 1

    Es probablemente porque «trainingImages.imagen.los valores» no tiene el mismo número de elementos en todas las matrices. Comprobar una pregunta similar aquí en stackoverflow:

    ValueError: la configuración de un elemento de la matriz con una secuencia. mientras que el uso de la SVM en scikit-learn

    Gracias por su respuesta. Me aseguré de que todos sus elementos tienen el mismo tamaño y sigo obteniendo el mismo error.
    Podría publicar una impresión de trainingImages.imagen.valores y trainingTargets.valores.tolist()? (así como la forma)

    OriginalEl autor armatita

  3. 1

    Si está seguro de que las dimensiones son correctas, a continuación un fragmento de código/flujo de trabajo que podría ayudar a

    import skimage.io as skio
    import matplotlib.pyplot as plt
    import numpy as np
    from sklearn import svm
    from sklearn.metrics import accuracy_score
    from sklearn.metrics import precision_score
    %matplotlib inline
    
    # Load the data
    trainingImages = skio.imread_collection('train/images/*.jpg',conserve_memory=True)
    
    # cast to numpy arrays
    trainingImages = np.asarray(trainingImages)
    
    # reshape img array to vector
    def reshape_image(img):
        return np.reshape(img,len(img)*len(img[0]))
    
    img_reshape = np.zeros((len(trainingImages),len(trainingImages[0])*len(trainingImages[0][0])))
    
    for i in range(0,len(trainingImages)):
        img_reshape[i] = reshape_image(trainingImages[i])
    
    # SVM
    clf = svm.SVC(gamma=0.01,C=10,kernel='poly')
    clf.fit(img_reshape,trainingTargets.values.tolist())

    OriginalEl autor Vivek Kalyanarangan

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea