Рубрики
Без рубрики

Векторы в Питоне

Обзор Мы увидим аспект царапин в книге * Играть, как мы реализуем несколько б … Теги с Python, наукой данных, машинным обучением.

Наука данных с нуля (23 частью серии)

Обзор

Посмотрим с нуля Аспект книги * Играть, как мы реализуем несколько функций строительного блока, чтобы помочь нам работать в отношении определения Евклидое расстояние В коде:

  • Примечание : Это глава 4, линейная алгебра, науки данных с нуля Джоэл Грус.

Пока мы не видим его приложения немедленно, мы можем ожидать, чтобы увидеть Евклидое расстояние Используется для к-ближайших соседей (классификация) или k-означает (кластеризация), чтобы найти «близбые точки K» ( источник ). ( Примечание : используются другие типы формул дистанции.)

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

Таким образом, с нуля Аспект этой книги работает на двух уровнях. В пределах Эта глава, мы строим кусочек до важной Расстояние и Сумма квадратов Формула. Но мы также строительные инструменты, которые мы будем использовать в последующих главах.

Векторы

Мы начинаем с реализации функций для Добавить и Вычитание Две векторы. Мы также создаем функцию для Компонент Wise Sum Список векторов, где создан новый вектор, первый элемент которого является суммой всех первых элементов в списке и так далее.

Затем мы создаем функцию для умножать Vector by scalar, который мы используем для вычисления Сообщение Wise означает списка векторов.

Мы также создаем Точечный продукт двух векторов или Сумма их компонента мудрого продукта , и это это обобщенная версия Сумма квадратов Отказ На данный момент нам достаточно, чтобы реализовать Евклидое расстояние Отказ Давайте посмотрим на код:

Пример векторов

Векторы просто список номеров:

height_weight_age = [70,170,40]

grades = [95,80,75,62]

Добавлять

Вы Примечание что мы делаем Тип аннотации на наш код на протяжении всего. Это соглашение, отставаемое автором (и как новичок в Python, мне нравится идея быть явным о типе данных для ввода и вывода функции).

from typing import List

Vector = List[float]

def add(v: Vector, w: Vector) -> Vector:
    """Adds corresponding elements"""
    assert len(v) == len(w), "vectors must be the same length"
    return [v_i + w_i for v_i, w_i in zip(v,w)]

assert add([1,2,3], [4,5,6]) == [5,7,9]

Вот еще один взгляд на то, что происходит с Добавить Функция:

Вычесть

def subtract(v: Vector, w: Vector) -> Vector:
    """Subtracts corresponding elements"""
    assert len(v) == len(w), "vectors must be the same length"
    return [v_i - w_i for v_i, w_i in zip(v,w)]

assert subtract([5,7,9], [4,5,6]) == [1,2,3]

Это почти так же, как предыдущий:

Сумма составляющей

def vector_sum(vectors: List[Vector]) -> Vector:
    """Sum all corresponding elements (componentwise sum)"""
    # Check that vectors is not empty
    assert vectors, "no vectors provided!"
    # Check the vectorss are all the same size
    num_elements = len(vectors[0])
    assert all(len(v) == num_elements for v in vectors), "different sizes!"
    # the i-th element of the result is the sum of every vector[i]
    return [sum(vector[i] for vector in vectors)
            for i in range(num_elements)]

assert vector_sum([[1,2], [3,4], [5,6], [7,8]]) == [16,20]

Здесь Список векторов становится один вектор. Если вы вернетесь к Добавить Функция, нужна Два векторы, так что если мы попытались дать ему четыре вектора, мы получили Типеррр Отказ Итак, мы обертываем четыре векторов в Список и предоставить что Как аргумент для vector_sum :

Умножить вектор с номером

def scalar_multiply(c: float, v: Vector) -> Vector:
    """Multiplies every element by c"""
    return [c * v_i for v_i in v]

assert scalar_multiply(2, [2,4,6]) == [4,8,12]

Одно число умножается на все Числа в векторе, с вектором, удерживающим его длину:

Сравненное составляющее

Это похоже на компонентную сумму (см. Выше); Список векторов становится одним вектором.

def vector_mean(vectors: List[Vector]) -> Vector: 
    """Computes the element-wise average"""
    n = len(vectors)
    return scalar_multiply(1/n, vector_sum(vectors))

assert vector_mean([ [1,2], [3,4], [5,6] ]) == [3,4]

Скалярное произведение

def dot(v: Vector, w: Vector) -> float:
    """Computes v_1 * w_1 + ... + v_n * w_n"""
    assert len(v) == len(w), "vectors must be the same length"
    return sum(v_i * w_i for v_i, w_i in zip(v,w))

assert dot([1,2,3], [4,5,6]) == 32

Здесь мы умножим элементы, а затем суммируйте их результаты. Две векторы становится одним номером ( Float ):

Сумма площадей

def sum_of_squares(v: Vector) -> float:
    """Returns v_1 * v_1 + ... + v_n * v_n"""
    return dot(v,v)

assert sum_of_squares([1,2,3]) == 14

На самом деле, sum_of_squares это особый случай Точечный продукт :

Величина

def magnitude(v: Vector) -> float:
    """Returns  the magnitude (or length) of v"""
    return math.sqrt(sum_of_squares(v)) # math.sqrt is the square root function

assert magnitude([3,4]) == 5

С Величина Мы квадратный корень sum_of_squares Отказ Это не что иное, как Пифагоренская теорема Отказ

В квадрате расстояние

def squared_distance(v: Vector, w: Vector) -> float:
    """Computes (v_1 - w_1) ** 2 + ... + (v_n - w_n) ** 2"""
    return sum_of_squares(subtract(v,w))

Это расстояние между Две векторы, в квадрате Отказ

(Евклидово расстояние

import math

def distance(v: Vector, w: Vector) -> float:
    """Also computes the distance between v and w"""
    return math.sqrt(squared_distance(v,w))

Наконец, мы квадратный корень Squared_distance Чтобы получить (евклидое) расстояние:

Резюме

Мы буквально построены с нуля, хотя и с некоторой помощью Python’s Математика Модуль, блоки, необходимые для необходимых функций, которые мы ожидаем использования позже, а именно: sum_of_squares и Расстояние Отказ

Довольно круто видеть, что эти основополагающие концепции настроили нас, чтобы понять более сложные алгоритмы обучения машины, такие как регрессия , K-Ближайшие соседи (классификация) , k-означает (кластеризация) И даже прикоснуться к Пифагоренская теорема Отказ

Мы рассмотрим Matrices Next.

Для получения дополнительной информации о науке о данных, машинном обучении, R, Python, SQL и многое другое, Найди меня в Twitter Отказ

Наука данных с нуля (23 частью серии)

Оригинал: “https://dev.to/paulapivat/vectors-in-python-4e12”