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

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

24.06.2024, 10:08. Показов 2438. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru