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

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

Раз в день, в свой обычный учебный день, я задавался вопросом, как мы можем получить ближайший объект по его описанию; и с помощью контролируемого обучения. Следовательно, я использую модель машинного обучения в учебном случае.

ДАВАЙТЕ НАЧНЕМ!!!

ЭДА

Модель машинного обучения можно обучить только в том случае, если данные существуют в обучаемой форме.

data.head(2)

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

print('Shape of data:', data.shape)
print('Type of data:\n', data.dtypes)

data.info()

Заключение

Данные относительно чистые и ненулевые, и все типы данных находятся в правильном положении. Доступные обучающие данные — 45466 строк или 45466 фильмов.

Предварительная обработка данных

Этот этап предварительной обработки данных предназначен для подготовки описаний к обучаемым функциям. К счастью, в Scikit-learn уже есть автоматизированный метод извлечения слов из предложений и кодирования их в векторную форму; СчетчикВекторизатор.

# Import essential packages
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import linear_kernel
from sklearn import preprocessing
# Vectorized descriptions
## Create the vectorizer object
COUNTVEC = CountVectorizer(stop_words='english', max_features=27000)
## Seperate label and main features
x = data['overview']
y = data['label']
x_vectorized = COUNTVEC.fit_transform(x)

.get_feature_names_out() можно использовать для наблюдения за изменением функции x.

vectorizer.get_feature_names_out()

Заключение

Функция обучения x готова к процессу моделирования.

Моделирование

В рассматриваемом случае использовался RandomForestClassifier из-за его удобной реализации. Однако ансамблевую модель можно применять, если вам нужна высокая точность предсказания. Кроме того, эта модель не требует проверки точности. Основная причина заключается в том, что система рекомендаций должна основываться на оценке здравого смысла. Все читатели должны знать традиционный алгоритм измерения точности, чтобы понять эту конфигурацию.

Конфигурация соответствует алгоритму измерения точности. Формула традиционных показателей точности:

Наша модель обучена описанию, чтобы давать рекомендацию топ-N, а не получать точный прогноз. Например, если ввести "Теплое тело", вы получите 5 самых популярных жанров драматических боевиков, включая зомби. Следовательно, традиционный алгоритм измерения точности не может быть использован для оценки эффективности модели. Поэтому вместо этого можно использовать проверку здравого смысла, о которой я расскажу позже.

Далее идет рекомендуемая функция. Для модели классификации вероятности каждого класса будут рассчитываться по дереву решений. Основываясь на моей экстраполяции, наиболее значительная вероятность дает наибольшую вероятность того, что прогноз будет точным. Поэтому второй, третий или четвертый шансы могут быть закрытыми. Следовательно, если мы отсортируем вероятность предсказания по убыванию, то получим ближайшие аналогичные классы.

Наконец, для этой модели нам не нужно разделять наборы данных для тестирования и обучения.

# Import essential packages
from sklearn.ensemble import RandomForestClassifier
# Modeling
rf = RandomForestClassifier(n_estimators=200, max_depth=70)
rf.fit(x_vectorized, y)

Функция рекомендации

def rec(name:str, 
        data:pandas.DataFrame) -> None:
   # Get index
   index = get_index(name, data)
   # Use index to find its feature
   feature = x_vectorized[index]
   # Predict probabilities
   pred = rf.predict_proba(feature)
   # Sort, and return index
   rec_index = np.argsort(-pred)[0][0:10]
   # Create time references
   x = 0
   # Loop for get name of movie
   while x <= 5:
      # Start with 0
      rec_index_use = rec_index[x]
      # Get value
      rec_product = data[data['lable'] == rec_index_use].iloc[0, 1]
      
      # Pass the target, if recommended
      if rec_product == name:
         pass
      else:
         print('%s.)'%x, rec_product)
      x += 1

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

Проверка здравого смысла

rec('Toy Story', data)

Эти первая и вторая рекомендации верны. Тем не менее, остатки необходимо исправить. Эта проблема может возникнуть из-за ряда признаков, которые мы определили в процессе предварительной обработки данных. С другой стороны, модель случайного леса не может дать разумных результатов. В качестве альтернативы функция описания не может разделять и группировать класс.

Дальнейшее развитие

По результатам тестирования нам нужно сначала увеличить обученную переменную. Предположим, что производительность модели остается низкой; изменение модели должно быть выполнено. Альтернативные модели — наивное байесовское и косинусное сходство, следующая тема.

Кроме того, этот тест игнорирует семантику контекста. Я использую только вероятность появления слова в качестве вектора. Если вам нужна модель для понимания смысла описания, BERT — лучший алгоритм для извлечения этого результата.