Превращение многоклассового классификатора в иерархический многоклассовый классификатор

#python #machine-learning #scikit-learn #multiclass-classification

#python #машинное обучение #scikit-learn #многоклассовая классификация

Вопрос:

Я использую набор данных электронной коммерции для прогнозирования категорий товаров. Я использую описание продукта и код поставщика в качестве функций и предсказываю категорию продукта.

 from sklearn import preprocessing
from sklearn.feature_extraction.text import CountVectorizer
from sklearn import ensemble

df['joined_features'] = df['description'].astype(str)   ' '   df['supplier'].astype(str) 

# split the dataset into training and validation datasets 
train_x, valid_x, train_y, valid_y = model_selection.train_test_split(df['joined_features'], df['category'])

# encode target variable 
encoder = preprocessing.LabelEncoder()
train_y = encoder.fit_transform(train_y)
valid_y = encoder.fit_transform(valid_y)

# count vectorizer object 
count_vect = CountVectorizer(analyzer='word')
count_vect.fit(df['joined_features'])

# transform training and validation data
xtrain_count =  count_vect.transform(train_x)
xvalid_count =  count_vect.transform(valid_x)

classifier = ensemble.RandomForestClassifier()
classifier.fit(xtrain_count, train_y)
predictions = classifier.predict(feature_vector_valid)
  

Я получаю точность ~ 90% с этим прогнозом.
Теперь я хочу предсказать больше категорий. Эти категории являются иерархическими. Категория, которую я предсказал, была основной. Я хочу предсказать еще пару.

В качестве примера я предсказал одежду. Теперь я хочу предсказать: Одежда -> Обувь

Я попытался объединить обе категории: df['category1'] df['category2'] и предсказать их как одну, но я получаю точность около 2%, что действительно мало.

Каков правильный способ создания классификатора иерархическим способом?

Редактировать: я скомпилировал некоторые поддельные данные для лучшего понимания:

пример

Из первой строки: категория 1 соответствует Samsung, категория 3 — электронике и категория 7 — телевизорам.

Комментарии:

1. Сколько уникальных значений в category1 amp; category2 ? Есть ли какой-либо in category2 с 2 родителями (т.Е. DAG vs Tree)? Насколько сбалансирован размер выборки классов?

2. @ShihabShahriarKhan размер выборки несбалансирован. В одной категории много продуктов, но не так много в других. Для каждой подкатегории есть только один родительский элемент. Для каждой категории существует около 200 уникальных значений.

3. В любом случае, вы можете опубликовать некоторые примеры данных, чтобы я мог предложить вам подход?

4. Извините, я все еще не понял. Пример вашего набора данных (или поддельного набора данных, похожего на него) сделает его более понятным, чтобы вы могли получить необходимую помощь. Я бы предложил создать несколько строк в Ms Excel (или аналогичных), сделать снимок и опубликовать его здесь.

5. @Snow мы изо всех сил пытаемся понять данные и то, как классы связаны друг с другом. Без этого мы не сможем создать для вас решение.

Ответ №1:

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

Другая идея заключается в том, что вы обучаете модель для category2 только для category1== Одежда. В идеале у вас должны быть другие многоклассовые модели, которые будут вызываться условно в зависимости от того, каким было предсказание из category1. Очевидно, что это увеличивает объем работы, которую вам нужно будет выполнить, в зависимости от того, сколько существует category1.

Комментарии:

1. Ваш первый абзац — это то, что я тоже думал сделать. Но, возможно, уже есть определенный способ сделать это, например, графики принятия решений или около того.