Pull to refresh

Comments 7

Как же я рад, что эта статья прошла проверку !!! ??

Стоит всё же добавить, что в пакете Numpy уже есть собственные реализации функций median() и mean(), а также аналогичные — изначально игнорирующие значения NaN: nanmedian() и nanmean().

Ооо, спасибо большое, я не знал?

Мода (Mode) - это наиболее часто встречающееся значение в наборе данных. Мод может быть несколько.

Уточню малость. Распределение принято называть бимодальным (мультимодальным), если функция распределения имеет два или несколько максимумов. Однако высота у этих максимумов совершенно не обязана совпадать. Поэтому сплошь и рядом "наиболее часто встречающееся значение" - всего одно, а распределение тем не менее бимодальное. Хотя вполне может быть и несколько мод одинаковой амплитуды.

Я бы в такой ситуации говорил о "локальных" модах - то есть значениях, которые встречаются чаще соседних.

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

смешивается несколько "обычных" распределений
Пример 4-модального распределения.
Пример 4-модального распределения.

На картинке пример 4-модального распределения. Причем значения -8.75 и 0 встречаются одинаково часто (две моды примерно одинаковой амплитуды), а значения 9.5 и 17 - тоже одинаково часто, но гораздо реже, чем первые два

P.S. Серая кривая внизу - это аппроксимация получившегося изуверского распределения гауссианом. Видно, что качество аппроксимации катастрофически ужасающее не совсем идеальное ;-) Это я к тому, что если функция (аналитик) ожидает одномодальное распределение, а оно на самом деле совсем другое, то можно интересные результаты на выходе получить.

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

P.P.S. Ниже - оффтопик:

Это не реальные данные, я просто взял с потолка 4 гауссиана и сложил

А впрочем, изучил сейчас повнимательнее потолок над компом... и уже не уверен: точно ли эти гауссианы оттуда, или же они все-таки

высосаны из пальца

Так как по форме они гораздо больше на пальцы похожи. А высасывала - нейросеть (кожаная), поэтому получилось только 4 шт, а не пять.

Да и вообще

как-то не очень приятно осознавать, что малейшее шевеление - и вот ты уже уперся в свой потолок :-(

хорошо, спасибо большое за подробное разъяснение)

А на кодкамп - нашлось и элегантное решение для вычисления мод:

#create NumPy array of values with multiple modes

x = np.array([2, 2, 2, 3, 4, 4, 4, 5, 5, 5, 7])

#find unique values in array along with their counts

vals, counts = np.unique (x, return_counts= True )

#find mode

mode_value = np.argwhere (counts == np.max (counts))

#print list of modes

print(vals[mode_value]. flatten().tolist ())

[2, 4, 5]

Sign up to leave a comment.

Articles