Как вычислить среднеквадратичное значение (среднеквадратичное значение) окна выборки?

У меня следующий сценарий. Я собрал некоторые данные об ускорении (accX, accY и accZ) трехфазного двигателя через платформу Edge Impulse с помощью смартфона.

При структурировании моих необработанных данных во фрейме данных остаются следующие значения: значения собранного образца

Итак, при построении этих данных у меня есть следующие подграфики: выборка сюжетов

Таким образом, в этом контексте в игру вступают мои трудности с построением вектора (списка), содержащего среднеквадратичное значение выборки.

Я пытался рассчитать с помощью следующего кода:

# calculate the average value of the accY column
media = dado['accY'].mean()

# calculate the RMS vector of the column
rms = np.sqrt(dado['accY'].apply(lambda x: (x - media)**2))

приведите этот код к графику примечание: среднеквадратичное значение зеленой линии

Мой советник сказал, что rms и media должны вести себя внутри подзаголовка accY следующим образом: красный рмс и зеленый медиа Примечание: среднеквадратичная красная линия и средняя зеленая линия.

Итак, каково ваше мнение, это неправильно в коде?

Новые реализации, я разрабатывал движущиеся среднеквадратичные значения ускорений:

rms = (pd.DataFrame(abs(dado['accX'].values)**2).rolling(window).mean()) **0.5

в этом есть смысл?


ваш советник может использовать окно фиксированного размера для расчета RMS

darth baba 05.04.2023 21:43

Да, он подтвердил это мне только что. Не могли бы вы предложить что-нибудь (ссылку) о том, как реализовать?

Renan Saraiva dos Santos 05.04.2023 22:01

Я думаю, что вы не вычисляете RMSE, а вместо этого вычисляете стандартное отклонение.

darth baba 05.04.2023 23:00

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

Pranav Hosangadi 08.04.2023 02:14

@PranavHosangadi, конечно, я отредактирую

Renan Saraiva dos Santos 08.04.2023 02:16

@Renan Я имел в виду добавить его как ответ ниже (в поле «Ответ», затем нажмите «Опубликовать свой ответ» вместо того, чтобы редактировать его в своем вопросе.

Pranav Hosangadi 08.04.2023 22:41
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
106
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

RMSE определяется для двух наборов значений. Здесь вы используете один набор «accY» для расчета RMSE? Это невозможно: вы вычисляете стандартное отклонение, отклонение от среднего значения. Вот пример набора данных, который реализует стандартные отклонения.

df = pd.DataFrame({'col1': np.random.randint(low = 0,high=1000,size=100),'col2':np.random.randint(low = 0,high=120,size=100)})
aa = pd.date_range(start='1/1/2018', end='4/10/2018')
df.index = aa
df['std'] = df.rolling('5D')['col1'].std()
df = df.fillna(0)
plt.plot(df.index.values, df.col1.values)
plt.plot(df.index.values, df['std'].values)

Я создал окно на 5 дней, рассчитал стандартное отклонение для этих 5 дней и нанес его на график относительно исходных значений.

Я не понимаю значения слов для этого случая. Что я хочу сказать, что он будет? rms[i] = sqrt (sum (data['accX'].rolling(window) - mean(data['accX'])/len(data['accX']))

Renan Saraiva dos Santos 06.04.2023 00:46

Вы знаете, что такое РМС? Сначала прочтите об этом

darth baba 06.04.2023 09:08
Ответ принят как подходящий

Мне удалось решить это с помощью

Здесь n — это окно размера n, и, допустим, у вас есть массив [1, 2, 3, 4, 5] и окно размера n = 2, затем для вычисления среднеквадратичного значения перемещения для каждого окна (x_i) или элемента в массиве вам нужно будет вычислить сумму квадратов x_i и n-1 значений, сдвинутых вправо (в данном случае 1 значение, сдвинутое вправо) в массиве.

Например,

moving RMS = √( 1/n Σ x_i^2 ), where i = i to i+n-1,

moving RMS for window 1 = np.sqrt((1/2) * np.sum([1^2, 2^2])) = 1.58

moving RMS for window 2 = np.sqrt((1/2) * np.sum([2^2, 3^2])) = 2.54

moving RMS for window 3 = np.sqrt((1/2) * np.sum([3^2, 4^2])) = 3.53

moving RMS for window 4 = np.sqrt((1/2) * np.sum([4^2, 5^2])) = 4.52

moving RMS for window 5 can not be calculated.

Используйте код ниже:

for i in range(len(dado['accX'])):
  rms[i] = (i+window-1 < len(dado['accX'])) * np.sqrt( (1/window) * np.sum( dado['accX'].loc[i:i+window-1]**2 ) )

[![скользящее среднеквадратичное значение][3]][3]

Другие вопросы по теме