Классическая задача: повар предсказывает y^ по правилу большинства трёх мнений n1, n2, n3. y^ = 1, если сумма n1+n2+n3 >= 2; иначе y^ = 0. Нужно посчитать, в скольких строках этот прогноз совпал с фактическим решением Тутти y (0 или 1).
Что сделать, если файл с данными есть или нет
- Что дано в файле: в каждой строке 4 целых числа 0 или 1 в таком порядке: n1, n2, n3, y.
- Что нужно посчитать: количество строк, в которых y^ = y.
Пошаговое объяснение (для понимания)
- Вычислите y^ по каждому ряду: суммируйте три числа n1, n2, n3.
- Преобразуйте сумму в прогноз повара: если сумма >= 2, то y^ = 1, иначе y^ = 0.
- Сравните получившееся y^ с y. Если они совпадают, считайте строку как совпавшую.
- Подсчёт: просуммируйте число совпавших строк.
Формула для y^
- y^ = 1, если n1 + n2 + n3 >= 2
- y^ = 0, если n1 + n2 + n3 <= 1
Рраспределение по форматам (практические инструкции)
- CSV/Excel/ODS (пошагово в Excel/Sheets)
- Пусть столбцы:
- A: n1, B: n2, C: n3, D: y
- В столбце E добавьте формулу для y^:
- E2: =IF((A2+B2+C2)>=2, 1, 0)
- В столбце F добавьте формулу для совпадения:
- F2: =IF(D2=E2, 1, 0)
- Протяните формулы вниз по всем строкам.
- Сумма совпавших строк:
- В любом пустом месте введите: =SUM(F2:F1000) или используйте диапазон, соответствующий числу строк в вашем файле.
Альтернатива без двух столбцов:
- Можно обойтись одной формулой в столбце E (для y^) и затем посчитать совпадения через суммирование: =SUMPRODUCT(--(D2:D1000 = (A2:A1000+B2:B1000+C2:C1000 >= 2))) Но обычно понятнее заводить отдельный столбец для y^.
- OpenDocument Spreadsheet (ODS)
- Принципы такие же, как и в Excel.
- Формула в ODS: =IF((A2+B2+C2)>=2; 1; 0) (разделитель аргументов может быть точкой с запятой)
- Остальное аналогично: столбец совпадений и итоговая сумма.
- Python (для больших файлов)
Пример кода (CSV файл data.csv с колонками n1,n2,n3,y): import csv
matches = 0 total = 0 with open('data.csv', newline='') as f: rdr = csv.reader(f) for row in rdr: n1, n2, n3, y = map(int, row) y_hat = 1 if (n1 + n2 + n3) >= 2 else 0 if y_hat == y: matches += 1 total += 1 print("Совпавших строк:", matches, "из", total)
- Python (pandas, более удобно для больших наборов)
Пример: import pandas as pd
df = pd.read_csv('data.csv') # колонки: n1, n2, n3, y df['y_hat'] = (df[['n1','n2','n3']].sum(axis=1) >= 2).astype(int) matches = (df['y_hat'] == df['y']).sum() print(matches)
- Советы по ошибкам
- Убедитесь, что значения действительно 0 или 1 в n1, n2, n3 и y.
- Проверьте диапазон строк при суммировании столбцов.
- Если данные начинаются не с первой строки (есть заголовок), учтите это: начинайте формулы с соответствующей строки.
Пример на практике (маленький набор данных) Допустим, у вас 5 строк:
- n1=1, n2=1, n3=0, y=1 → сумма=2 → y^=1 → совпало
- n1=0, n2=1, n3=0, y=0 → сумма=1 → y^=0 → совпало
- n1=1, n2=0, n3=1, y=0 → сумма=2 → y^=1 → не совпало
- n1=0, n2=0, n3=1, y=0 → сумма=1 → y^=0 → совпало
- n1=1, n2=1, n3=1, y=1 → сумма=3 → y^=1 → совпало
Итог: совпали в 4 из 5 строк.
Что нужно от вас дальше
- Загрузите файл (XLSX, ODS или CSV) или вставьте сюда несколько строк из него (4 числа на строку: n1 n2 n3 y).
- Я посчитаю точное число строк, в которых предсказание y^ совпало с y, и кратко поясню результат.
- Если хотите, могу привести готовые формулы именно под ваш файл (укажете, какие столбцы соответствуют n1, n2, n3, y).