У меня есть массив данных с плавающей запятой, я хотел бы выбрать наиболее вероятное значение. В описательной статистике это называется модой. Как я могу вычислить это в Ruby или с помощью драгоценного камня.
Как я могу рассчитать режим массива с плавающей запятой в Ruby?
26.06.2014
- возможный дубликат Ruby: как найти элемент в массиве, который имеет наибольшее количество вхождений? 26.06.2014
- Спасибо, но я думаю, что этот алгоритм бесполезен с данными с плавающей запятой. 26.06.2014
- @Константин, почему ты так думаешь? Этот ответ отлично работает для float. Нет ничего плохого в том, чтобы использовать float в качестве ключа Hash в Ruby. 26.06.2014
- @theTRON верен, вам подойдет метод из первого ответа. 26.06.2014
Ответы:
1
DescriptiveStatistics добавляет в модуль Enumerable методы, позволяющие легко вычислять базовую описательную статистику числовых выборочных данных в коллекциях, которые включены Enumerable, такие как Array, Hash, Set и Range.
> require 'descriptive_statistics'
> [0.0, 0.1, 0.2, 0.1, 0.3, 0.3, 0.1].mode
=> 0.1
02.09.2014
2
Следующее будет работать для бимодальных и мультимодальных наборов данных, но возвращает только одно значение. Для бимодальных/мультимодальных наборов данных он всегда возвращает значение, которое встречается первым в массиве.
# returns 1.0
a = [1.0, 1.0, 2.0, 2.0, 3.0]
a.max_by { |x| a.count(x) }
Вы также можете попробовать гем easystats. Он добавляет метод .mode в массивы (среди других методов), но возвращает nil для бимодальных или мультимодальных наборов данных.
require 'easystats'
# returns 1.0
a = [1.0, 1.0, 2.0, 3.0]
a.mode
# returns nil
a = [1.0, 1.0, 2.0, 2.0, 3.0]
a.mode
26.06.2014
a.group_by {|e| e}.values.max_by{|e| e.size}.first
, который был опубликован @Brandon в дублирующемся сообщении, упомянутом выше. 26.06.2014 rounded = a.map {|n| n.round(1)}
26.06.2014 Новые материалы
Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..
Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально
Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..
Частный метод Python: улучшение инкапсуляции и безопасности
Введение
Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..
Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования
Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..
Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv)
Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..
Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..
Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..