Шаг 68.
Однострочники Python. Машинное обучение. Основные статистические показатели с помощью одной строки кода. Код и принцип работы

    На этом шаге мы закончим изучение этого вопроса.

Код

    В примере 4.8 показано, как именно вычислить среднее значение, дисперсию и стандартное отклонение по одной из осей. Наша задача: вычислить среднее значение, дисперсию и стандартное отклонение всех типов акций в двумерной матрице, строки которой соответствуют типам акций, а столбцы - курсам по дням.


Пример 4.8. Вычисление простейших статистических показателей по одной из осей
## Зависимости
import numpy as np

## Данные о курсах акций: 5 компаний
## (строка=[курс_день_1, курс_день_2, ...])
x = np.array([[8, 9, 11, 12],
              [1, 2, 2, 1],
              [2, 8, 9, 9],
              [9, 6, 6, 3],
              [3, 3, 3, 3]])

## Однострочник
avg, var, std = np.average(x, axis=1), np.var(x, axis=1), np.std(x, axis=1)

## Результат
print("Averages: " + str(avg))
print("Variances: " + str(var))
print("Standard Deviations: " + str(std))
Архив с файлом можно взять здесь.

    Угадайте, какой результат вернет этот код!

Принцип работы

    В нашем однострочнике с помощью ключевого слова axis задается ось координат, по которой вычисляется среднее значение, дисперсия и стандартное отклонение. Например, если выполнять эти три функции по оси axis=1, то каждая из строк будет агрегирована в одно значение. А значит, размерность полученного в итоге массива NumPy уменьшится до единицы.

    Приведенный выше код возвращает следующее:

Averages: [10.   1.5  7.   6.   3. ]
Variances: [2.5  0.25 8.5  4.5  0.  ]
Standard Deviations: [1.58113883 0.5        2.91547595 2.12132034 0.        ]

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

    При агрегировании по одной из осей многомерного массива NumPy всегда агрегируется ось, указанная в аргументе axis. Вот пример:

import numpy as np

x = np.array([[[1,2], [1,1]],
              [[1,1], [2,1]],
              [[1,0], [0,0]]])

print(np.average(x, axis=2))
print(np.var(x, axis=2))
print(np.std(x, axis=2))

# [[1.5 1. ]
# [1. 1.5]
# [0.5 0. ]]
# [[0.25 0. ]
# [0. 0.25]
# [0.25 0. ]]
# [[0.5 0. ]
# [0. 0.5]
# [0.5 0. ]]

    Здесь приведены три примера вычисления среднего значения, дисперсии и стандартного отклонения по оси 2 (самая внутренняя ось координат; см. 42 шаг). Другими словами, все значения оси 2 будут схлопнуты в одно, в результате чего ось 2 пропадет из итогового массива. Взгляните на эти три примера внимательнее и разберитесь, как именно ось 2 схлопывается в одно среднее значение, дисперсию или стандартное отклонение.

    Резюмируя: умение извлекать хотя бы простейшую полезную информацию необходимо для широкого спектра наборов данных (в том числе финансовых, медицинских и данных соцсетей). Из этого шага вы узнали больше о том, как быстро и эффективно вычислять основные статистические показатели для многомерных массивов, необходимый шаг предварительной обработки для многих алгоритмов машинного обучения.

    На следующем шаге мы рассмотрим классификацию путем метода опорных векторов с помощью одной строки кода.




Предыдущий шаг Содержание Следующий шаг