На этом шаге мы закончим изучение этого вопроса.
В примере 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 схлопывается в одно среднее значение, дисперсию или стандартное отклонение.
Резюмируя: умение извлекать хотя бы простейшую полезную информацию необходимо для широкого спектра наборов данных (в том числе финансовых, медицинских и данных соцсетей). Из этого шага вы узнали больше о том, как быстро и эффективно вычислять основные статистические показатели для многомерных массивов, необходимый шаг предварительной обработки для многих алгоритмов машинного обучения.
На следующем шаге мы рассмотрим классификацию путем метода опорных векторов с помощью одной строки кода.