← Назад к вопросам

Верно ли что среднее гармоническое всегда меньше среднего арифметического

1.0 Junior🔥 121 комментариев
#Машинное обучение#Статистика и A/B тестирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Сравнение среднего гармонического и арифметического

Краткий ответ

ДА, это верно: среднее гармоническое (HM) ВСЕГДА меньше или равно среднему арифметическому (AM).

Математически:

HM ≤ AM

Равенство выполняется только когда все числа одинаковые.

Математическое доказательство

Определения:

  • Арифметическое среднее: AM = (a + b) / 2
  • Гармоническое среднее: HM = 2 / (1/a + 1/b)

Расширим HM:

HM = 2 / (1/a + 1/b)
   = 2 / ((a+b) / (ab))
   = 2ab / (a+b)

Доказательство неравенства:

Нужно показать: HM ≤ AM

2ab / (a+b) ≤ (a+b) / 2

Умножаем обе части на 2(a+b) (положительное число):
4ab ≤ (a+b)²
4ab ≤ a² + 2ab + b²
0 ≤ a² - 2ab + b²
0 ≤ (a-b)²  ✓

Это неравенство всегда верно, и равно нулю только когда a = b.

Пример на Python

import numpy as np

def harmonic_mean(a, b):
    return 2 * a * b / (a + b)

def arithmetic_mean(a, b):
    return (a + b) / 2

# Примеры
print("Пример 1: a=1, b=9")
a, b = 1, 9
hm = harmonic_mean(a, b)
am = arithmetic_mean(a, b)
print(f"HM = {hm:.2f}")
print(f"AM = {am:.2f}")
print(f"HM < AM? {hm < am}")
print()

print("Пример 2: a=10, b=20")
a, b = 10, 20
hm = harmonic_mean(a, b)
am = arithmetic_mean(a, b)
print(f"HM = {hm:.2f}")
print(f"AM = {am:.2f}")
print(f"HM < AM? {hm < am}")
print()

print("Пример 3: a=5, b=5 (одинаковые)")
a, b = 5, 5
hm = harmonic_mean(a, b)
am = arithmetic_mean(a, b)
print(f"HM = {hm:.2f}")
print(f"AM = {am:.2f}")
print(f"HM = AM? {hm == am}")

Результат:

Пример 1: a=1, b=9
HM = 1.80
AM = 5.00
HM < AM? True

Пример 2: a=10, b=20
HM = 13.33
AM = 15.00
HM < AM? True

Пример 3: a=5, b=5
HM = 5.00
AM = 5.00
HM = AM? True

Общая иерархия средних

Для положительных чисел существует устойчивое неравенство:

MIN ≤ HM ≤ GM ≤ AM ≤ MAX

где:

  • MIN — минимальное значение
  • HM — гармоническое среднее
  • GM — геометрическое среднее
  • AM — арифметическое среднее
  • MAX — максимальное значение
import numpy as np

def visualize_means(values):
    n = len(values)
    
    # Минимум и максимум
    min_val = np.min(values)
    max_val = np.max(values)
    
    # Арифметическое среднее
    am = np.mean(values)
    
    # Геометрическое среднее
    gm = np.exp(np.mean(np.log(values)))
    
    # Гармоническое среднее
    hm = n / np.sum(1 / values)
    
    print(f"MIN: {min_val:.2f}")
    print(f"HM:  {hm:.2f}")
    print(f"GM:  {gm:.2f}")
    print(f"AM:  {am:.2f}")
    print(f"MAX: {max_val:.2f}")
    print()
    print(f"HM ≤ GM ≤ AM? {hm <= gm <= am}")

values = np.array([1, 10])
print("Значения: [1, 10]")
visualize_means(values)

values = np.array([2, 4, 8, 16])
print("\nЗначения: [2, 4, 8, 16]")
visualize_means(values)

Почему это важно

1. F1-score использует гармоническое среднее

Вспомним: F1 = 2 * (Precision * Recall) / (Precision + Recall)

Это гармоническое среднее Precision и Recall. Оно сильнее штрафует дисбаланс, чем арифметическое:

precision, recall = 0.9, 0.1

am = (precision + recall) / 2  # 0.5
hm = 2 * precision * recall / (precision + recall)  # 0.1818

print(f"Арифметическое: {am:.2f}")
print(f"Гармоническое: {hm:.2f}")
print(f"Гармоническое штрафует дисбаланс!")

2. Скорость и время

Гармоническое среднее используется для расчёта средней скорости:

# Едем 100 км со скоростью 50 км/ч
time1 = 100 / 50  # 2 часа

# Едем обратно 100 км со скоростью 100 км/ч
time2 = 100 / 100  # 1 час

# НЕПРАВИЛЬНО: средняя скорость = (50 + 100) / 2 = 75 км/ч
# На самом деле: 200 км за 3 часа = 66.67 км/ч

average_speed = 200 / (time1 + time2)
print(f"Истинная средняя скорость: {average_speed:.2f} км/ч")

# ПРАВИЛЬНО: гармоническое среднее
hm_speed = 2 * 50 * 100 / (50 + 100)
print(f"Гармоническое среднее: {hm_speed:.2f} км/ч")

3. Проверка равенства

def means_equal(values):
    n = len(values)
    am = sum(values) / n
    hm = n / sum(1/v for v in values)
    
    # Они равны только если все элементы одинаковые
    return abs(am - hm) < 1e-9

print(means_equal([5, 5, 5]))  # True
print(means_equal([1, 2, 3]))  # False

Ответ на вопрос

ДА, верно. Среднее гармоническое ВСЕГДА меньше или равно среднему арифметическому. Равенство наступает только когда все числа одинаковые. Это фундаментальное неравенство в математике, и оно важно для понимания различных метрик в machine learning.