В этом ядре я собираюсь продемонстрировать, как я могу использовать имя игрока с Tensorflow для прогнозирования исторического результата чемпионата мира с точностью 80%. Позже я попытался предсказать результат чемпионата мира по футболу 2018 года и, кажется, есть некоторые интересные выводы.

Этап

  1. Прием данных: Прежде всего, я получил 3 кадра данных из заданного набора данных и вручную собрал данные о чемпионате мира по футболу 2018 года с веб-сайта.
  2. Предварительная обработка: предварительная обработка необходимой функции для создания входных данных для встраивания символов.
  3. Преобразование: преобразование обработанных данных для ввода модели.
  4. Построение модели: построить модель встраивания персонажей
  5. Оценка: Попробуйте предсказать результат ЧМ-2018.

Разработка функций

Почему имена игроков и имя тренера выбираются для функции? Это потому, что мы обнаружили, что эти имена могут предоставить ключевой сигнал (из результата набора тестов), чтобы мы могли сделать прогноз.

Маркировка

Чтобы построить тренировочные данные, обозначьте победителя как 1, первое место, занявшее второе место, как 2, второе место как 3 и четвертое место как 4. Остальная часть команды равна 0. Из данных у нас есть около 20 рекордов Кубка мира.

Распределение данных, 20 записей для меток 1, 2, 3 и 4 соответственно и около 300 отрицательных данных.

Построение модели

Мы используем встраивание символов для моделирования модели прогнозирования. Если вы с ним не знакомы, то можете ознакомиться с этой статьей. Используя определенную функцию, мы можем просто построить модель в несколько строк.

char_cnn = CharCNN(max_len_of_sentence=256, max_num_of_setnence=1)
char_cnn.preporcess(labels=training_df['label'].unique())

И затем обработка необработанных данных

x_train, y_train = char_cnn.process(
    df=train_df, x_col='name', y_col='label')
x_test, y_test = char_cnn.process(
    df=test_df, x_col='name', y_col='label')

Попробуйте предсказать результат

char_cnn.build_model()
char_cnn.train(x_train, y_train, x_test, y_test, batch_size=32, epochs=10)

Вывод

Train on 341 samples, validate on 86 samples
Epoch 1/10
341/341 [==============================] - 13s 40ms/step - loss: 0.9741 - acc: 0.7801 - val_loss: 1.0188 - val_acc: 0.7674
Epoch 2/10
341/341 [==============================] - 10s 30ms/step - loss: 0.7981 - acc: 0.8240 - val_loss: 1.0271 - val_acc: 0.7674
Epoch 3/10
341/341 [==============================] - 11s 31ms/step - loss: 0.7864 - acc: 0.8240 - val_loss: 1.0512 - val_acc: 0.7674
Epoch 4/10
341/341 [==============================] - 10s 30ms/step - loss: 0.7660 - acc: 0.8240 - val_loss: 0.9753 - val_acc: 0.7674
Epoch 5/10
341/341 [==============================] - 10s 30ms/step - loss: 0.7506 - acc: 0.8240 - val_loss: 1.0135 - val_acc: 0.7674
Epoch 6/10
341/341 [==============================] - 10s 30ms/step - loss: 0.7426 - acc: 0.8240 - val_loss: 1.0135 - val_acc: 0.7674
Epoch 7/10
341/341 [==============================] - 10s 30ms/step - loss: 0.7824 - acc: 0.8240 - val_loss: 1.0176 - val_acc: 0.7674
Epoch 8/10
341/341 [==============================] - 10s 30ms/step - loss: 0.7763 - acc: 0.8240 - val_loss: 1.0137 - val_acc: 0.7674
Epoch 9/10
341/341 [==============================] - 10s 30ms/step - loss: 0.7805 - acc: 0.8240 - val_loss: 0.9793 - val_acc: 0.7674
Epoch 10/10
341/341 [==============================] - 10s 31ms/step - loss: 0.7624 - acc: 0.8240 - val_loss: 1.0138 - val_acc: 0.7674

Оценка

Подходим к концу этой статьи, точность кажется очень хорошей, она составляет около 80%. Давайте посмотрим результат прогноза на ЧМ-2018.

В нашей кодировке 4 означает, что команда проиграла. Подойдя к этому моменту, вы можете подумать, что есть что-то не так? Пожалуйста, ознакомьтесь с Заключительной частью.

Вывод

array([4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
       4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
       4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
       4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4])

Вывод

Полный исходный код можно посмотреть на странице kaggle.

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

  • Когда люди говорят о «Мы используем машинное обучение», «Прикладная глубокая нейронная сеть», вам лучше спросить о функциях и данных, а не об архитектуре модели. Конечно, архитектура модели важна, но функции и данные также важны. Пожалуйста, помните, что МУСОР ВХОДИТ, МУСОР ВНИЗ.
  • Когда люди говорят о точности 80% или даже 90%. Вы можете лучше проверить, является ли это результатом экспериментального или фактического. Многие модели переобучены на стадии эксперимента, хотя специалисты по данным считают, что они уже очень хорошо это предотвращают.
  • Для измерения лучше понимать другие показатели, а не только точность. Например, у нас также есть точность и полнота в классификации. У нас есть BELU в машинном переводе.
  • Как Data Scientist, вместо разговоров об использовании CNN, LSTM bla bla bla, тратьте больше времени на понимание вашей функции и данных
  • Если у вас недостаточно больших данных (в этом примере менее 500 записей). Не верьте, что вы можете построить потрясающую модель с нуля.

Обо мне

Я Data Scientist в Bay Area. Сосредоточение внимания на современном состоянии науки о данных, искусственном интеллекте, особенно в НЛП и связанных с платформами.

Среда: http://medium.com/@makcedward/

LinkedIn: https://www.linkedin.com/in/edwardma1026

Гитхаб: https://github.com/makcedward

Kaggle: https://www.kaggle.com/makcedward