Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
3 / 3 / 0
Регистрация: 28.01.2022
Сообщений: 48

Доверительный интервал для точности модели на тестовой выборке с помощью бутстрапа

24.06.2024, 10:08. Показов 2299. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Реализуйте функцию bootstrap_confidence_interval_solution, которая вычисляет доверительный интервал для точности модели на тестовой выборке с помощью бутстрапа.

Аргументы функции bootstrap_confidence_interval_solution:

y — реальные значения предсказываемой характеристики для объектов тестовой выборки;

y_pred — значения характеристики, предсказанные с помощью модели для объектов тестовой выборки;

i-й элемент списка y_pred соответствует предсказанию моделью значения под номером i в списке y;

fraction_to_cut — доля элементов, которые нужно отбросить с конца каждого значения, полученного с помощью бутстрапа, перед получением доверительного интервала;

random_gen — генератор случайных чисел.

В процессе работы бутстрапа необходимо сгенерировать 10000 бутстрап-выборок.

В процессе работы вам пригодится функция cut_on_edges, которая отбрасывает с левого и с правого концов переданного списка заданную долю элементов.

В результате работы функция bootstrap_confidence_interval_solution должна возвращать доверительный интервал для точности модели, оценённой по метрике «среднее отклонение от предсказанного значения»:
https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{\sum_1^n\left|{y}_{i}-{ypred}_{i} \right|}{n}
Доверительный интервал представляется в виде пары чисел, округлённых до трёх знаков после запятой с помощью функции round_to_3: левая и правая границы интервала.

На функцию накладывается условие, что в процессе её работы вызов функции choices у генератора random_gen должен производиться не больше 10000 раз.

Заготовка для функции bootstrap_confidence_interval_solution уже реализована в блокноте с задачами этого модуля.

Рекомендации по решению

Генерировать бутстрап-выборки на основе исходного множества необходимо с повторениями. Функция sample, которую мы использовали для генерации случайных выборок ранее, создавала их без повторений.

Для генерации случайной выборки с повторениями у генератора случайных чисел есть функция choices. С помощью её аргумента k можно задавать размер сгенерированной выборки:

random_gen = random.Random(0)
l = [1, 2, 3]
print(random_gen.choices(l, k=5)) # выведет [3, 3, 2, 1, 2]
Процесс работы алгоритма бутстрапа очень похож на моделирование, которое мы проводили в рамках одного из предыдущих заданий. Соответствующий код можно использовать вновь, заменив вызов функции sample на choices.

Формат сдачи решения

В качестве ответа на задание приведите код реализованной функции. Важно: сама функция не должна ссылаться ни на какие внешние переменные, которые определены вне функции. Исключениями являются функции cut_on_edges и round_to_3.

В коде функции также запрещено использовать ключевое слово import.

Тестирование решения

Для запуска тестов необходимо скачать этот файл (error_modelling.csv, использовавшийся в заданиях ранее) и поместить его в ту же папку, где находится блокнот Jupyter, с которым вы работаете в рамках задания.

Для тестирования функции у себя на компьютере можно воспользоваться функцией bootstrap_confidence_interval_tests, которая реализована в отдельной ячейке блокнота. Если все представленные в файле тесты отработают корректно, в результате запуска bootstrap_confidence_interval_tests появится фраза «Все тесты прошли успешно!».

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#Библиотеки
import pandas as pd
import seaborn as sns
 
from math import floor
from copy import deepcopy
 
import random
# Функции
class ChoicesNRandom():
    """
    Генератор случайных чисел, который запрещает использовать
    функцию choices больше n раз.
    """
    
    def __init__(self, seed=None, n=1):
        import random
        
        self._random_gen = random.Random(seed)
        self._choices_cnt = 0
        self._n = n
        
    def choices(self, *args, **kwargs):
        if self._choices_cnt >= self._n:
            raise RuntimeError(f'Нельзя использовать функцию choices больше {self._n} раз')
            
        self._choices_cnt += 1
        return self._random_gen.choices(*args, **kwargs)
def round_to_3(x):
    """
    Принимает число и возвращает результат его округления
    до 3 знаков после запятой.
    
    Аргументы:
        x: Число.
        
    Возвращаемое значение:
        Результат округления числа до 3 знаков после запятой.
    """
    
    return round(x, 3)
