Как использовать SVM, когда метка вывода представляет собой 3D-массив? - PullRequest
1 голос
/ 01 апреля 2019

Вопрос простой, у меня есть 3D-изображение, и я хочу сегментировать его с помощью SVM. Таким образом, я преобразовал входные и выходные изображения в трехмерный массив, и теперь я хочу использовать SVM. Но, похоже, clf.fit() не поддерживает многомерную метку. Так, как я могу обучить мою модель, где метка - это многомерный массив?

Простой, например ::1004

from sklearn import svm
x=[[0,0],[1,1]]
y=[[0,0],[1,1]]
clf=svm.SVC(gamma='scale')
clf.fit(x,y)

Ошибка:

Traceback (most recent call last):
  File "basic.py", line 5, in <module>
    clf.fit(x,y)
  File "/usr/local/lib/python3.5/dist-packages/sklearn/svm/base.py", line 149, in fit
    accept_large_sparse=False)
  File "/usr/local/lib/python3.5/dist-packages/sklearn/utils/validation.py", line 761, in check_X_y
    y = column_or_1d(y, warn=True)
  File "/usr/local/lib/python3.5/dist-packages/sklearn/utils/validation.py", line 797, in column_or_1d
    raise ValueError("bad input shape {0}".format(shape))
ValueError: bad input shape (2, 2)

1 Ответ

1 голос
/ 01 апреля 2019

Вы добавляете в разные ярлыки y-класса, и поэтому он не работает.См. Решение со встроенными комментариями ниже.

from sklearn import svm
x=[[0,0],[1,1],[7,8]]
y=[0,1, 2]                 # class labels
clf=svm.SVC()              # clf=svm.SVC(gamma='scale') > gamma is auto. no need to add this.

print (clf.fit(x,y))

q = clf.predict([[2., 2.]])  # simple example to test prediction.

print ('array : %s ' % q)


# use of multiple class labes for y

x=[[0,0],[1,1]]
y=[[0,1],[0,2]]          # the value 2 is to show the difference in printed output.

# add here your `for item in x:` if both arrays are 3D. `for item in y:` needs
# indentation if you do.

for item in y:           # iters through the labeling list.
    print (item)
    clf=svm.SVC()

    print (clf.fit(x,item))

    q = clf.predict([[2., 2.]])

    print ('array : %s ' % q)

Печатный результат:

SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False)
array : [1] 
[0, 1]
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False)
array : [1] 
[0, 2]
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
  decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',
  max_iter=-1, probability=False, random_state=None, shrinking=True,
  tol=0.001, verbose=False)
array : [2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...