Nano Hash - криптовалюты, майнинг, программирование

Ошибка scipy.mstats.theilslopes в доверительном интервале, если данные имеют пропущенные значения

Если использовать процедуру scipy.mstats.theilslopes для набора данных с отсутствующими значениями, результаты нижней и верхней границ для оценки наклона будут неверными. Верхняя граница часто/всегда (?) NaN, а нижняя граница просто неверна. Это происходит из-за того, что подпрограмма theilslopes вычисляет индекс в отсортированном массиве склонов, и этот массив содержит наклоны отсутствующих значений, которых не должно быть.

Решение состоит в том, чтобы удалить пропущенные значения перед анализом, но это нигде не задокументировано.

Чтобы продемонстрировать проблему, вот простой фрагмент кода: импортируйте numpy как np из scipy.stats import mstats

x = np.arange(12)
y = np.array([28.9, 26.2, 27.2, 26.5, 28.4, 25.3, 26.1, 24.8, 27.7,
              np.nan, np.nan, 29.6])

slope, intercept, lo_slope, up_slope = mstats.theilslopes(y, x,
                                                          alpha=0.1)
print "incorrect: ", slope, lo_slope, up_slope

idx = [0, 1, 2, 3, 4, 5, 6, 7, 8, 11]
x = x[idx]   # equivalent to pandas series.dropna()
y = y[idx]

slope, intercept, lo_slope, up_slope = mstats.theilslopes(y, x,
                                                          alpha=0.1)
print "correct: ", slope, lo_slope, up_slope
22.05.2015

Ответы:


1

В модуле mstats модуля scipy.stats обрабатываются "отсутствующие значения". используя маскированный массив. nan не указывает на отсутствующее значение.

Ниже показано, как можно преобразовать массив y (который использует nan для отсутствующих значений) в маскированный массив my:

In [48]: x = np.arange(12)

In [49]: y = np.array([28.9, 26.2, 27.2, 26.5, 28.4, 25.3, 26.1, 24.8, 27.7, np.nan, np.nan, 29.6])

In [50]: my = np.ma.masked_array(y, mask=np.isnan(y))

In [51]: my
Out[51]: 
masked_array(data = [28.9 26.2 27.2 26.5 28.4 25.3 26.1 24.8 27.7 -- -- 29.6],
             mask = [False False False False False False False False False  True  True False],
       fill_value = 1e+20)

In [52]: slope, intercept, lo_slope, up_slope = mstats.theilslopes(my, x, alpha=0.1)

In [53]: print "correct: ", slope, lo_slope, up_slope
correct:  -0.125 -0.48 0.3875

Кстати, убедитесь, что вы используете как минимум версию 0.15.0 scipy. theilslopes в старых версиях есть ошибки: https://github.com/scipy/scipy/pull/3574

22.05.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..