Я родом из региона, известного своими пляжами и солнечной погодой. Но я родился с одной маленькой проблемой, они мне не нравятся! Для этого есть много причин, и за эти годы я нашел несколько пляжей, на которых я мог бы хоть немного насладиться. Итак, я рассмотрю эту проблему, чтобы проиллюстрировать, что именно Feature Vectors.
«В машинном обучении и распознавании образов характеристика - это индивидуальное измеримое свойство или характеристика наблюдаемого явления». [Bishop, 2006], а набор таких функций называется «Вектор признаков».
Следующие особенности, характеристики - это те, которые я учитываю при оценке пляжа:
- яркость песка (глаза устают при слишком ярком свете)
- толщина песчинок (может раздражать ветер)
- есть приюты (иногда бывает слишком тепло)
- многолюдно (много людей разговаривают с громкой музыкой, нет!)
- волны (с ними нельзя действительно наслаждаться водой)
- рестораны (чтобы можно было есть, пить и не гулять много)
- акварель (вид, ах вид!)
Кодирование вектора
Для каждой функции, которую я описал, мне нужно попытаться закодировать некоторые категории или значения, которые я мог бы использовать позже для принятия решений.
- яркость песка: темный, коричневатый и белый.
- толщина песчинок: мелкие, средние и крупные.
- есть приюты: приютов есть, нет.
- многолюдно: пустыня, непопулярная, популярная и суперпопулярная.
- волны: как бассейн, выше, зона для серфинга.
- В ресторанах есть ресторан, но нет.
- вода: кристально чистая, прозрачная, темноватая.
Теперь я возьму три пляжа и создам вектор для каждого.
Генипабу (Бразилия)
[белый; отлично; есть приют; популярный; выше; есть ресторан; Чисто]
Брела (Хорватия)
[белый; грубый; есть приют; не популярен; как бассейн; есть ресторан; кристально чистый]
Пляж Ипанема (Бразилия)
[коричневатый, средний, есть убежище, суперпопулярный, высокий, есть ресторан, темноватый]
Если я создам набор пляжей с их характеристиками в электронной таблице, я буду собирать данные для принятия будущих решений или просто для регистрации своего прошлого опыта.
Важно отметить, что все описанные мною объекты правильно размещены в одном и том же положении в векторе, как таблица.
Другой ключевой момент здесь в том, что категории или ценности я выбрал исключительно исходя из моих личных предпочтений. Например, я мог бы пойти на более научный подход к песчинкам, используя ISO 14688–1: 2017 или их размер ,, но в моем коде функций представление, я не учел этого, потому что получить данные слишком сложно.
Если я хочу «подготовить» свои данные для модели машинного обучения, мне нужно пройти еще один шаг и сопоставить все функции с числовыми значениями. Чтобы быстро проиллюстрировать, я решил, что яркость песка может быть представлена следующими числовыми значениями, где dark установлен на 1.0, коричневатый на 2.0 и белый на 3.0, и в моих собранных данных я заменяю строки этими числами. Выполняя аналогичное упражнение с другими функциями, я получил бы вектор признаков, подобный следующему:
[2.0, 2.0, 1.0, 4.0, 2.0, 1.0, 3.0]
Итак, у вас есть упрощенная первая версия вектора признаков, которая готова к использованию в качестве входных данных для модели машинного обучения. Я говорю слишком упрощенно, потому что есть больше методов для представления вашей функции, и они чрезвычайно важны для обучающей части модели - проверьте это руководство для дальнейшего понимания.
Вектор линейной алгебры и массив языков программирования
Теперь мы понимаем, что такое вектор признаков с точки зрения представления данных, но на практике описанная числовая структура представляет собой вектор из линейной алгебры, который программно записывается с использованием массивов.
На изображении выше у нас есть 3 вектора с 2 измерениями и их координаты (-2, 1), (0, 1) и (1, 0). В моем примере я выбрал 7 различных атрибутов, превратив это представление в вектор из 7 измерений.
Теперь уделите еще 10 минут своей жизни и посмотрите это видео!
Начиная с этого шага, вам необходимо усвоить, что векторы признаков являются точками данных в пространстве, и алгоритмы машинного обучения пытаются найти закономерности, используя их для получения вашей классификации, регрессии или кластеризация решена.
Выводы из реального мира по проектированию функций
- Разработка функций занимает большую часть вашего времени. Вам нужно будет собрать данные, найти признаки, описывающие проблему, и оттуда получить числовые представления.
- При работе с текстами вам доступно множество подходов (TF-IDF, Word2Vec, Bag of Words и т. Д.), и я настоятельно рекомендую вам прочитать эту страницу из sklearn.
- При работе с изображениями или звуками я советую использовать набор алгоритмов Deep Learning - в основном кодирование функций предоставляется «бесплатно»!
- Существует множество бизнес-кейсов, что простые подходы к представлению вычислительно дешевы и просты в реализации. Например, в проблемном пространстве изображения у вас есть карты границ, перцепционное хеширование и т. Д., которых достаточно для решения случаев подобия.
- Ваши особенности могут и будут меняться со временем! Всегда есть что отрегулировать для поддержки ваших моделей.
- Для любой конкретной проблемы сохраните созданный вектор, протестируйте и сравните несколько подходов или комбинаций и, наконец, примите сознательное решение о том, что работает лучше всего!
- Помните, что функции - это ключевые моменты для ответа на вопрос. Так что и хорошего!
Какой-то код
Я подготовил код со всем, что сказал. Проверьте это.
Заключительные слова
Кстати… поезжайте в Хорватию! Никакого раздражающего песка, кристально чистой воды, без громкой музыки, ресторанов с красивым приютом и едой, а в некоторых местах совсем не многолюдно! : D
Последнее примечание. Это первая публикация моего личного проекта по созданию руководства для людей, которые хотят создавать продукты для машинного обучения. В то же время я пытаюсь скомпилировать то, что читаю, какой-то код и хорошие ссылки, которые помогли мне понять некоторые концепции.
использованная литература
- Епископ, Кристофер (2006). Распознавание образов и машинное обучение. Берлин: Springer. ISBN 0–387–31073–8.
- Извлечение функций с помощью sklearn: http://scikit-learn.org/stable/modules/feature_extraction.html
- Иерархия потребностей ИИ: https://hackernoon.com/the-ai-hierarchy-of-needs-18f111fcc007
- Представление данных Google: https://developers.google.com/machine-learning/crash-course/presentation/video-lecture
- Дополнительные программные сведения о разработке функций: https://www.datacamp.com/community/tutorials/feature-engineering-kaggle
- Учебное пособие по Word2Vec: https://www.tensorflow.org/tutorials/word2vec
- Рисунок векторов: https://en.wikipedia.org/wiki/Basis_(linear_algebra)#/media/File:Basis_graph_(no_label).svg
- Массивы Numpy: https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.array.html
- Плейлист Linear Algebra, подготовленный замечательным 3Blue1Brown: https://www.youtube.com/watch?v=kjBOesZCoqc&list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab
- Себастьян Рашка о масштабировании и нормализации функций: http://sebastianraschka.com/Articles/2014_about_feature_scaling.html