Как подогнать перцептрон к scikit-learn с обрезанным набором данных svhn? - PullRequest
3 голосов
/ 09 мая 2020

Мне нужно классифицировать набор данных svhn с помощью Perceptron в scikit-learn libray в python, но я не понимаю, почему оценка точности очень низкая (21%);
набор данных - это набор данных svhn формат обрезанного изображения, и я должен передать изображение в оттенках серого. Проблема в том, что у меня точность 21%, а это слишком мало.
это код, который я использую:

train = sio.loadmat("train_32x32.mat")
test = sio.loadmat("test_32x32.mat")
data = train["X"]
data = np.transpose(data, [3, 0, 1, 2])
data = np.mean(data, axis=3)
X_train = np.zeros(shape=(73257, 1024))
label = train['y'].ravel()
for i in range(73257):
    X_train[i] = data[i].flatten()
clf = Perceptron()
clf.fit(X_train, label)
print(clf.score(X_train, label))
predict = clf.predict(X_train)
print(accuracy_score(label, predict))

1 Ответ

1 голос
/ 09 мая 2020

Изображения из набора данных представляют собой несколько (32,32,3) матриц, в то время как Perceptron принимает кучу массивов.

Если форма данных - (n_images, 32,32,3), используйте:

import numpy as np

data = np.mean(data, axis=3)

, чтобы получить массив изображений формы в градациях серого (n_images, 32,32) , затем:

for i in range(n_images):
    X_train[i] = data[i].flatten()

, чтобы получить матрицу размером (n_images, 1024).

Вы также хотите иметь метки в n_images-size вектор.

Затем вы устанавливаете перцептрон:

clf = Perceptron()
clf.fit(X_train, y)
...