Объединение наборов функций, извлеченных из нескольких моделей

Я извлек функции из большого набора обучающих и тестовых изображений с помощью Sklearn и Caffe. Для извлечения признаков я использовал 3 различных предварительно обученных свертки из Caffe Model Zoo.

Используя любой из трех наборов функций, я могу обучить SVM, точность которого составляет около 80% по тестовым данным. Но как лучше всего использовать всю мощь всех трех наборов функций?

Я попытался просто усреднить результаты трех отдельных SVM вместе (усредняя вероятностные прогнозы для каждой метки), но это не дало никаких улучшений по сравнению с отдельными моделями.

Поможет ли объединить наборы функций в один большой набор и использовать его для обучения SVM (или другого)?

Обратите внимание, что набор данных является многоклассовым и многозначным. Спасибо.


person Chris Parry    schedule 05.04.2016    source источник


Ответы (2)


Это не лучший способ комбинировать функции. В машинном обучении мы используем ансамблевые методы. Ансамблевые техники: бэггинг, бустинг, стекинг и иерархия. По моему опыту, мне нравится работать как с бустом, так и с накоплением. Повышение - это жадная стратегия обучения, которая постоянно меняет распределение данных, а также используемую функцию для обучения каждого базового учащегося, чтобы будущий базовый учащийся сосредоточился на сложных выборках. Прочтите о классификаторе Adaboost Виолы Джонса. Если у вас серьезная проблема с дисбалансом данных, прочтите об алгоритме SMOTEBoost.

person Bashar Haddad    schedule 05.04.2016
comment
Спасибо. Можно ли использовать ансамблевые методы с данными с несколькими метками в sklearn? - person Chris Parry; 06.04.2016
comment
Да, он может просто искать, чтобы найти лучший метод, который вам подходит. Сама мульти-лейбл все еще находится в стадии исследования. Извините, я не знаю об этом пакете - person Bashar Haddad; 06.04.2016

Я пробовал следующее решение, но при использовании только функций TFIDF + BOW он дает Точность: 0,899029126214, когда я добавил к ним лексические функции, Точность: 0,7747572815533981 Я использовал featurunion для объединения той же матрицы функций (TFIDF + лук) затем я использовал h.stack, чтобы сложить featureunion.vector + лексический вектор, код выглядит следующим образом:

# average number of words per sentence

    fvs_lexical[e, 0] = words_per_sentence.mean()
    # sentence length variation
    fvs_lexical[e, 1] = words_per_sentence.std()
    # Lexical diversity
    fvs_lexical[e, 2] = len(vocab) / float(len(words))
# apply whitening to decorrelate the features
fvs_lexical = whiten(fvs_lexical)
#bag of wrods features
bow_vectorizer = CountVectorizer(max_df=0.90, min_df=2, max_features=1000, stop_words='english') 
#tfidf 
tfidf_vectorizer = TfidfVectorizer(max_df=0.90, min_df=2, max_features=1000, stop_words='english') 
#vectorizer and fitting for the unified features 
vectorizer = FeatureUnion([  ("baw", bow_vectorizer),("tfidf", tfidf_vectorizer)
fvs_lexical_vector = CountVectorizer(fvs_lexical)
x1 =vectorizer.fit_transform (train['text'].values.astype('U'))
x2 =fvs_lexical_vector.fit_transform (train['text'].values.astype('U'))
x= scipy.sparse.hstack((x2,x3),format='csr')
y = np.asarray(train['label'].values.astype('U')) 

Затем я запустил логистическую регрессию

person scientific researcher    schedule 05.06.2019