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

Как я могу рассчитать режим массива с плавающей запятой в Ruby?

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


  • возможный дубликат 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
  • Ваш первый фрагмент кода будет работать, но неэффективен. 26.06.2014
  • Это верно. Самый быстрый метод — a.group_by {|e| e}.values.max_by{|e| e.size}.first, который был опубликован @Brandon в дублирующемся сообщении, упомянутом выше. 26.06.2014
  • Спасибо, я вижу, но мои числа с плавающей запятой немного колеблются, потому что они получены из разных вычислений. Например, 1,00001 и 1,00000 должны рассматриваться как 1,0. 26.06.2014
  • Кроме того, мои числа с плавающей запятой представлены парами, потому что они являются параметрами линии в системе координат (y=a*x+b). На самом деле мои данные двумерные, поэтому следует применить какой-то продвинутый метод. Я не думаю, что мне разрешено вычислять режим значений a и отдельно значений b, потому что они прикреплены. 26.06.2014
  • В этом случае используйте Float#round для округления каждого значения до определенной точности: rounded = a.map {|n| n.round(1)} 26.06.2014
  • @Konstantin, может помочь, если вы обновите свой вопрос некоторыми примерами данных. 26.06.2014
  • Хорошо, вот мой образец данных pastebin.com/krAh1yUC Пары чисел с плавающей запятой представляют параметры линейного преобразования: y =a*x+b Таким образом, значениями в массиве являются пары [a,b], всего 45 пар. Видно, что мода a=1.0, b=0.4 27.06.2014
  • Новые материалы

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

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

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

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

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

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

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