{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# [Phystech@DataScience](https://thetahat.ru/courses/ph-ds-2025-spr)\n",
"## Домашнее задание 4"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "a0Lz8vN2jROZ"
},
"source": [
"**Правила, прочитайте внимательно:**\n",
"\n",
"* Выполненную работу нужно отправить телеграм-боту `@thetahat_ds25_bot`. Для начала работы с ботом каждый раз отправляйте `/start`. Дождитесь подтверждения от бота, что он принял файл. Если подтверждения нет, то что-то не так. **Работы, присланные иным способом, не принимаются.**\n",
"* Дедлайн см. в боте. После дедлайна работы не принимаются кроме случаев наличия уважительной причины.\n",
"* Прислать нужно **ноутбук в формате `ipynb`**. Если вы строите интерактивные графики, их стоит прислать в формате html.\n",
"* Следите за размером файлов. **Бот не может принимать файлы весом более 20 Мб.** Если файл получается больше, заранее разделите его на несколько.\n",
"* Выполнять задание необходимо полностью самостоятельно. **При обнаружении списывания всем участникам списывания дается штраф -2 балла к итоговой оценке за семестр.**\n",
"* Решения, размещенные на каких-либо интернет-ресурсах, не принимаются. Кроме того, публикация решения в открытом доступе может быть приравнена к предоставлении возможности списать.\n",
"* Обратите внимание на правила использования ИИ-инструментов при решении домашнего задания.\n",
"* **Код из рассказанных на занятиях ноутбуков** можно использовать без ограничений.\n",
"* Для выполнения задания используйте этот ноутбук в качестве основы, ничего не удаляя из него. Можно добавлять необходимое количество ячеек.\n",
"* Комментарии к решению пишите в markdown-ячейках.\n",
"* Выполнение задания (ход решения, выводы и пр.) должно быть осуществлено на русском языке.\n",
"* Решение проверяется системой ИИ-проверки
**ThetaGrader**. Результат проверки валидируется и исправляется человеком, после чего комментарии отправляются студентам.\n",
"* Если код будет не понятен проверяющему, оценка может быть снижена.\n",
"* Никакой код из данного задания при проверке запускаться не будет. *Если код студента не выполнен, недописан и т.д., то он не оценивается.*\n",
"\n",
"Важно!!! Правила заполнения ноутбука:\n",
"* Запрещается удалять имеющиеся в ноутбуке ячейки, менять местами положения задач.\n",
"* Сохраняйте естественный линейный порядок повествования в ноутбуке сверху-вниз.\n",
"* Отвечайте на вопросы, а также добавляйте новые ячейки в предложенных местах, которые обозначены `<...>`.\n",
"* В markdown-ячейках, содержащих описание задачи, находятся специальные отметки, которые запрещается модифицировать.\n",
"* При нарушении данных правил работа может получить 0 баллов.\n",
"\n",
"**Баллы за задание:**\n",
"\n",
"Легкая часть (достаточно на \"хор\"):\n",
"* Задача 1 — 20 баллов\n",
"* Задача 2 — 40 баллов\n",
"\n",
"Cложная часть (необходимо на \"отл\"):\n",
"* Задача 3 — 60 баллов\n",
"\n",
"-----"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "XXZ2j3-KE-M8"
},
"outputs": [],
"source": [
"# Bot check\n",
"\n",
"# HW_ID: phds_hw4\n",
"# Бот проверит этот ID и предупредит, если случайно сдать что-то не то.\n",
"\n",
"# Status: not final\n",
"# Перед отправкой в финальном решении удали \"not\" в строчке выше.\n",
"# Так бот проверит, что ты отправляешь финальную версию, а не промежуточную.\n",
"# Никакие значения в этой ячейке не влияют на факт сдачи работы."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "2L2uOD_sjROa"
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor\n",
"from sklearn.metrics import accuracy_score\n",
"from sklearn.model_selection import train_test_split, GridSearchCV\n",
"from sklearn.preprocessing import LabelEncoder\n",
"\n",
"\n",
"sns.set_theme(style='whitegrid', font_scale=1.3, palette='Set2')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "2NudF0NSLPzA"
},
"source": [
"## Легкая часть"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"### Задача 1."
]
},
{
"cell_type": "markdown",
"metadata": {
"ai_eval_tool": {
"snippet_hash": "5de604f9bb099de3e197a8aa7e002d24",
"snippet_label": "start"
},
"id": "EOCdS-f5jROb"
},
"source": [
"\n",
"\n",
"Перед обучением линейной регрессии вы могли совершать некоторые преобразования над признаками. Какие преобразования стоит совершить перед обучением решающего дерева?\n",
"\n",
"В частности, ответьте и поясните свой ответ на вопрос, имеет ли смысл примененять следующие преобразования:\n",
"* монотонные функции от одного признака;\n",
"* немонотонные функции от одного признака;\n",
"* линейные функции от нескольких признаков;\n",
"* нелинейные функции от нескольких признаков;\n",
"* стандартизация признаков;\n",
"* преобразования категориальных признаков.\n",
"\n",
"Например, вместо/дополнительно с признаком $x_j$ рассматривать признак $f(x_j)$, для указанных выше типов функций."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"ai_eval_tool": {
"snippet_hash": "5de604f9bb099de3e197a8aa7e002d24",
"snippet_label": "end"
}
},
"outputs": [],
"source": [
"..."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "nQb0h-qwTfs_"
},
"source": [
"---\n",
"### Задача 2\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "hq3AoE0lg3js"
},
"source": [
"### 1. Загрузка и предобработка данных.\n",
"### *Профиль физика*"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "cBd1UO8rjROb"
},
"source": [
"\n",
"\n",
"Скачайте [данные](https://www.kaggle.com/datasets/sayansh001/crystal-structure-classification) по классификации кристаллических решеток. Целевой переменной в этой задаче является `Lowest distortion`.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "YwHnpYxFjROb"
},
"source": [
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "RLVdUYkClMdp"
},
"source": [
"Каждое наблюдение описывается 13 столбцами признаков и 1 столбцом класса, который идентифицирует его как кубическую, тетрагональную, ромбическую или ромбоэдрическую структуру. Наборы признаков - различные параметры кристаллической решетки, такие как валентность, ионный радиус, среднее значение электроотрицательности, постоянная решетки, а так же энергия, которая численно равна работе, которую необходимо затратить, чтобы разделить и отделить друг от друга на бесконечное расстояние частицы."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "Cc55SQiqjROb"
},
"outputs": [],
"source": [
"data = pd.read_csv(\"/content/Crystal_structure.csv\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "zg5cgIkZjROb"
},
"source": [
"Сделаем предобработку данных."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "5AUWLt2ujROb"
},
"outputs": [],
"source": [
"# уберем признаки, которые нам не нужны\n",
"data = data.drop([\"In literature\", \"Compound\", \"τ\"], axis=1)\n",
"\n",
"# убираем объекты, для которых неизвестен таргет\n",
"data = data.drop(data[data[\"Lowest distortion\"] == \"-\"].index).reset_index(drop=True)\n",
"\n",
"# закодируем целевую переменную числами\n",
"data['Lowest distortion'] = LabelEncoder().fit_transform(data['Lowest distortion'])\n",
"\n",
"# закодируем категориальные признаки числами\n",
"data['A'] = LabelEncoder().fit_transform(data['A'])\n",
"data['B'] = LabelEncoder().fit_transform(data['B'])\n",
"\n",
"# Заполним пропуски нулями\n",
"for i in data.columns:\n",
" column = data[i]\n",
" for k in range(len(column)):\n",
" if column[k] == '-':\n",
" column[k] = 0\n",
" data[i] = column"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "FwIeBVT-PanB"
},
"source": [
"### *Профиль биология*"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MvTzCZefhh3y"
},
"source": [
"В этом [наборе данных](https://www.kaggle.com/datasets/arezaei81/heartcsv) содержится различная информация о пациентах, включая возраст, пол, артериальное давление, уровень холестерина, электрокардиографические характеристики (ЭКГ) и многое другое. Целевой характеристикой является `target` - наличие у пациента сердечного заболевания.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "LXVhbqOviz_E"
},
"source": [
"\n",
"Информация о наборе данных:\n",
"\n",
"1. **age**: Возраст пациента.\n",
"2. **sex**: Пол пациента (0: женский, 1: мужской).\n",
"3. **cp**: Тип боли в груди.\n",
"4. **trestbps**: Артериальное давление в состоянии покоя.\n",
"5. **chol**: уровень холестерина в сыворотке крови.\n",
"6. **fbs**: Быстрый сахар крови > 120 мг/дл.\n",
"7. **restecg**: Результаты электрокардиографии в состоянии покоя.\n",
"8. **thalach**: Максимальная достигнутая частота сердечных сокращений.\n",
"9. **exang**: Стенокардия, вызванная физической нагрузкой.\n",
"10. **oldpeak**: Депрессия ST, вызванная физической нагрузкой по сравнению с покоем.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "6itI89F9Pgop"
},
"outputs": [],
"source": [
"heart = pd.read_csv('heart.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "U1vHrzSejROc"
},
"source": [
"### 2. Обучение модели\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HHY-6uUejROc"
},
"source": [
"Создайте массив признаков и вектор таргета."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "r7DaAl6TjROc"
},
"outputs": [],
"source": [
"X = <...>\n",
"y = <...>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"ai_eval_tool": {
"snippet_hash": "7b76f2eaef8112a7ca4d80bccfb88090",
"snippet_label": "start"
},
"id": "vYF_xFIomDhz"
},
"outputs": [],
"source": [
"X_train, X_test, y_train, y_test = <...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "q3rHcytTjROc"
},
"source": [
"Обучите модель решающего дерева."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "nXSQIMivjROc"
},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Ug6V5KP_jROc"
},
"source": [
"Сделайте предсказание для тестовой выборки."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "LNSrZMcEjROc",
"vscode": {
"languageId": "plaintext"
}
},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MTa-TaTDjROc"
},
"source": [
"Посчитайте точность предсказания"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "rhnIn8LtjROc"
},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vzj_yL9vjROc"
},
"source": [
"Повторите все шаги для случайного леса. Лес — много похожих, но всё же отличающихся деревьев. Такая модель делает предсказание, усредняя ответы отдельных деревьев. Подробнее мы рассмотрим эту модель в осенней части курса, а пока просто воспользуйтесь готовым классом [RandomForestClassifier](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html). Сравните полученные результаты."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "sxBBCeWfBovL"
},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"ai_eval_tool": {
"snippet_hash": "7b76f2eaef8112a7ca4d80bccfb88090",
"snippet_label": "end"
},
"id": "wQ4XptUxjROd"
},
"source": [
"**Выводы:**"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EH6HvIIDjROd"
},
"source": [
"\n",
"\n",
"## Сложная часть\n",
"---\n",
"### Задача 3\n",
"### 1. Загрузка данных\n",
"### *Профиль физика*\n",
"\n",
"Рассмотрим набор данных NASA , он включает в себя аэродинамические профили NASA-0012 разных размеров при различных параметрах в аэродинамической трубе и углах атаки. Скачайте данные и разделите их на три части — обучающую, валидационную и тестовую в соотношении 3:1:1. Целевой переменной будет scaled-sound-pressure: это звуковое давление в определенной части лопасти, распределение этой величины показано на втором рисунке. Данная задача, конечно, имеет почти аналитическое решение, однако оно занимает довольно много времени и ресурсов. Мы хотим продемострировать возможность использования методов машинного обучения для быстрых и довольно точных численных оценок.\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yTsKantWnrEY"
},
"source": [
""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "qIOoYWXBjROd"
},
"outputs": [],
"source": [
"column_names = ['frequency', 'attack-angle', 'chord-length', 'free-stream-velocity', \"suction-side-displacement-thickness\", \"scaled-sound-pressure\"]\n",
"df = pd.read_csv(\"/content/airfoil_self_noise.dat\", sep='\\t', names=column_names)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "P8YcB39w76TP"
},
"outputs": [],
"source": [
"df = df.rename(columns={'scaled-sound-pressure': 'target'})\n",
"df = df.sample(frac=1).reset_index(drop=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "ULk1Uur3L0XN"
},
"outputs": [],
"source": [
"X = df.drop('target',axis=1)\n",
"y = df[['target']]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "sbIJnNIx8IxC"
},
"outputs": [],
"source": [
"X_1, X_test, y_1, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
"X_train, X_valid, y_train, y_valid = train_test_split(X_1, y_1, test_size=0.2, random_state=42)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HwzR8atbDiY0"
},
"source": [
"### *Профиль биология*\n",
"\n",
"[Данные](https://archive.ics.uci.edu/dataset/1/abalone). Будем предсказывать возраст моллюсков."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "VqCkSIfCDnNf"
},
"source": [
""
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "TZOe9wYXDdUI"
},
"outputs": [],
"source": [
"data = pd.read_csv('abalone.data', names=['Sex', 'Length', 'Diameter', 'Height', 'Whole weight',\n",
" 'Shucked weight', 'Viscera weight', 'Shell weight',\n",
" 'Rings'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "mntMRHPkDvUA"
},
"outputs": [],
"source": [
"data = data.drop('Sex', axis=1)\n",
"X = data.drop('Rings', axis=1)\n",
"y = data['Rings'] + 1.5"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "E2HS_QZyDzdH"
},
"outputs": [],
"source": [
"X_1, X_test, y_1, y_test = train_test_split(X, y, test_size = 0.2, random_state=42)\n",
"X_train, X_valid, y_train, y_valid = train_test_split(X_1, y_1, test_size = 0.2, random_state=42)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Обратите внимание: мы разбили выборку на 3 подмножества: обучающая, валидационая и тестовая. Внимательно следите за указаниями, где и какую подвыборку использовать."
]
},
{
"cell_type": "markdown",
"metadata": {
"ai_eval_tool": {
"snippet_hash": "2d266ec841ddb9ba6809fe22dfbf4b89",
"snippet_label": "start"
},
"id": "nZW6S0igjROd"
},
"source": [
"\n",
"\n",
"### 2. Обучение модели\n",
"\n",
"Обучите решающее дерево глубины 3 и визуализируйте его.\n",
"\n",
"*Рекомендуется сделать скриншот визуализации и прислать его в бот вместе с ноутбуком.*"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "56IJgqnajROd"
},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "mnJKMjAco-rc"
},
"source": [
"Посчитайте выбранную метрику на валидационной выборке (**не на тестовой**)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"ai_eval_tool": {
"snippet_hash": "2d266ec841ddb9ba6809fe22dfbf4b89",
"snippet_label": "end"
},
"id": "Sm2oocpR94Pa"
},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"ai_eval_tool": {
"snippet_hash": "3486f771ea381ccfaae782b06ebc8020",
"snippet_label": "start"
},
"id": "OqkaImkgjROd"
},
"source": [
"\n",
"\n",
"Подберите оптимальное значение максимальной глубины дерева. Для этого обучите решающие деревья с выставленным значением соответствующего гиперпараметра и посчитайте ошибку предсказаний каждого из них на валидационной выборке. Постройте соответствующий график - зависимость ошибки от максимальной глубины дерева. Подробнее про гиперпараметры смотрите в [документации](https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeRegressor.html)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "msf8e5APxb9K"
},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Ibcc9j3Q4Eoj"
},
"source": [
"Аналогичным образом подберите минимальное число объектов, необходимое для того, чтобы узел дерева мог бы расщепиться, зафиксировав при этом подобранное значение максимальной глубины. Для минимального числа объектов в листе и максимального числа признаков, по которым ищется лучшее разбиение в дереве, подберите аналогично, фиксируя лучшие значения гиперпараметров, подобранные на предыдущем шаге."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "pPY-WQKrwxuf"
},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EZEwlbNL-W6J"
},
"source": [
"Обучите вашу лучшую модель и сделайте предсказание для тестовой выборки."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"ai_eval_tool": {
"snippet_hash": "3486f771ea381ccfaae782b06ebc8020",
"snippet_label": "end"
},
"id": "dvFYdzvy9CsO"
},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"ai_eval_tool": {
"snippet_hash": "b68265eef730dbc12b8d7cdf94f97dea",
"snippet_label": "start"
},
"id": "Y3u3Kro359FA"
},
"source": [
"\n",
"\n",
"Теперь вам предлагается проверить результат своей реализации с уже существующей функцией для оптимизации гиперпараметров - `GridSearchCV`. Эта функция помогает перебирать предопределенные гиперпараметры и подгонять вашу модель к тренировочному набору. Сравните полученные гиперпараметры и если они различаются, объясните почему. Для этого вам может понадобиться [документация](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "gwr7LANd-Wlx"
},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "8dXBHZK37Rg3"
},
"source": [
"Посчитатайте метрику на тестовой выборке и взуализируйте деревья при оптимальных гиперпараметрахдля двух оптимальных моделей - вашей и GridSearchCV."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yxkgWV-g-nKz"
},
"source": [
"**Ваша модель**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "ZQAUY2BRCjDb"
},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "fbSCnOiI-uX9"
},
"source": [
"**Лучшая модель по мнению GridSearchCV**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "hFCwa2UI-t31"
},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "oZg4MuZljROe"
},
"source": [
"Решающее дерево позволяет оценить *важность признаков*. Это некоторая величина, зависящая от того,\n",
"* насколько часто тот или иной признак использовался при разбиении листа,\n",
"* и насколько сильно при этом изменился критерий информативности.\n",
"\n",
"У обученной модели значения важности признаков лежат в поле `feature_importances_`. Визуализируйте их на одном графике с помощью `seaborn.barplot` для обеих моделей."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"ai_eval_tool": {
"snippet_hash": "b68265eef730dbc12b8d7cdf94f97dea",
"snippet_label": "end"
},
"id": "GUxBG9QgjROe"
},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"ai_eval_tool": {
"snippet_hash": "91a021082143a548ae35acdba8c46815",
"snippet_label": "start"
},
"id": "vFZxr1TLjROe"
},
"source": [
"\n",
"\n",
"Сделайте выводы. Объясните, согласуется ли логически, почему вес того или иного признака так влияет на целевую переменную."
]
},
{
"cell_type": "markdown",
"metadata": {
"ai_eval_tool": {
"snippet_hash": "91a021082143a548ae35acdba8c46815",
"snippet_label": "end"
},
"id": "KtEBf-kejROe"
},
"source": [
"**Вывод:** <...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"ai_eval_tool": {
"snippet_hash": "13f49c05e0c18821ff968eebb1ee5f94",
"snippet_label": "start"
},
"id": "ZwzcS98-EELI"
},
"source": [
"\n",
"\n",
"### 3. Случайный лес\n",
"\n",
"Обучите [RandomForestRegressor](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html) на 500 деревьев. Остальные параметры оставьте по-умолчанию."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "sI1snY0nEKJK"
},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "fFLwA8L1gbXW"
},
"source": [
"Посчитайте метрику на тестовой выборке."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"ai_eval_tool": {
"snippet_hash": "13f49c05e0c18821ff968eebb1ee5f94",
"snippet_label": "end"
},
"id": "EQf1fB0ZLQif"
},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"ai_eval_tool": {
"snippet_hash": "ebef34c62e62274d2f224d0cb10da2ef",
"snippet_label": "start"
},
"id": "U1blsTUejROf"
},
"source": [
"\n",
"\n",
"Визуализируйте важность признаков, используя поле `feature_importances_`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "2ZNuUHJ9gilF"
},
"outputs": [],
"source": [
"<...>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "JNirCyKajROf"
},
"source": [
"Сделайте выводы."
]
},
{
"cell_type": "markdown",
"metadata": {
"ai_eval_tool": {
"snippet_hash": "ebef34c62e62274d2f224d0cb10da2ef",
"snippet_label": "end"
},
"id": "SZjXPUovjROf"
},
"source": [
"**Вывод:** <...>"
]
}
],
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 0
}