Классификация: анализ тональности твитов - порядок шагов - PullRequest
3 голосов
/ 11 июля 2020

В настоящее время я работаю над анализом тональности твитов, и у меня есть несколько вопросов относительно правильного порядка шагов. Предположим, что данные уже были предварительно обработаны и подготовлены соответствующим образом. Итак, я бы поступил следующим образом:

  1. используйте train_test_split (соотношение 80:20), чтобы удерживать набор тестовых данных.
  2. векторизовать x_train, поскольку твиты не числовые .

На следующих этапах я хотел бы определить лучший классификатор. Предположим, они уже импортированы. Так что я бы go по:

гиперпараметризация (поиск по сетке), включая подход перекрестной проверки. На этом этапе я хотел бы определить лучшие параметры каждого классификатора. Для KNN код выглядит следующим образом:
model = KNeighborsClassifier()
n_neighbors = range(1, 10, 2)
weights = ['uniform', 'distance']
metric = ['euclidean', 'manhattan', 'minkowski']

# define grid search
grid = dict(n_neighbors=n_neighbors, weights=weights ,metric=metric)
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
grid_search = GridSearchCV(estimator=model, param_grid=grid, n_jobs=-1, cv=cv, scoring='accuracy',error_score=0)
grid_result = grid_search.fit(train_tf, y_train)

# summarize results
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
means = grid_result.cv_results_['mean_test_score']
stds = grid_result.cv_results_['std_test_score']
params = grid_result.cv_results_['params']
for mean, stdev, param in zip(means, stds, params):
    print("%f (%f) with: %r" % (mean, stdev, param))
сравнить точность (в зависимости от лучших гиперпараметров) классификаторов выбрать лучший классификатор взять набор скрытых тестовых данных (из train_test_split()) и использовать лучший классификатор на тестовые данные

Правильный ли это подход, или вы бы порекомендовали что-то изменить (например, проводить только перекрестную проверку, а не в рамках гиперпараметризации)? Имеет ли смысл тестировать данные теста в качестве последнего шага или мне следует сделать это раньше, чтобы оценить точность неизвестного набора данных?

1 Ответ

2 голосов
/ 11 июля 2020

Есть много способов сделать это, и люди имеют твердое мнение по этому поводу, и я не всегда уверен, что они полностью понимают то, что они отстаивают.

TL; DR: Ваша методология выглядит великолепно, и вы задавая разумные вопросы.

Сказав это, вот некоторые вещи, которые следует учитывать:

  1. Почему вы проводите сплит-валидацию на тренировочном тесте?
  2. Почему вы это делаете настройка гиперпараметров?
  3. Зачем вы делаете перекрестную проверку?

Да, каждый из этих методов хорош при выполнении определенных операций c; но это не обязательно означает, что все они должны быть частью одного конвейера.

Прежде всего, давайте ответим на эти вопросы:

  1. Train-Test Split полезно для проверки возможностей вывода вашего классификатора. Другими словами, мы хотим знать, насколько хорошо классификатор работает в целом (не на данных, которые мы использовали для обучения). Тестовая часть позволяет нам оценить наш классификатор без использования нашей обучающей части.

  2. Настройка гиперпараметров полезна для оценки влияния гиперпараметров на производительность классификатора . Чтобы это было значимым, мы должны сравнить две (или более) модели (с использованием разных гиперпараметров), но обученных предпочтительно с использованием одной и той же обучающей части (чтобы исключить смещение выбора). Что мы делаем, когда узнаем самые эффективные гиперпараметры? Всегда ли этот набор гиперпараметров работает оптимально? Нет. Вы увидите, что из-за стохастической c природы классификации один набор гиперпараметров может работать лучше всего в эксперименте А, тогда другой набор гиперпараметров может работать лучше в эксперименте Б. Скорее, настройка гиперпараметров хороша для обобщения того, какие гиперпараметры для использования при построении классификатора.

  3. Перекрестная проверка используется для сглаживания некоторой случайности c случайности, связанной с классификаторами зданий. Таким образом, конвейер машинного обучения может создать классификатор с точностью 94% с использованием 1 тестовой кратности и 83% точности с использованием другой тестовой кратности. Что это означает? Это может означать, что 1-кратный содержит простые образцы. Или это может означать, что классификатор по какой-то причине действительно лучше. Вы не знаете, потому что это черный ящик.

Практически , чем это полезно?

Я не вижу смысла в использовании test- поезд сплит и перекрестной проверки. Я использую перекрестную проверку и сообщаю о точности как среднее значение по n-кратной шкале. Он уже тестирует работу моего классификатора. Я не понимаю, почему поможет дальнейшее разделение ваших обучающих данных для проведения еще одного раунда проверки тренировочного теста. Используйте среднее. Сказав это, я использую лучшую из n-кратных моделей, созданных во время перекрестной проверки, в качестве моей окончательной модели. Как я уже сказал, это черный ящик, поэтому мы не можем знать , какая модель лучше, но, при прочих равных, вы также можете использовать наиболее эффективную. На самом деле это могло бы быть лучше.

Гиперпараметрическая настройка полезна, но на выполнение обширной настройки может уйти целая вечность. Я предлагаю добавить настройку гиперпараметров в ваш конвейер, но протестировать только 2 набора гиперпараметров. Итак, сохраняйте все ваши гиперпараметры постоянными, кроме 1. например, Batch size = {64, 128}. Запустите это, и вы сможете с уверенностью сказать: «О, это имело большое значение: 64 работает лучше, чем 128!» или «Ну, это была пустая трата времени. В любом случае это не имело большого значения». Если разница небольшая, игнорируйте этот гиперпараметр и попробуйте другую пару. Таким образом, вы будете медленно приближаться к оптимальному, не тратя время зря.

На практике я бы посоветовал оставить обширную настройку гиперпараметров академикам и принять более прагматичный c подход.

Но да, ваша методология и так выглядит неплохо. Думаю, ты думаешь о том, что делаешь, и это уже ставит тебя на шаг впереди остальных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...