Применение векторной алгебры в науке о данных

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

С другой стороны, есть величины, для описания которых требуется как минимум 2 измерения. Наряду с величиной у них есть связанное «направление», например скорость или сила. Эти величины известны как «векторы».

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

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

Каждое отдельное измерение здесь является скалярной величиной. Таким образом, рост или вес, рассматриваемые отдельно, являются скалярами.

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

В этом представлении каждый ученик - вектор. Он описывается двумя характеристиками: ростом и весом. Итак, в этом векторе нет реального «направления» согласно стандартному определению. Но когда мы представляем величины более чем в одном измерении (в данном случае это 2 - рост и вес), там чувство ориентации по отношению друг к другу. Итак, когда мы смотрим на 5 студентов (5 векторов), у них есть величина и представление о «направлении» по отношению друг к другу.

Поскольку наиболее полезные наборы данных всегда имеют более одного атрибута, все они могут быть представлены как «Векторы». Каждое наблюдение в данном наборе данных можно рассматривать как вектор. Все возможные наблюдения набора данных составляют «векторное пространство». Это причудливый способ сказать, что есть пространство, и каждый вектор имеет свое местоположение в этом пространстве.

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

Чем могут помочь векторы?

Глядя на векторы в векторном пространстве, вы можете быстро сравнить их, чтобы проверить, есть ли связь. Например, вы делаете вывод, что похожие векторы будут иметь меньший угол между собой, т.е. их ориентация будет близка друг к другу. В данных нашей выборки студенты (5,4,54) и (5, 50) очень похожи.

Угол между векторами указывает на «сходство» между ними. Векторы в одном направлении (близкий к углу 0 градусов) подобны, в то время как векторы в противоположном направлении (близкий к углу 180 градусов) различны. Теоретически. если векторы расположены под углом 90 градусов друг к другу (ортогональны), то между ними нет никакой связи. Есть ли математическая функция, которая может уловить эту взаимосвязь?

Подумайте о тригонометрической функции - косинусе.

Приведенное выше описание может показаться немного загадочным. Итак, не забывайте, что мы говорим здесь о «представлении» данных таким образом, что это помогает нам найти взаимосвязь или закономерность. Векторная форма - одно из таких представлений.

Косинусное подобие

Косинусное подобие - это метрика, которая дает косинус угла между векторами. Его можно рассчитать, используя «скалярное произведение» двух векторов. Математически,

Итак, теперь всякий раз, когда вы слышите о векторах в Data Science, думайте о скалярном произведении и косинусе угла между ними. Вы увидите, насколько эти векторы похожи или различны.

Векторизация текста

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

«Встраивание слов» - это процесс представления слов или текста в виде векторов.

Существует ряд методов преобразования / представления текста в виде векторов. Один из простейших методов - Count Vectorizer. Ниже приведены несколько первых строк текста из книги Чарльза Диккенса Повесть о двух городах:

Это были лучшие времена,
были худшие времена,
это был век мудрости,
это был век глупости

Как можно преобразовать приведенные выше 4 предложения в векторы:

Шаг 1. Получите уникальные слова из набора вашего текста. Общий текст, который у вас есть, называется «корпусом».

Уникальные слова здесь (без учета регистра и знаков препинания):

['age',
 'best',
 'foolishness',
 'it',
 'of',
 'the',
 'times',
 'was',
 'wisdom',
 'worst']

Это словарь из 10 слов из корпуса, содержащего 24 слова.

Шаг 2. Для каждого предложения создайте список из 10 нулей.

Шаг 3. Начинайте читать каждое предложение одно за другим для каждого предложения. Для каждого слова подсчитайте общее количество вхождений в предложении. Теперь определите позицию слова в приведенном выше списке словаря и замените ноль этим счетчиком в этой позиции.

Для нашего корпуса мы получили следующие векторы:

«Это были лучшие времена» = [0 1 0 1 1 1 1 1 0 0]

«Это было худшее из времен» = [0 0 0 1 1 1 1 1 0 1]

«Это был век мудрости» = [1 0 0 1 1 1 0 1 1 0]

«Это был век глупости» = [1 0 1 1 1 1 0 1 0 0]

Код на Python:

from sklearn.feature_extraction.text import CountVectorizer
documents = [‘it was the best of times’, ‘it was the worst of times’,’it was the age of wisdom’,’it was the age of foolishness’]
vectorizer = CountVectorizer()
sentence_vectors = vectorizer.fit_transform(documents)
print(sentence_vectors.toarray())

Выход:

Чистый код Python (без использования встроенной библиотеки) для вычисления косинусного сходства между двумя предложениями:

import math
import re
from collections import Counter
WORD = re.compile(r”\w+”)
def cosine(vector1, vector2):
 intersect = set(vector1.keys()) & set(vector2.keys())
 numerator = sum([vector1[x] * vector2[x] for x in intersect])
sum1 = sum([vector1[x] ** 2 for x in list(vector1.keys())])
 sum2 = sum([vector2[x] ** 2 for x in list(vector2.keys())])
 denominator = math.sqrt(sum1) * math.sqrt(sum2)
if not denominator:
 return 0.0
 else:
 return float(numerator) / denominator
def text_to_vector(text):
 words = WORD.findall(text)
 return Counter(words)
sentence1 = “it was the age of foolishness”
sentence2 = “it was the age of wisdom”
vector1 = text_to_vector(sentence1)
vector2 = text_to_vector(sentence2)
cosine = cosine(vector1, vector2)
print(“Cosine Similarity:”, cosine)

Косинусное сходство между это была эпоха мудрости »и« это была эпоха глупости »

Сходство косинуса будет числом от 0 до 1. Чем больше результат близок к 1, тем больше сходство.

Значение 0,83 предполагает, что два предложения в этом примере очень похожи. Это потому, что слова - «это», «было», «то», «возраст», «из» повторяются в обоих предложениях. Однако последнее слово «мудрость» и «глупость» полностью меняет смысл предложений, и в этом отношении они довольно не похожи. В чем проблема? Проблема заключается в используемом методе «векторизации». Чтобы уловить семантическое значение предложений, нам нужно использовать более продвинутые методы преобразования слов в векторы. В следующей статье я расскажу о другом методе векторизации, который имеет дело с этим сценарием.

Заключение

Цель этой статьи - дать представление об использовании векторов для представления данных. Мотив Data Science или машинного обучения - выяснить закономерности и взаимосвязь между наблюдениями. Визуализация данных в виде векторов и использование векторной алгебры для управления ими решает множество проблем с данными, особенно в области обработки естественного языка, классификации текста и анализа текста.

Заканчивая это на философской ноте -

«Все мы векторы. Многие из нас все еще ищут направление »

Вам также могут понравиться следующие статьи:

  1. Исчисление - математика перемен
  2. Открытие математического мышления
  3. Человеческое обучение против машинного обучения