我想實現一個學習算法來預測圖像是否有目標值1
或0
。首先,我的目標值設定爲如此...scikit擬合數據錯誤
real = [1] * len(images)
fake = [0] * len(fake_images)
total_target = real + fake
total_target = numpy.array(total_target)
>>> [1 1 1 ... 0 0 0 0]
接下來,我將圖像轉換列表爲numpy
陣列numpy
陣列。所以我每個圖像存儲爲numpy
陣列...
training_set = []
for image in total_images:
im = image.convert("L")
dataset = numpy.asarray(im)
training_set.append(dataset)
training_set = numpy.array(training_set)
所以training_set
保存圖像。 training_set
的順序對應於total_target
的順序,因此training_set
中的第一個圖像對應於total_target
中的第一個值,在上例中它將爲1
。
接下來,我拉平訓練集...
n_samples = len(training_set)
data = training_set.reshape((n_samples, -1))
現在我將它傳遞到下面的...
classifier = svm.SVC(gamma=0.001)
classifier.fit(data[:n_samples-1], total_target[:n_samples-1])
我不包括最後的圖像和其相應的價值,因爲這是我想要預測的值...
expected = total_target[-1]
predicted = classifier.predict(data[-1])
當我運行所有這些,我得到以下錯誤。 ..
DeprecationWarning:傳遞1d數組作爲數據在0.17中被棄用,並且在0.19中將會引起ValueError。如果數據具有單個特徵,則使用X.reshape(-1,1)重新整形數據,如果數據包含單個特徵,則使用X.reshape(1,-1)重整數據。 DeprecationWarning)
OK,所以由它看起來像我的total_target
錯誤是在錯誤的格式,所以我添加下面...
total_target = numpy.array(total_target).reshape(-1, 1)
我運行它,現在我得到以下錯誤
DataConversionWarning:在預期1d數組時,傳遞了列向量y。請將y的形狀更改爲(n_samples),例如使用ravel()。 y_ = column_or_1d(y,warn = True)
C:\ Users \ Eric \ Anaconda2 \ lib \ site-packages \ sklearn \ utils \ validation.py:386:DeprecationWarning:作爲數據傳遞1d數組在0.17並在0.19中提示ValueError。如果數據具有單個特徵,則使用X.reshape(-1,1)重新整形數據,如果數據包含單個特徵,則使用X.reshape(1,-1)重整數據。 DeprecationWarning)
我嘗試使用上total_target
ravel()
但它只是把我帶回到錯誤之前。我認爲我的格式是錯誤的我對numpy
陣列很新。
'OK,所以由它看起來像我的total_target是格式錯誤,'錯誤 - 不,scikit-學習抱怨'data [-1]'是一個平面向量而不是二維數組。 'total_target'應該是一個平面向量,它不需要改變它。 – cel