#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
? Есть ли какой-либо incategory2
с 2 родителями (т.Е. DAG vs Tree)? Насколько сбалансирован размер выборки классов?2. @ShihabShahriarKhan размер выборки несбалансирован. В одной категории много продуктов, но не так много в других. Для каждой подкатегории есть только один родительский элемент. Для каждой категории существует около 200 уникальных значений.
3. В любом случае, вы можете опубликовать некоторые примеры данных, чтобы я мог предложить вам подход?
4. Извините, я все еще не понял. Пример вашего набора данных (или поддельного набора данных, похожего на него) сделает его более понятным, чтобы вы могли получить необходимую помощь. Я бы предложил создать несколько строк в Ms Excel (или аналогичных), сделать снимок и опубликовать его здесь.
5. @Snow мы изо всех сил пытаемся понять данные и то, как классы связаны друг с другом. Без этого мы не сможем создать для вас решение.
Ответ №1:
Одна из идей может заключаться в том, чтобы построить модель, используя все ваши категории 2-го уровня, но вводить вероятности прогнозирования для category1 в модель в качестве входной функции.
Другая идея заключается в том, что вы обучаете модель для category2 только для category1== Одежда. В идеале у вас должны быть другие многоклассовые модели, которые будут вызываться условно в зависимости от того, каким было предсказание из category1. Очевидно, что это увеличивает объем работы, которую вам нужно будет выполнить, в зависимости от того, сколько существует category1.
Комментарии:
1. Ваш первый абзац — это то, что я тоже думал сделать. Но, возможно, уже есть определенный способ сделать это, например, графики принятия решений или около того.