Menu
CoddyTech

Суммы значений на кубиках

Часть раздела Статистика для машинного обучения путешествия по Machine Learning на Coddy. Урок 15 из 64.

Бросьте две кости и сложите выпавшие числа: сумма 7 выпадает в шесть раз чаще, чем сумма 2. Посчитайте пары выпавших значений:

Сетка 6 на 6 с суммами значений двух костей: значения первой кости указаны сбоку, а второй — сверху. Шесть ячеек, в которых сумма равна 7, расположены по диагонали и закрашены; только в одной ячейке сумма равна 2

Моделирование подтверждает это. Складывай результаты бросков по очереди, затем подсчитай каждую сумму; value_counts перечисляет самые частые сначала:

rng = np.random.default_rng(2)
first = rng.integers(1, 7, size=3600)
second = rng.integers(1, 7, size=3600)
counts = pd.Series(first + second).value_counts()
print(counts.head(3))

Это выводит:

7    605
6    522
8    443
Name: count, dtype: int64

ax.bar(counts.index, counts) рисует всю палатку:

Столбчатая диаграмма 3600 бросков двух кубиков: столбцы поднимаются примерно от 100 при сумме 2 до пика около 600 при 7, затем снова опускаются примерно до 100 при 12

Столбчатая диаграмма — это первый способ оценить любую метку: модель едва ли научится распознавать её редкие значения.

challenge icon

Задание

Средне

В ролевой игре урон — это сумма результатов двух четырёхгранных кубиков, каждый из которых выдаёт от 1 до 4. Программа считывает количество атак; стартовый код записывает результаты бросков в first и second и задаёт подписи диаграммы.

  1. Подсчитай количество выпадений каждого значения урона.
  2. Выведи наиболее вероятное значение урона и его долю от общего числа атак с точностью до 3 знаков после запятой.
  3. Покажи количество выпадений для каждого значения в виде столбцов.

Для 16 атак данных слишком мало, чтобы им доверять:

Most likely damage: 6, share 0.312

Столбчатая диаграмма с заголовком Damage Rolls для 16 атак: столбцы на отметках 3, 5, 6, 7 и 8; самый высокий столбец — на отметке 6, с 5 бросками

Затем Coddy опишет твою диаграмму. При большем количестве атак максимум станет устойчивее.

Попробуйте сами

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

rolls = int(input())

# Не изменяйте строки ниже
rng = np.random.default_rng(4)
first = rng.integers(1, 5, size=rolls)
second = rng.integers(1, 5, size=rolls)

fig, ax = plt.subplots()
ax.set_title("Damage Rolls")
ax.set_xlabel("Damage")
ax.set_ylabel("Rolls")

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Статистика для машинного обучения

Потренируйтесь самостоятельно: Онлайн-компилятор Python