Как узнать, является ли набор данных изображения линейно разделимым или нет? - PullRequest
0 голосов
/ 07 июня 2019

В следующем коде, когда я передаю kernel='linear', точность перекрестной проверки составляет около 90%, но когда я передаю kernel='rbf', точность перекрестной проверки составляет около 40%.Разве ядро ​​rbf не работает и для линейной классификации?
Проблема классификации заключается в классификации букв (AZ) ieno.классов = 26.Данные каждого изображения (всего: 340) представлены в оттенках серого и имеют размер: 20 * 10
. Как и числовые элементы, можно легко визуализировать с помощью простого точечного графика.Есть ли лучшая идея, чем визуализация изображений с использованием методов уменьшения размерности (например, PCA)?
Как узнать, является ли набор данных изображения линейно разделимым или нет?

from sklearn.svm import SVC

np.random.seed(42)
shuffle_index = np.random.permutation(340)
shuffled_X, shuffled_y = X_train[shuffle_index], y_train[shuffle_index]

model = SVC(kernel='linear', probability=True)
model.fit(shuffled_X, shuffled_y)

print(cross_val_score(model, shuffled_X, shuffled_y, cv=2))

1 Ответ

0 голосов
/ 07 июня 2019

Краткий ответ: Вы можете быть уверены, что набор данных изображения линейно отделим (если он достаточно мал и «естественен»), но разделение бесполезно, поскольку оно не распространяется на набор для проверки и тестирования.

Разница в производительности между линейным ядром и ядром rbf может быть связана с сильным переоснащением в случае ядра rbf.Одним из решений является, если возможно, получить больше данных.Очевидно, что это не всегда возможно, поэтому в противном случае я бы придерживался линейного классификатора.В конце концов, необходимо использовать перекрестную проверку, чтобы выбрать, какая модель лучше всего работает.

Честно говоря, я поражен тем, что вы можете получить точность 90% с такими маленькими данными с 26 классами!

...