2016-01-31 2 views
2

Я делаю программу подготовки SVM (Support Vector Machine) классификатору питона, используя код ниже: `SVM() Классификатор обучение питона с помощью cl.fit()

print ("Fetching saved features and corresponding labels from disk") 
features, labels = load_features_labels(1) 
print("Features and labels successfully loaded") 
print(np.array(labels)) 
print(len(np.array(features))) 
print(len(np.array(labels))) 
clf = LinearSVC() 
print("Fitting classifier") 
clf.fit(np.array(features), np.array(labels)) 
print("Classifier fitting completed") 
print("Persisting classifier model") 
pickle.dump(clf, open("clf.p", "wb")) 
print("Model persistence completed") 

, но я получаю этот вывод:

Fetching saved features and corresponding labels from disk 
Features and labels successfully loaded 
[1 1 1 ..., 0 0 0] 
1722 
1722 
Fitting classifier 
Traceback (most recent call last): 
    File "train.py", line 20, in <module> 
    clf.fit(np.array(features), np.array(labels)) 
    File "/home/ws2/anaconda2/lib/python2.7/site-packages/sklearn/svm/classes.py", line 205, in fit 
    dtype=np.float64, order="C") 
    File "/home/ws2/anaconda2/lib/python2.7/site-packages/sklearn/utils/validation.py", line 510, in check_X_y 
    ensure_min_features, warn_on_dtype, estimator) 
    File "/home/ws2/anaconda2/lib/python2.7/site-packages/sklearn/utils/validation.py", line 415, in check_array 
    context)) 
ValueError: Found array with 0 feature(s) (shape=(1722, 0)) while a minimum of 1 is required. 

Как можно видеть на выходе, что общее число функций и меток равно т.е. 1722. Почему его показывает эту ошибку:

ValueError: Found array with 0 feature(s) (shape=(1722, 0)) while a minimum of 1 is required. 

ответ

1

Похоже, что ваш массив функций неверен, он должен иметь форму, похожую на это np.array([[1,2,3],[2,2,2],[1,1,1]]), больше похожую на массив массивов. Я подозреваю, что у вас может быть что-то вроде этого np.array([1,2,3,2,2,2,1,1,1])?

В основном метод fit ожидает, что массив n_samples и n_features, из документации "подходит (X, Y) X: {массив типа, разреженная матрица}, форма = [n_samples, n_features]". Ваше сообщение об ошибке сообщает вам, что никаких функций не было предоставлено, и поэтому я подозреваю, что вместо массива [n_samples, n_features] в качестве параметра X вы просто кормите массив.

+0

Вы можете распечатать 'features.shape', чтобы подтвердить мою гипотезу или, может быть, распечатать функции, как вы это делали с ярлыками, и показать нам, как эта переменная выглядит как –

+0

. Я решил проблему, я в основном применяю HOG для cell_per_block = (5,5) было изменено на (2,2), и это сработало, но в любом случае у меня есть 1722 картинки, на которых я тренируюсь, разве у меня не должно быть 1722 функций? это правильно ? – Mobeen

+0

В моем понимании ** особенности и образцы - две разные вещи **. Если у вас есть 1722 снимка, у вас будет 1722 сэмпла, но это не обязательно означает, что вы извлечете из него 1722 функции. –