Как выбрать размеры элементов - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь воспроизвести эксперимент на бумаге с использованием SVM, чтобы увеличить свои знания / знания о машинном обучении. В этой статье автор извлекает элементы и выбирает их размеры. Затем он показывает таблицу, где F представляет размер вектора признаков, а N представляет изображения лиц

enter image description here

Затем он работает с F> = 9 и N> = 15 параметров.

Теперь, что я хочу сделать, так это фактически воспользоваться функциями, которые я извлекаю, как он это делает в статье.

По сути, вот как я извлекаю функции:

def load_image_files(fullpath, dimension=(64, 64)):
    descr = "A image classification dataset"
    images = []
    flat_data = []
    target = []
    dimension=(64, 64)
    for category in CATEGORIES:
        path = os.path.join(DATADIR, category)
        for person in os.listdir(path):
            personfolder = os.path.join(path, person)
            for imgname in os.listdir(personfolder):
                class_num = CATEGORIES.index(category)
                fullpath = os.path.join(personfolder, imgname)
                img_resized = resize(skimage.io.imread(fullpath), dimension, anti_aliasing=True, mode='reflect')
                flat_data.append(img_resized.flatten())
                images.append(skimage.io.imread(fullpath))
                target.append(class_num)

    flat_data = np.array(flat_data)
    target = np.array(target)
    images = np.array(images)
    print(CATEGORIES)

    return Bunch(data=flat_data,
                     target=target,
                     target_names=category,
                     images=images,
                     DESCR=descr)

Как мне выбрать количество извлекаемых и сохраняемых функций? или как мне вручную сохранить вектор с нужным мне количеством функций? Например, вектор функций размером 9

Я пытаюсь разделить свои функции следующим образом:

X_train, X_test, y_train, y_test = train_test_split(
    image_dataset.data, image_dataset.target, test_size=0.3,random_state=109)

model = ExtraTreesClassifier(n_estimators=10)
model.fit(X_train, y_train)
print(model.feature_importances_)

Хотя мой результат:

[0. 0. 0. ... 0. 0. 0.]

для классификации SVM, я пытаюсь использовать OneVsRestClassifier

model_to_set = OneVsRestClassifier(SVC(kernel="poly"))

parameters = {
    "estimator__C": [1,2,4,8],
    "estimator__kernel": ["poly", "rbf"],
    "estimator__degree":[1, 2, 3, 4],
}

model_tunning = GridSearchCV(model_to_set, param_grid=parameters)
model_tunning

model_tunning.fit(X_train, y_train)

prediction = model_tunning.best_estimator_.predict(X_test)

Затем, как только я вызываю прогноз, я получаю:

Out[29]:
array([1, 0, 4, 2, 1, 3, 3, 0, 1, 1, 3, 4, 1, 1, 0, 3, 2, 2, 2, 0, 4, 2,
       2, 4])

1 Ответ

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

Итак, у вас есть два массива информации об изображениях (один необработанный, другой с измененным размером и сглаженным), а также список соответствующих значений классов (которые мы обычно называем метками). Однако в настоящее время есть 2 проблемы с настройкой:

1) Здесь не хватает нескольких features - они могут включать определенные c массивы из данных, связанных с извлечением признаков из морфологического / компьютерного зрения процессы ваших изображений, или они могут быть вспомогательными данными, такими как список предпочтений, поведения, покупок. По сути, все, что может действовать как массив в числовом или категориальном формате. С технической точки зрения, ваши изображения с измененным размером - это вторая функция, но я не думаю, что это значительно улучшит производительность модели.

2) target_names=category в вашей функции return сохранит последнюю итерацию категории pf в КАТЕГОРИЯХ. Я не знаю, хотите ли вы этого.


Возвращаясь к вашей таблице, N будет означать количество изображений в наборе данных, а F будет количеством соответствующих массивов функций, связанных с этим изображением. В качестве примера предположим, что у нас есть пятьдесят отдельных вин и пять характеристик (цвет, вкус, содержание алкоголя, pH, оптическая плотность). N из 5 будет пятью из этих вин, а F из 2 будет, скажем, colour, taste.

Если бы мне пришлось угадывать, какими будут ваши функции, они бы фактически были одной функцией - самими данными изображения. Глядя на вашу структуру данных, каждая метка / категория, которые у вас есть, будут иметь несколько лиц (людей), каждый из которых имеет несколько примеров изображений этого человека. Обратите внимание, что несколько человек не являются отдельными функциями - при структурировании данных отдельные лица сгруппированы в одну категорию.

Итак, что же дальше? Не зная, какую статью вы читаете, трудно предложить, что делать, но я бы go вернулся и посмотрел, не могли бы вы предоставить нам дополнительную информацию о проблеме.

...