### Задание 1. Формирование Bootstrap-выборок

 

Дан набор данных:

 

```python

import numpy as np

 

data = np.array([5, 10, 15, 20, 25, 30])

```

 

Необходимо:

 

1. Создать три бутстреп-выборки размером шесть наблюдений.

2. Использовать выбор с возвращением.

3. Установить `random_state` или фиксированный генератор случайных чисел для воспроизводимости.

4. Вывести полученные выборки.

5. Определить, какие исходные наблюдения не вошли в каждую выборку.

6. Объяснить назначение бутстреп-выборок в бэггинге.

 

### Задание 2. Агрегирование прогнозов ансамбля

 

Пять деревьев решений выдали следующие прогнозы для трёх объектов:

 

```python

import numpy as np

 

predictions = np.array([

    [1, 0, 1],

    [1, 1, 0],

    [0, 0, 1],

    [1, 0, 1],

    [0, 1, 1]

])

```

 

Каждая строка соответствует одному дереву, каждый столбец — одному объекту.

 

Необходимо:

 

1. Определить итоговый класс каждого объекта большинством голосов.

2. Реализовать голосование на Python.

3. Вывести итоговые прогнозы.

4. Объяснить, почему ансамбль агрегирует ответы нескольких деревьев.

 

### Задание 3. Случайный лес и OOB-оценка

 

Используя `make_classification` и `RandomForestClassifier`, необходимо:

 

1. Создать набор данных из 300 наблюдений с 6 признаками.

2. Разделить данные на обучающую и тестовую выборки.

3. Обучить случайный лес из 50 деревьев.

4. Включить `bootstrap=True` и `oob_score=True`.

5. Получить OOB-оценку и точность на тестовой выборке.

6. Вывести важность признаков.

7. Повторить эксперимент со 100 деревьями.

8. Объяснить, почему OOB-оценка не заменяет независимый финальный тест.