def cut_on_edges(l, fraction_to_cut):
    """
    Отбрасывает с левого и с правого концов переданного списка заданную долю элементов.
    
    Аргументы:
        l: Список элементов.
        fraction_to_cut: Доля элементов, которую нужно отбросить с каждой из сторон списка.
        
    Возвращаемое значение:
        Новый список, в котором с левого и с правого концов отборешна заданная доля элементов.
    """
    
    to_cut = floor(len(l) * fraction_to_cut)
    return l[to_cut:len(l) - to_cut]
# ============================= - граница кода, который требуется изменить
def bootstrap_confidence_interval_solution(y, y_pred, fraction_to_cut, random_gen):
    """
    Вычисляет доверительный интервал для точности модели на тестовой выборке с помощью бутстрапа.
    
    Аргументы:
        y: Реальные значения предсказываемой характеристики для объектов тестовой выборки.
        y_pred: Предсказанные с помощью модели значения характеристики для объектов тестовой выборки.
                i-ый элемент списка y_pred соответствует предсказанию моделью
                значения под номером i в списке y.
        fraction_to_cut: Доля элементов, которую нужно отбросить с каждого из концов списка полученных с помощью
                         бутстрапа значений перед получением доверительного интервала.
        random_gen: Генератор случайных чисел.
        
    Возвращаемое значение:
        Доверительный интервал для точности модели, оценённой по метрике
        «среднее отклонение от предсказанного значения».
        Представляется в виде пары значений: левая граница интервала, правая граница интервала.
    """
 
    boots_ans = []
    for i in range(10000):
        bootstrap_vyborka = random_gen.choices(y, k=len(y))
        summa = 0
        for j in range(len(y)):
            summa += abs(y[j] - bootstrap_vyborka[j])
        itog = abs(summa) / len(y)
        boots_ans.append(round_to_3(itog))
    boots_ans = sorted(boots_ans)
    boots_ans = sorted(cut_on_edges(boots_ans, fraction_to_cut))
    print(boots_ans)
    return boots_ans[0], boots_ans[-1]    
# =============================================
# Проверка кода
def bootstrap_confidence_interval_test():
    error_modeling_data = pd.read_csv('error_modelling.csv')
    
    y = list(error_modeling_data['y'])
    y_pred = list(error_modeling_data['y_pred'])
    
    y_y_pred = list(zip(y, y_pred))
    
    random_gen = random.Random(0)
    y_y_pred_example_1 = random_gen.sample(y_y_pred, 100)
    
    y_example_1 = [x[0] for x in y_y_pred_example_1]
    y_pred_example_1 = [x[1] for x in y_y_pred_example_1]
    random_gen_example_1 = ChoicesNRandom(0, n=10000)
    
    res_example_1 = 7.178, 13.509
    
    assert bootstrap_confidence_interval_solution(y_example_1, y_pred_example_1, 0.025, random_gen_example_1) == res_example_1
    
    print('Тест прошёл успешно!')
bootstrap_confidence_interval_test()
Второй день сижу и не могу понять, почему выводятся не те значения, хотя вроде делаю всё правильно.
Помогите пожалуйста!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.06.2024, 10:08
Ответы с готовыми решениями:

Сравните построенные модели на тестовой выборке по метрикам Precision
Сравните построенные модели на тестовой выборке по метрикам Precision (посчитайте среднюю метрику Precision по всем классам) и f-мера.

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

Доверительный интервал для АКФ
Здраствуйте! Подскажите пожалуйста: 1) как в программе Statistica определяются доверительный интервал для АКФ(на рисунке - красные...

20
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
25.06.2024, 08:27
Студворк — интернет-сервис помощи студентам
PROdada, поздравляю, вы молодец, что сами дошли до результата.

Добавлено через 5 часов 21 минуту
PROdada, поздравляю, вы молодец, что самостоятельно дошли до результата.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.06.2024, 08:27

Доверительный интервал для среднего
Всем добра, Строю гистограмму, использую data. Элемент показывает значение параметра доверит.интервал для среднего. Для какой...

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

Доверительный интервал для многомерного случая
Добрый день! Допустим, имеется набор некоторых параметров, которые могут как зависеть, так и не зависеть друг от друга. Для простоты...

Построить γ(гамма)-доверительный интервал для параметра
№4. 4. Рассматривается статистическая модель ξ ~ N(θ,1). Построить γ(гамма)-доверительный интервал для параметра θ. Рассчитать границы...

Определить доверительный интервал для неизвестного параметра распределения
Добрый день! Уважаемые форумчане и эксперты, помогите, пожалуйста, решить две задачи либо укажите на подобные, что бы можно было сделать по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru