2016-03-20 21 views
1

sklearnを使用して自分自身の画像にsvmを適用しています。画像はデータフレームに入れられます。 フィット関数に2Dリストを持つnumpy配列を渡します。これらの2Dリストはイメージを表し、関数に渡す2番目の入力はターゲットのリストです(ターゲットは数字です)。 私はいつもこのエラー "ValueError:シーケンスで配列要素を設定する"を取得します。sklearn SVM fit() "ValueError:シーケンスで配列要素を設定する"

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()) 

エラー:「trainingImages.image.values」は、すべてのそれの配列の要素数が同じではありませんので、

--------------------------------------------------------------------------- 
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. 
+0

を助けるかもしれないコード/ワークフローの一部です.values'? 'fit'関数に渡されるX値は、形状(n_samples、n_features)でなければなりません。 (n_samples、width、height)をお持ちの場合は、 'X.reshape(-1、width * height)'を試してください。 – dukebody

答えて

1

それはおそらくです。 stackoverflowの中で、ここで同様の質問を確認してください:

ValueError: setting an array element with a sequence. while using SVM in scikit-learn

+0

お返事ありがとうございます。私はすべての要素が同じサイズであることを確認しましたが、私はまだ同じエラーが発生しています。 –

+0

trainingImages.image.valuesとtrainingTargets.values.tolist()のプリントを投稿できますか? (同様に形状) – armatita

1

あなたは寸法が正しいことを確認している場合は、以下の `trainingImages.imageの形状は何

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()) 
関連する問題