1184 lines
138 KiB
Plaintext
1184 lines
138 KiB
Plaintext
|
{
|
|||
|
"cells": [
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"# Начало лабораторной, ухх...\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Бизнес-цели:\n",
|
|||
|
"\n",
|
|||
|
"1. Повышение безопасности планеты от потенциальных угроз космических объектов.\n",
|
|||
|
"2. Оптимизация исследования космических объектов для использования в коммерческих или исследовательских миссиях."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Цели технического проекта:\n",
|
|||
|
"\n",
|
|||
|
"Для 1-й бизнес-цели: \n",
|
|||
|
"* сбор и подготовка данных: очистка данных от пропусков, выбросов и дубликатов. Преобразование категориальных переменных в числовые. Разделение данных на обучающую и тестовую выборки. \n",
|
|||
|
"* разработка и обучение модели: исследование различных алгоритмов машинного обучения (линейная регрессия, деревья решений, случайный лес и т.д.). Обучение моделей на обучающей выборке. Оценка качества моделей на тестовой выборке с помощью метрик RMSE, MAE и др.\n",
|
|||
|
"* развертывание модели: \n",
|
|||
|
" * Создать веб-приложение или API, которое принимает параметры объекта и прогнозирует, опасен ли он для Земли.\n",
|
|||
|
" * Модель может использоваться в системах мониторинга космических объектов для предоставления оперативных оценок и предупреждений.\n",
|
|||
|
" * Включение автоматической системы оповещения для НАСА и других космических агентств с обновлениями по объектам, представляющим угрозу.\n",
|
|||
|
"\n",
|
|||
|
"Для 2-й бизнес-цели:\n",
|
|||
|
"* сбор и подготовка данных: очистка данных от пропусков, выбросов и дубликатов. Преобразование категориальных переменных в числовые. Разделение данных на обучающую и тестовую выборки. \n",
|
|||
|
"* разработка и обучение модели: исследование различных алгоритмов машинного обучения (линейная регрессия, деревья решений, случайный лес и т.д.). Обучение моделей на обучающей выборке. Оценка качества моделей на тестовой выборке с помощью метрик RMSE, MAE и др.\n",
|
|||
|
"* развертывание модели:\n",
|
|||
|
" * Разработка модели, которая позволяет астрономам и специалистам по космосу загружать данные о новых объектах и получать предсказания о расстоянии их ближайшего сближения с Землей.\n",
|
|||
|
" * Создание системы мониторинга с графическим интерфейсом, отображающим траектории движения объектов и предполагаемые даты и расстояния их ближайших подходов.\n",
|
|||
|
" * Реализация системы оповещений на основе пороговых значений расстояний для идентификации особо опасных сближений."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 1,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Index(['id', 'name', 'est_diameter_min', 'est_diameter_max',\n",
|
|||
|
" 'relative_velocity', 'miss_distance', 'orbiting_body', 'sentry_object',\n",
|
|||
|
" 'absolute_magnitude', 'hazardous'],\n",
|
|||
|
" dtype='object')\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/html": [
|
|||
|
"<div>\n",
|
|||
|
"<style scoped>\n",
|
|||
|
" .dataframe tbody tr th:only-of-type {\n",
|
|||
|
" vertical-align: middle;\n",
|
|||
|
" }\n",
|
|||
|
"\n",
|
|||
|
" .dataframe tbody tr th {\n",
|
|||
|
" vertical-align: top;\n",
|
|||
|
" }\n",
|
|||
|
"\n",
|
|||
|
" .dataframe thead th {\n",
|
|||
|
" text-align: right;\n",
|
|||
|
" }\n",
|
|||
|
"</style>\n",
|
|||
|
"<table border=\"1\" class=\"dataframe\">\n",
|
|||
|
" <thead>\n",
|
|||
|
" <tr style=\"text-align: right;\">\n",
|
|||
|
" <th></th>\n",
|
|||
|
" <th>id</th>\n",
|
|||
|
" <th>name</th>\n",
|
|||
|
" <th>est_diameter_min</th>\n",
|
|||
|
" <th>est_diameter_max</th>\n",
|
|||
|
" <th>relative_velocity</th>\n",
|
|||
|
" <th>miss_distance</th>\n",
|
|||
|
" <th>orbiting_body</th>\n",
|
|||
|
" <th>sentry_object</th>\n",
|
|||
|
" <th>absolute_magnitude</th>\n",
|
|||
|
" <th>hazardous</th>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </thead>\n",
|
|||
|
" <tbody>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>0</th>\n",
|
|||
|
" <td>2162635</td>\n",
|
|||
|
" <td>162635 (2000 SS164)</td>\n",
|
|||
|
" <td>1.198271</td>\n",
|
|||
|
" <td>2.679415</td>\n",
|
|||
|
" <td>13569.249224</td>\n",
|
|||
|
" <td>5.483974e+07</td>\n",
|
|||
|
" <td>Earth</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" <td>16.73</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>1</th>\n",
|
|||
|
" <td>2277475</td>\n",
|
|||
|
" <td>277475 (2005 WK4)</td>\n",
|
|||
|
" <td>0.265800</td>\n",
|
|||
|
" <td>0.594347</td>\n",
|
|||
|
" <td>73588.726663</td>\n",
|
|||
|
" <td>6.143813e+07</td>\n",
|
|||
|
" <td>Earth</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" <td>20.00</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>2</th>\n",
|
|||
|
" <td>2512244</td>\n",
|
|||
|
" <td>512244 (2015 YE18)</td>\n",
|
|||
|
" <td>0.722030</td>\n",
|
|||
|
" <td>1.614507</td>\n",
|
|||
|
" <td>114258.692129</td>\n",
|
|||
|
" <td>4.979872e+07</td>\n",
|
|||
|
" <td>Earth</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" <td>17.83</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>3</th>\n",
|
|||
|
" <td>3596030</td>\n",
|
|||
|
" <td>(2012 BV13)</td>\n",
|
|||
|
" <td>0.096506</td>\n",
|
|||
|
" <td>0.215794</td>\n",
|
|||
|
" <td>24764.303138</td>\n",
|
|||
|
" <td>2.543497e+07</td>\n",
|
|||
|
" <td>Earth</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" <td>22.20</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" <tr>\n",
|
|||
|
" <th>4</th>\n",
|
|||
|
" <td>3667127</td>\n",
|
|||
|
" <td>(2014 GE35)</td>\n",
|
|||
|
" <td>0.255009</td>\n",
|
|||
|
" <td>0.570217</td>\n",
|
|||
|
" <td>42737.733765</td>\n",
|
|||
|
" <td>4.627557e+07</td>\n",
|
|||
|
" <td>Earth</td>\n",
|
|||
|
" <td>False</td>\n",
|
|||
|
" <td>20.09</td>\n",
|
|||
|
" <td>True</td>\n",
|
|||
|
" </tr>\n",
|
|||
|
" </tbody>\n",
|
|||
|
"</table>\n",
|
|||
|
"</div>"
|
|||
|
],
|
|||
|
"text/plain": [
|
|||
|
" id name est_diameter_min est_diameter_max \\\n",
|
|||
|
"0 2162635 162635 (2000 SS164) 1.198271 2.679415 \n",
|
|||
|
"1 2277475 277475 (2005 WK4) 0.265800 0.594347 \n",
|
|||
|
"2 2512244 512244 (2015 YE18) 0.722030 1.614507 \n",
|
|||
|
"3 3596030 (2012 BV13) 0.096506 0.215794 \n",
|
|||
|
"4 3667127 (2014 GE35) 0.255009 0.570217 \n",
|
|||
|
"\n",
|
|||
|
" relative_velocity miss_distance orbiting_body sentry_object \\\n",
|
|||
|
"0 13569.249224 5.483974e+07 Earth False \n",
|
|||
|
"1 73588.726663 6.143813e+07 Earth False \n",
|
|||
|
"2 114258.692129 4.979872e+07 Earth False \n",
|
|||
|
"3 24764.303138 2.543497e+07 Earth False \n",
|
|||
|
"4 42737.733765 4.627557e+07 Earth False \n",
|
|||
|
"\n",
|
|||
|
" absolute_magnitude hazardous \n",
|
|||
|
"0 16.73 False \n",
|
|||
|
"1 20.00 True \n",
|
|||
|
"2 17.83 False \n",
|
|||
|
"3 22.20 False \n",
|
|||
|
"4 20.09 True "
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 1,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import pandas as pd\n",
|
|||
|
"df_subset = pd.read_csv(\".//static//csv//neo.csv\")\n",
|
|||
|
"# Отбор первых 15000 записей\n",
|
|||
|
"df = df_subset.head(15000)\n",
|
|||
|
"print(df.columns)\n",
|
|||
|
"df.head()\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Проверим датасет на пропущенные значения:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 2,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"id 0\n",
|
|||
|
"name 0\n",
|
|||
|
"est_diameter_min 0\n",
|
|||
|
"est_diameter_max 0\n",
|
|||
|
"relative_velocity 0\n",
|
|||
|
"miss_distance 0\n",
|
|||
|
"orbiting_body 0\n",
|
|||
|
"sentry_object 0\n",
|
|||
|
"absolute_magnitude 0\n",
|
|||
|
"hazardous 0\n",
|
|||
|
"dtype: int64\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"id False\n",
|
|||
|
"name False\n",
|
|||
|
"est_diameter_min False\n",
|
|||
|
"est_diameter_max False\n",
|
|||
|
"relative_velocity False\n",
|
|||
|
"miss_distance False\n",
|
|||
|
"orbiting_body False\n",
|
|||
|
"sentry_object False\n",
|
|||
|
"absolute_magnitude False\n",
|
|||
|
"hazardous False\n",
|
|||
|
"dtype: bool"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 2,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"# Процент пропущенных значений признаков\n",
|
|||
|
"for i in df.columns:\n",
|
|||
|
" null_rate = df[i].isnull().sum() / len(df) * 100\n",
|
|||
|
" if null_rate > 0:\n",
|
|||
|
" print(f'{i} Процент пустых значений: %{null_rate:.2f}')\n",
|
|||
|
"\n",
|
|||
|
"# Проверка на пропущенные данные\n",
|
|||
|
"print(df.isnull().sum())\n",
|
|||
|
"\n",
|
|||
|
"df.isnull().any()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Фух, пропущенных значений не имеется \n",
|
|||
|
"\n",
|
|||
|
"Разобьём набор на 3 классических выборки: обучающую, тестовую и контрольную"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 4,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Размер обучающей выборки: (9000, 9)\n",
|
|||
|
"Размер контрольной выборки: (3000, 9)\n",
|
|||
|
"Размер тестовой выборки: (3000, 9)\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"from sklearn.model_selection import train_test_split\n",
|
|||
|
"\n",
|
|||
|
"# Предварительная обработка данных на всякий\n",
|
|||
|
"# Удаление пропусков и дубликатов\n",
|
|||
|
"df = df.dropna()\n",
|
|||
|
"df = df.drop_duplicates()\n",
|
|||
|
"\n",
|
|||
|
"# Разделение данных на признаки (X) и целевую переменную (y)\n",
|
|||
|
"# В данном случае, предположим, что мы хотим предсказать 'hazardous'\n",
|
|||
|
"X = df.drop(columns=['hazardous'])\n",
|
|||
|
"y = df['hazardous']\n",
|
|||
|
"\n",
|
|||
|
"# Разбиение данных на обучающую и тестовую выборки\n",
|
|||
|
"# Сначала разделим на обучающую и тестовую\n",
|
|||
|
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
|
|||
|
"\n",
|
|||
|
"# Затем разделим обучающую выборку на обучающую и контрольную\n",
|
|||
|
"X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.25, random_state=42)\n",
|
|||
|
"\n",
|
|||
|
"# Проверка размеров выборок\n",
|
|||
|
"print(\"Размер обучающей выборки:\", X_train.shape)\n",
|
|||
|
"print(\"Размер контрольной выборки:\", X_val.shape)\n",
|
|||
|
"print(\"Размер тестовой выборки:\", X_test.shape)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"Построим несколько столбчатых диаграмм для визуализации распределения:"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 8,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkQAAAHHCAYAAABeLEexAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABRcUlEQVR4nO3deVwUZeA/8M9yLQjsEgi7oKh4g6ImmpK3kohYmahhJN6mYgYkKN/yzMQj71IrSzTxl0ceKYnihamESuGBSpgYlAJesIhyCPP7o+/Ol3XBkNQF5/N+veb1cp955plnZmfZjzPPzMoEQRBAREREJGFGhu4AERERkaExEBEREZHkMRARERGR5DEQERERkeQxEBEREZHkMRARERGR5DEQERERkeQxEBEREZHkmRi6A0RE9HQUFhbizp07MDExgYODg6G7Q09RQUEB7ty5AysrK7z00kuG7s4LiWeIiCSiZ8+eaN26taG78dSMHDkSjRo1MnQ3DO7gwYN44403YGNjAwsLC9SrVw8ffPCBobtVa8yfPx9lZWUAgLKyMkRGRhq4R/9n27Zt6NOnD6ytrWFlZYUGDRpg0aJFhu7WC4uBqJaKioqCTCYTJ3NzczRv3hyTJ09Gdna2obtHRM/B6tWr4e3tjby8PKxYsQJxcXGIi4vD3LlzDd21WmPDhg347LPP8Ndff2HJkiXYsGGDobsEAJg+fTqGDh0Ka2trfP3114iLi8PBgwcxadIkQ3fthcVLZrXc3Llz4eLigsLCQhw/fhxr1qzBTz/9hAsXLqBOnTqG7h4RPSNpaWkIDQ3F+PHjsXr1ashkMkN3qVaaO3cuAgMDMW3aNMjlcmzatMnQXUJ8fDwWLlyIyMhITJ8+3dDdkQwGolrOx8cHHTp0AACMHTsWdnZ2WLp0KXbv3o1hw4YZuHdE1VdYWAgzMzMYGfFEdkVWrlwJtVqNlStXMgz9B2+//TZ69eqFK1euoFmzZrC3tzd0l/DZZ5/h1VdfZRh6zviX5gXTu3dvAEB6ejoA4M6dO5g6dSrc3d1hZWUFhUIBHx8fnD17Vm/ZwsJCzJ49G82bN4e5uTkcHR0xaNAg/PHHHwCAa9eu6Vyme3Tq2bOn2NbRo0chk8mwZcsW/M///A/UajUsLS3xxhtvIDMzU2/diYmJ6NevH5RKJerUqYMePXrgxIkTFW5jz549K1z/7Nmz9epu2rQJHh4esLCwgK2tLfz9/Stc/+O2rbyysjIsX74crVq1grm5OVQqFd577z3cvXtXp16jRo0wYMAAvfVMnjxZr82K+r548WK9fQoARUVFmDVrFpo2bQq5XA5nZ2eEh4ejqKiown1VkYsXL6JXr16oU6cO6tWrpzcmobi4GDNnzoSHhweUSiUsLS3RrVs3HDlyRKdeZe+DTCZDVFQUgKoff9rj5fvvv8fHH3+MevXqoU6dOtBoNACAXbt2oXXr1jA3N0fr1q2xc+fOCretoKAAH374IZydnSGXy9GiRQt89tlnEARBrKN9r7V9LO/R9yI/Px/BwcFo1KgR5HI5HBwc8Nprr+HXX3997D6ePXu2zv6wtrbGK6+8gl27dj12Oa3ffvsNPj4+UCgUsLKyQp8+ffDLL7/o1Pnll1/g4eGBSZMmQaVSQS6Xo3Xr1vj666/FOoIgoFGjRnjzzTf11lFYWAilUon33ntPp8+PatSoEUaOHCm+rup7WtF+/v333/HWW2/hpZdegoWFBTp27Ki3T7THwvbt23XKraysdPoBVPx5AoDLly9j8ODBsLW1hbm5OTp06IAff/xRp4522MG1a9fg4OCAV199FXZ2dmjTpk2lx0dFy2unOnXqwN3dHevWrdOpN3LkSFhZWT22rUePu19++QWtW7eGv78/bG1tK91XAJCTk4MxY8ZApVLB3Nwcbdu21bvsp30vPvvsMyxbtgwNGzaEhYUFevTogQsXLuj199GxeZs2bYKRkREWLFigU16V/Vyb8AzRC0YbXuzs7AAAV69exa5duzBkyBC4uLggOzsbX375JXr06IGLFy/CyckJAFBaWooBAwbg0KFD8Pf3xwcffID8/HzExcXhwoULaNKkibiOYcOGoX///jrrjYiIqLA/n376KWQyGaZNm4acnBwsX74cXl5eSE5OhoWFBQDg8OHD8PHxgYeHB2bNmgUjIyOsX78evXv3xs8//4xXXnlFr9369euLgx/v3buHiRMnVrjuGTNmYOjQoRg7dixu3ryJVatWoXv37vjtt99gY2Ojt8z48ePRrVs3AMCOHTv0vnjfe+89REVFYdSoUZgyZQrS09Px+eef47fffsOJEydgampa4X54Erm5uRUO7CwrK8Mbb7yB48ePY/z48XB1dcX58+exbNky/P7771X6sr179y769euHQYMGYejQodi+fTumTZsGd3d3+Pj4AAA0Gg3WrVuHYcOGYdy4ccjPz8c333wDb29vnDp1Cu3atQMAfPTRRxg7dqxO+5s2bcL+/fvFO5yqevxpffLJJzAzM8PUqVNRVFQEMzMzHDhwAH5+fnBzc0NkZCRu376NUaNGoX79+jrLCoKAN954A0eOHMGYMWPQrl077N+/H2FhYfj777+xbNmyqr4FogkTJmD79u2YPHky3NzccPv2bRw/fhyXLl1C+/bt/3X57777DgBw69YtrF69GkOGDMGFCxfQokWLSpdJSUlBt27doFAoEB4eDlNTU3z55Zfo2bMn4uPj0alTJwDA7du3cebMGZiYmCAoKAhNmjTBrl27MH78eNy+fRvTp0+HTCbDu+++i0WLFuHOnTuwtbUV17Nnzx5oNBq8++67T7RPnvQ91bpz5w66d++O/Px8TJkyBWq1Gps2bcKgQYMQHR391M5op6SkoEuXLqhXrx6mT58OS0tLbN26FQMHDsQPP/yAt956q9Jlv/vuO5w/f/6J1rds2TLUrVsXGo0G3377LcaNG4dGjRrBy8ur2ttw+/ZtfPXVV7CyssKUKVNgb29f4b568OABevbsiStXrmDy5MlwcXHBtm3bMHLkSOTm5uoNrt+4cSPy8/MRFBSEwsJCrFixAr1798b58+ehUqkq7MuBAwcwevRoTJ48WeeM1X/ZzzWWQLXS+vXrBQDCwYMHhZs3bwqZmZnC999/L9jZ2QkWFhbCX3/9JQiCIBQWFgqlpaU6y6anpwtyuVyYO3euWPbtt98KAISlS5fqrausrExcDoCwePFivTqtWrUSevToIb4+cuSIAECoV6+eoNFoxPKtW7cKAIQVK1aIbTdr1kzw9vYW1yMIgnD//n3BxcVFeO211/TW9eqrrwqtW7cWX9+8eVMAIMyaNUssu3btmmBsbCx8+umnOsueP39eMDEx0StPS0sTAAgbNmwQy2bNmiWU/4j8/PPPAgAhOjpaZ9nY2Fi98oYNGwq+vr56fQ8KChIe/dg92vfw8HDBwcFB8PDw0Nmn3333nWBkZCT8/PPPOsuvXbtWACCcOHFCb33l9ejRQwAgbNy4USwrKioS1Gq14OfnJ5Y9fPhQKCoq0ln27t27gkqlEkaPHl1p+ydOnBBMTU116lT1+NMeL40bNxbu37+vU79du3aCo6OjkJubK5YdOHBAACA0bNhQLNu1a5cAQJg3b57O8oMHDxZkMplw5coVcf0AhPXr1+ttw6PvhVKpFIKCgird5so8euyU7/PWrVsfu+zAgQMFMzMz4Y8//hDLrl+/LlhbWwvdu3cXyxo2bCgAEKKiosSyhw8fCn369BHkcrlw69YtQRAEITU1VQAgrFmzRmc9b7zxhtCoUSPxczdnzhwBgM7nULueESNGiK+r+p4+up8//PBDAYAQGxsr1rl//77g6uoqqNVqobi4WBCE/zsWtm3bprMOS0tLnX4IQsWfpz59+gju7u5CYWGhWFZWVia8+uqrQrNmzcQy7d/Q9PR0cbsaNGgg+Pj4VHp8lPfo8oIgCL///rsAQFi0aJFYNmLECMHS0vKxbT163AEQAAhHjx4VyyraV8uXLxcACJs2bRLrFRcXC56enoKVlZX4t1f7XpT/bhAEQUhMTBQACCEhITr91X6uzpw5I1hZWQl
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkQAAAHHCAYAAABeLEexAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABFYklEQVR4nO3deVwV9eL/8fcBBZHNXNiSi6i5oKiFZeSeC26VqXk1y31J4ZZa6vVbri2U5pKWS7dyKbu55FKaJu5pZImhuXHVML0p4ga4gsL8/vDHXI8HFE0Endfz8ZjHg/nMZz7zmXPOnPNm5jPn2AzDMAQAAGBhTgXdAQAAgIJGIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIA4B5lGIZOnz6t/fv3F3RX7nkEIuA+06hRI1WvXr2gu3HHdO/eXeXKlSvobsBidu3apaVLl5rz8fHxWrFiRcF16Bpnz57VG2+8ocqVK8vFxUWlSpVSpUqVlJCQUNBdu6cRiAq52bNny2azmVOxYsVUqVIlRUVF6fjx4wXdPQC4L509e1b9+vXTTz/9pP379+uVV17Rb7/9VtDd0qlTpxQeHq4pU6aoQ4cOWrZsmWJiYrRhwwb+cfiLihR0B5A3Y8eOVXBwsC5duqTNmzdr+vTp+u6777Rr1y4VL168oLsHAPeV8PBwc5KkSpUqqU+fPgXcK2nIkCE6duyYYmNjVa1atYLuzn2FQHSPaNmypWrXri1J6t27t0qVKqWJEydq2bJl6ty5cwH3Drh9ly5dkouLi5ycOGGNwmXp0qXas2ePLl68qNDQULm4uBRof5KTkzVnzhzNmDGDMJQPeAe6Rz355JOSpMTEREnS6dOn9dprryk0NFQeHh7y8vJSy5YttWPHDod1L126pNGjR6tSpUoqVqyY/P391a5dOx08eFCSdOjQIbvLdNdPjRo1MtvasGGDbDab5s+fr//7v/+Tn5+f3N3d9fTTT+vIkSMO2966datatGghb29vFS9eXA0bNtSWLVty3MdGjRrluP3Ro0c71P3iiy8UFhYmNzc3lSxZUp06dcpx+zfat2tlZWVp8uTJqlatmooVKyZfX1/169dPZ86csatXrlw5tWnTxmE7UVFRDm3m1Pfx48c7PKaSlJ6erlGjRqlixYpydXVVYGCghg4dqvT09Bwfq5zs2bNHjRs3VvHixfXggw9q3LhxdsszMjI0cuRIhYWFydvbW+7u7qpfv77Wr19vVy+358Fms2n27NmS8v76y369fPXVV3rjjTf04IMPqnjx4kpLS5N09QOoevXqKlasmKpXr64lS5bkuG/nz5/Xq6++qsDAQLm6uqpy5cp6//33ZRiGWSf7uc7u47Wufy7Onj2rgQMHqly5cnJ1dZWPj4+aNWum7du33/AxHj16tN3j4enpqccee8xu7MnN1r3W+vXr5erqqpdeesmu/Ndff1XLli3l5eUlDw8PNWnSRD/99JNdnezL69u2bbMrP3nypN3+Xt/nnKYNGzZI+t94tLi4OD3xxBNyc3NTcHCwZsyY4bA/ycnJ6tWrl3x9fVWsWDHVrFlTc+bMydPjlj11797doc7Jkydv+DjmNmbu/fffl81m06FDh+zKp02bpmrVqsnV1VUBAQGKjIxUSkqKQ5vZx2RISIjCwsK0Y8eOHN8rcuvTtftVunRptW7dWrt27bKrZ7PZFBUVlWs72c9p9j788ssvysrKUkZGhmrXrq1ixYqpVKlS6ty5sw4fPuyw/rp161S/fn25u7urRIkSeuaZZ7R37167OtmP8759+9SxY0d5eXmpVKlSeuWVV3Tp0iWH/l573Fy5ckWtWrVSyZIltWfPHru6eX1PLkw4Q3SPyg4vpUqVkiT9/vvvWrp0qZ577jkFBwfr+PHjmjlzpho2bKg9e/YoICBAkpSZmak2bdpo7dq16tSpk1555RWdPXtWMTEx2rVrlypUqGBuo3PnzmrVqpXddocPH55jf95++23ZbDYNGzZMycnJmjx5spo2bar4+Hi5ublJunpwtmzZUmFhYRo1apScnJw0a9YsPfnkk/rhhx/02GOPObRbtmxZRUdHS5LOnTun/v3757jtESNGqGPHjurdu7dOnDihqVOnqkGDBvr1119VokQJh3X69u2r+vXrS5IWL17s8MHbr18/zZ49Wz169NDLL7+sxMREffjhh/r111+1ZcsWFS1aNMfH4VakpKSY+3atrKwsPf3009q8ebP69u2rqlWr6rffftOkSZP0n//8J08ftmfOnFGLFi3Url07dezYUYsWLdKwYcMUGhqqli1bSpLS0tL0ySefqHPnzurTp4/Onj2rTz/9VBEREfr5559Vq1YtSdLrr7+u3r1727X/xRdf6Pvvv5ePj4+kvL/+sr355ptycXHRa6+9pvT0dLm4uGj16tVq3769QkJCFB0drVOnTqlHjx4qW7as3bqGYejpp5/W+vXr1atXL9WqVUvff/+9hgwZoj///FOTJk3K61Ngeumll7Ro0SJFRUUpJCREp06d0ubNm7V371498sgjN13/888/l3Q1fEybNk3PPfecdu3apcqVK+e5Dzt27FDbtm3VqlUrffTRR2b57t27Vb9+fXl5eWno0KEqWrSoZs6cqUaNGmnjxo2qU6fOLe1ru3btVLFiRXN+0KBBqlq1qvr27WuWVa1a1fz7zJkzatWqlTp27KjOnTtrwYIF6t+/v1xcXNSzZ09J0sWLF9WoUSMdOHBAUVFRCg4O1sKFC9W9e3elpKTolVdeybEv2Y9bdj/y2+jRozVmzBg1bdpU/fv3V0JCgqZPn65ffvnlpsf1sGHDbmlbVapU0euvvy7DMHTw4EFNnDhRrVq1yjG45NWpU6ckXf2HKywsTO+++65OnDihKVOmaPPmzfr1119VunRpSdKaNWvUsmVLlS9fXqNHj9bFixc1depU1a1bV9u3b3cYb9SxY0eVK1dO0dHR+umnnzRlyhSdOXNGc+fOzbU/vXv31oYNGxQTE6OQkBCz/HbekwsFA4XarFmzDEnGmjVrjBMnThhHjhwxvvrqK6NUqVKGm5ub8d///tcwDMO4dOmSkZmZabduYmKi4erqaowdO9Ys++yzzwxJxsSJEx22lZWVZa4nyRg/frxDnWrVqhkNGzY059evX29IMh588EEjLS3NLF+wYIEhyfjggw/Mth966CEjIiLC3I5hGMaFCxeM4OBgo1mzZg7beuKJJ4zq1aub8ydOnDAkGaNGjTLLDh06ZDg7Oxtvv/223bq//fabUaRIEYfy/fv3G5KMOXPmmGWjRo0yrj0UfvjhB0OSMW/ePLt1V61a5VAeFBRktG7d2qHvkZGRxvWH1/V9Hzp0qOHj42OEhYXZPaaff/654eTkZPzwww9268+YMcOQZGzZssVhe9dq2LChIcmYO3euWZaenm74+fkZ7du3N8uuXLlipKen26175swZw9fX1+jZs2eu7W/ZssUoWrSoXZ28vv6yXy/ly5c3Lly4YFe/Vq1ahr+/v5GSkmKWrV692pBkBAUFmWVLly41JBlvvfWW3fodOnQwbDabceDAAXP7koxZs2Y57MP1z4W3t7cRGRmZ6z7n5vrXzrV9XrBgQZ7XPXTokOHv72/Uq1fPuHjxol29tm3bGi4uLsbBgwfNsqNHjxqenp5GgwYNzLLs94pffvnFbv2cjptrBQUFGd26dctxWfZracKECWZZenq6UatWLcPHx8fIyMgwDMMwJk+ebEgyvvjiC7NeRkaGER4ebnh4eNi9NxiGYbz++uuGzWa7YT+yH58TJ07k2Ldr+1itWjWH8vHjxxuSjMTERMMwDCM5OdlwcXExmjdvbvda/fDDDw1JxmeffWbX5rXH5HfffWdIMlq0aOHwfOfWp2vXNwzD+L//+z9DkpGcnGyWSbrh6y77Oc3eh+z5kJAQu+Mn+7h69dVXzbLs5+jUqVNm2Y4dOwwnJyeja9euZln24/z000/bbXvAgAGGJGPHjh12/c1+HQ0fPtxwdnY2li5darferb4nFyZcMrtHNG3aVGXKlFFgYKA6deo
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkQAAAHHCAYAAABeLEexAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABDi0lEQVR4nO3deVwV9eL/8TegILK6sRnXcBdFvWIZ131JJK1My6tZqLlUQl211Ov35tpCai5lqXW75ZJ9c01vel1wTyNNisyNq6ZpKbgCiinb/P7wx3w9HFA09KDzej4e83gwn/nMZz5zzgznzcxnDk6GYRgCAACwMGdHdwAAAMDRCEQAAMDyCEQAAMDyCEQAAMDyCEQAAMDyCEQAAMDyCEQAAMDyCEQAAMDyCEQAADhAWlqaDh06pJycHEd3BSIQASigTZs2atCggaO7UWL69u2r+++/39HdwB3y66+/as6cOeb80aNHtWDBAsd16BrZ2dmaNGmSGjVqJDc3N1WoUEG1atXShg0bHN01iEB0z5szZ46cnJzMqVy5cqpdu7ZiY2OVmprq6O4BQIlycnJSTEyM1q5dq6NHj2rEiBH6+uuvHd0tXblyRR06dNDo0aPVpk0bLV68WPHx8dq4caMiIiIc3T1IKuPoDuDOmDBhgkJCQnT58mVt27ZNs2bN0n/+8x/t2bNH5cuXd3T3AKBEVK1aVQMHDlSnTp0kSYGBgdq8ebNjOyVp4sSJ2rFjh9auXas2bdo4ujsoBIHIIqKiotS0aVNJ0oABA1SpUiVNnTpVK1asUK9evRzcO+DWXb58Wa6urnJ25oI3rpo+fbpeeuklnTlzRg0aNJCHh4dD+5OTk6Pp06frlVdeIQyVYvwGsah27dpJko4cOSJJOnfunF599VWFhYXJ09NT3t7eioqK0o8//mi37uXLlzVu3DjVrl1b5cqVU2BgoLp166bDhw9LunrP/trbdAWna38hbN68WU5OTlq4cKH+53/+RwEBAfLw8NBjjz2m48eP2217x44d6tSpk3x8fFS+fHm1bt1a27dvL3Qf27RpU+j2x40bZ1f3s88+U3h4uNzd3VWxYkX17Nmz0O1fb9+ulZeXp+nTp6t+/foqV66c/P399fzzz+v8+fM29e6//3516dLFbjuxsbF2bRbW98mTJ9u9ptLVy/Njx45VzZo15ebmpuDgYI0YMUJXrlwp9LUqzL59+9S2bVuVL19eVatW1aRJk2yWZ2VlacyYMQoPD5ePj488PDzUsmVLbdq0yaZeUe+Dk5OTOdajuMdf/vHyxRdf6LXXXlPVqlVVvnx5ZWRkSJKWL1+uBg0aqFy5cmrQoIG+/PLLQvctMzNTr7zyioKDg+Xm5qY6deronXfekWEYZp389/ra8Sj5Cr4XFy5c0JAhQ3T//ffLzc1Nfn5+evjhh/X9999f9zUeN26czevh5eWlBx98UMuXL7+p9Qqbrr0qUtzz5rffflP//v0VFBQkNzc3hYSE6MUXX1RWVpbd7ffrvZ+StHHjRrVs2VIeHh7y9fXV448/rv3799/y/i9evNg8RytXrqxnnnlGv/32m02da8eL1ahRQ82aNdO5c+fk7u4uJycnHT169Lqva9++fW36U6FCBbVp08bulltR522+/OM0/z1ITk7W+fPn5eXlpdatW6t8+fLy8fFRly5dtGfPHrv1f/jhB0VFRcnb21uenp5q3769vv32W5s6+e/H1q1b9fzzz6tSpUry9vZWdHR0ob9n+vbta1M2aNAglStXzu7q2erVq833zcvLS507d9bevXuv+7rdK7hCZFH54aVSpUqSpJ9//lnLly/XU089pZCQEKWmpurDDz9U69attW/fPgUFBUmScnNz1aVLF23YsEE9e/bU3/72N124cEHx8fHas2ePatSoYW6jV69eeuSRR2y2O2rUqEL78+abb8rJyUkjR47UqVOnNH36dHXo0EFJSUlyd3eXdPUXbFRUlMLDwzV27Fg5Ozvr008/Vbt27fT111/rwQcftGv3vvvuU1xcnCTp4sWLevHFFwvd9ujRo9WjRw8NGDBAp0+f1owZM9SqVSv98MMP8vX1tVtn0KBBatmypSRp2bJldh+8zz//vObMmaN+/frp5Zdf1pEjR/T+++/rhx9+0Pbt21W2bNlCX4ebkZaWZu7btfLy8vTYY49p27ZtGjRokOrVq6effvpJ06ZN03//+98bfthK0vnz59WpUyd169ZNPXr00JIlSzRy5EiFhYUpKipKkpSRkaGPP/5YvXr10sCBA3XhwgX961//UmRkpHbu3KnGjRtLkv7xj39owIABNu1/9tlnWrt2rfz8/CQV//jL9/rrr8vV1VWvvvqqrly5IldXV61bt07du3dXaGio4uLidPbsWfXr10/33XefzbqGYeixxx7Tpk2b1L9/fzVu3Fhr167V8OHD9dtvv2natGnFfQtML7zwgpYsWaLY2FiFhobq7Nmz2rZtm/bv368mTZrccP358+dLks6cOaOZM2fqqaee0p49e1SnTp1C63fr1k01a9Y054cOHap69epp0KBBZlm9evUkFf+8OXHihB588EGlpaVp0KBBqlu3rn777TctWbJEly5dUqtWrcx+SlfPG+nq+5vvL3/5iyRp/fr1ioqKUvXq1TVu3Dj9/vvvmjFjhpo3b67vv//ebpD7jfY//1x64IEHFBcXp9TUVL377rvavn17kedovjFjxujy5ctFv/gFVK5c2TwGfv31V7377rt65JFHdPz48etu53rOnj0r6ervv1q1amn8+PG6fPmyPvjgAzVv3lzfffedateuLUnau3evWrZsKW9vb40YMUJly5bVhx9+qDZt2mjLli1q1qyZTduxsbHy9fXVuHHjlJycrFmzZumXX34xQ1lhxo4dq3/9619auHChzR9T8+fPV58+fRQZGamJEyfq0qVLmjVrllq0aKEffvjh3n84wcA97dNPPzUkGevXrzdOnz5tHD9+3Pjiiy+MSpUqGe7u7savv/5qGIZhXL582cjNzbVZ98iRI4abm5sxYcIEs+yTTz4xJBlTp06121ZeXp65niRj8uTJdnXq169vtG7d2pzftGmTIcmoWrWqkZGRYZYvWrTIkGS8++67Ztu1atUyIiMjze0YhmFcunTJCAkJMR5++GG7bf3lL38xGjRoYM6fPn3akGSMHTvWLDt69Kjh4uJivPnmmzbr/vTTT0aZMmXsyg8ePGhIMubOnWuWjR071rj2VPr6668NScaCBQts1l2zZo1debVq1YzOnTvb9T0mJsYoeHoW7PuIESMMPz8/Izw83OY1nT9/vuHs7Gx8/fXXNuvPnj3bkGRs377dbnvXat26tSHJmDdvnll25coVIyAgwOjevbtZlpOTY1y5csVm3fPnzxv+/v7Gc889V2T727dvN8qWLWtTp7jHX/7xUr16dePSpUs29Rs3bmwEBgYaaWlpZtm6desMSUa1atXMsuXLlxuSjDfeeMNm/SeffNJwcnIyDh06ZG5fkvHpp5/a7UPB98LHx8eIiYkpcp+LUvDYubbPixYtKnY71apVM/r06WNXfjPnTXR0tOHs7Gx89913hbZTUOvWrW2Ou2s1btzY8PPzM86ePWuW/fjjj4azs7MRHR1tlhVn/7Oysgw/Pz+jQYMGxu+//27WW7lypSHJGDNmjFnWp08fm/d6z549hrOzsxEVFWVIMo4cOVJof4ta3zAM46OPPjIkGTt37jTLijpv8+Ufp5s2bbKZr1y5snHmzBmz3n//+1+jbNmyNudV165dDVdXV+Pw4cNm2YkTJwwvLy+jVatWZln+7/bw8HAjKyvLLJ80aZIhyVixYoVNf/OPjw8//NCQZMyYMcOmzxcuXDB8fX2NgQMH2pSnpKQYPj4+duX3Im6ZWUSHDh1UpUoVBQcHq2fPnvL09NSXX36pqlWrSpLc3NzMMRi5ubk6e/asPD09VadOHZvL/kuXLlXlypX10ksv2W2jqL9GiiM6OlpeXl7m/JNPPqnAwED95z//kSQlJSXp4MGDevrpp3X27FmdOXNGZ86cUWZmptq3b6+tW7cqLy/Pps3
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import seaborn as sns\n",
|
|||
|
"import matplotlib.pyplot as plt\n",
|
|||
|
"import matplotlib\n",
|
|||
|
"import matplotlib.ticker as ticker\n",
|
|||
|
"\n",
|
|||
|
"# Визуализация распределения для обучающей выборки\n",
|
|||
|
"sns.countplot(x=y_train)\n",
|
|||
|
"plt.title('Распределение hazardous в обучающей выборке')\n",
|
|||
|
"plt.show()\n",
|
|||
|
"\n",
|
|||
|
"# Визуализация распределения для контрольной выборки\n",
|
|||
|
"sns.countplot(x=y_val)\n",
|
|||
|
"plt.title('Распределение hazardous в контрольной выборке')\n",
|
|||
|
"plt.show()\n",
|
|||
|
"\n",
|
|||
|
"# Визуализация распределения для тестовой выборки\n",
|
|||
|
"sns.countplot(x=y_test)\n",
|
|||
|
"plt.title('Распределение hazardous в тестовой выборке')\n",
|
|||
|
"plt.show()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Конструирование признаков\n",
|
|||
|
"\n",
|
|||
|
"Задача 1: оценить безопасность планеты относительно потенциальных угроз космических объектов. Цель технического проекта: определить объекты с наиболее высоким риском столкновения на основе их ближайших приближений к Земле.\n",
|
|||
|
"\n",
|
|||
|
"Задача 2: оценить возможную оптимизацию исследования космических объектов для использования в коммерческих или исследовательских миссиях. Цель технического проекта: использование системы приоритезации для определения наиболее перспективных объектов для дальнейшего исследования или использования.\n",
|
|||
|
"\n",
|
|||
|
"**Унитарное кодирование**\n",
|
|||
|
"\n",
|
|||
|
"Унитарное кодирование категориальных признаков (one-hot encoding). Преобразуем категориальные признаки в бинарные векторы.\n",
|
|||
|
"\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 12,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
" id name est_diameter_min est_diameter_max \\\n",
|
|||
|
"0 2162635 162635 (2000 SS164) 1.198271 2.679415 \n",
|
|||
|
"1 2277475 277475 (2005 WK4) 0.265800 0.594347 \n",
|
|||
|
"2 2512244 512244 (2015 YE18) 0.722030 1.614507 \n",
|
|||
|
"3 3596030 (2012 BV13) 0.096506 0.215794 \n",
|
|||
|
"4 3667127 (2014 GE35) 0.255009 0.570217 \n",
|
|||
|
"\n",
|
|||
|
" relative_velocity miss_distance absolute_magnitude hazardous \\\n",
|
|||
|
"0 13569.249224 5.483974e+07 16.73 False \n",
|
|||
|
"1 73588.726663 6.143813e+07 20.00 True \n",
|
|||
|
"2 114258.692129 4.979872e+07 17.83 False \n",
|
|||
|
"3 24764.303138 2.543497e+07 22.20 False \n",
|
|||
|
"4 42737.733765 4.627557e+07 20.09 True \n",
|
|||
|
"\n",
|
|||
|
" orbiting_body_Earth sentry_object_False \n",
|
|||
|
"0 True True \n",
|
|||
|
"1 True True \n",
|
|||
|
"2 True True \n",
|
|||
|
"3 True True \n",
|
|||
|
"4 True True \n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"from sklearn.preprocessing import OneHotEncoder\n",
|
|||
|
"\n",
|
|||
|
"# Загрузка данных\n",
|
|||
|
"df = pd.read_csv(\".//static//csv//neo.csv\")\n",
|
|||
|
"\n",
|
|||
|
"# Выбор категориальных признаков, которые нужно закодировать\n",
|
|||
|
"categorical_columns = ['orbiting_body', 'sentry_object']\n",
|
|||
|
"\n",
|
|||
|
"# Применение one-hot encoding с использованием pandas get_dummies()\n",
|
|||
|
"df_encoded = pd.get_dummies(df, columns=categorical_columns)\n",
|
|||
|
"\n",
|
|||
|
"# Проверка результата\n",
|
|||
|
"print(df_encoded.head())"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"**Дискретизация числовых признаков**\n",
|
|||
|
"\n",
|
|||
|
"Процесс преобразования непрерывных числовых значений в дискретные категории или интервалы (бины). Используем переменные, отвечающие за растояние объекта от Земли(miss_distance) и абсолютную звёздную величину объекта, которая отражает его яркость(absolute_magnitude)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 13,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
" miss_distance miss_distance_binned\n",
|
|||
|
"0 5.483974e+07 (44881889.084, 59840270.268]\n",
|
|||
|
"1 6.143813e+07 (59840270.268, 74798651.452]\n",
|
|||
|
"2 4.979872e+07 (44881889.084, 59840270.268]\n",
|
|||
|
"3 2.543497e+07 (14965126.716, 29923507.9]\n",
|
|||
|
"4 4.627557e+07 (44881889.084, 59840270.268]\n",
|
|||
|
" absolute_magnitude absolute_magnitude_binned\n",
|
|||
|
"0 16.73 (9.229000000000001, 21.34]\n",
|
|||
|
"1 20.00 (9.229000000000001, 21.34]\n",
|
|||
|
"2 17.83 (9.229000000000001, 21.34]\n",
|
|||
|
"3 22.20 (21.34, 23.7]\n",
|
|||
|
"4 20.09 (9.229000000000001, 21.34]\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import pandas as pd\n",
|
|||
|
"\n",
|
|||
|
"# Пример: дискретизация признака 'miss_distance' на 5 равных интервалов\n",
|
|||
|
"df['miss_distance_binned'] = pd.cut(df['miss_distance'], bins=5)\n",
|
|||
|
"\n",
|
|||
|
"# Пример: дискретизация признака 'absolute_magnitude' на квантильные интервалы (4 квантиля)\n",
|
|||
|
"df['absolute_magnitude_binned'] = pd.qcut(df['absolute_magnitude'], q=4)\n",
|
|||
|
"\n",
|
|||
|
"# Проверка результата\n",
|
|||
|
"print(df[['miss_distance', 'miss_distance_binned']].head())\n",
|
|||
|
"print(df[['absolute_magnitude', 'absolute_magnitude_binned']].head())"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"**Ручной синтез**\n",
|
|||
|
"\n",
|
|||
|
"Создание новых признаков на основе экспертных знаний и логики предметной области. В нашем случае можно задействовать расстояния объекта от Земли и скорость движения объекта, синтезировав новый признак - \"скорость в сравнении с расстоянием\". Этот признак показывает, что объект может быть более опасным, если его скорость велика, а расстояние до Земли — маленькое."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"# Создание нового признака 'Speed VS Distance'\n",
|
|||
|
"df['high_risk'] = ((df['miss_distance'] < threshold_distance) & (df['relative_velocity'] > threshold_velocity)).astype(int)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"**Масштабирование признаков**\n",
|
|||
|
"\n",
|
|||
|
"Процесс преобразования числовых признаков таким образом, чтобы они имели одинаковый масштаб. Это важно для многих алгоритмов машинного обучения, которые чувствительны к масштабу признаков, таких как линейная регрессия, метод опорных векторов (SVM) и нейронные сети."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"from sklearn.preprocessing import StandardScaler, MinMaxScaler\n",
|
|||
|
"\n",
|
|||
|
"# Пример масштабирования числовых признаков\n",
|
|||
|
"numerical_features = ['miss_distance', 'absolute_magnitude']\n",
|
|||
|
"\n",
|
|||
|
"scaler = StandardScaler()\n",
|
|||
|
"train_data_encoded[numerical_features] = scaler.fit_transform(train_data_encoded[numerical_features])\n",
|
|||
|
"val_data_encoded[numerical_features] = scaler.transform(val_data_encoded[numerical_features])\n",
|
|||
|
"test_data_encoded[numerical_features] = scaler.transform(test_data_encoded[numerical_features])"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Конструирование признаков с применением фреймворка Featuretools"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 16,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Collecting featuretools\n",
|
|||
|
" Downloading featuretools-1.31.0-py3-none-any.whl.metadata (15 kB)\n",
|
|||
|
"Collecting cloudpickle>=1.5.0 (from featuretools)\n",
|
|||
|
" Downloading cloudpickle-3.1.0-py3-none-any.whl.metadata (7.0 kB)\n",
|
|||
|
"Collecting holidays>=0.17 (from featuretools)\n",
|
|||
|
" Downloading holidays-0.59-py3-none-any.whl.metadata (25 kB)\n",
|
|||
|
"Requirement already satisfied: numpy>=1.25.0 in c:\\users\\admin\\studioprojects\\aim-pibd-31-alekseev-i-s\\aimenv\\lib\\site-packages (from featuretools) (2.1.2)\n",
|
|||
|
"Requirement already satisfied: packaging>=20.0 in c:\\users\\admin\\studioprojects\\aim-pibd-31-alekseev-i-s\\aimenv\\lib\\site-packages (from featuretools) (24.1)\n",
|
|||
|
"Requirement already satisfied: pandas>=2.0.0 in c:\\users\\admin\\studioprojects\\aim-pibd-31-alekseev-i-s\\aimenv\\lib\\site-packages (from featuretools) (2.2.3)\n",
|
|||
|
"Requirement already satisfied: psutil>=5.7.0 in c:\\users\\admin\\studioprojects\\aim-pibd-31-alekseev-i-s\\aimenv\\lib\\site-packages (from featuretools) (6.0.0)\n",
|
|||
|
"Requirement already satisfied: scipy>=1.10.0 in c:\\users\\admin\\studioprojects\\aim-pibd-31-alekseev-i-s\\aimenv\\lib\\site-packages (from featuretools) (1.14.1)\n",
|
|||
|
"Collecting tqdm>=4.66.3 (from featuretools)\n",
|
|||
|
" Downloading tqdm-4.66.5-py3-none-any.whl.metadata (57 kB)\n",
|
|||
|
"Collecting woodwork>=0.28.0 (from featuretools)\n",
|
|||
|
" Downloading woodwork-0.31.0-py3-none-any.whl.metadata (10 kB)\n",
|
|||
|
"Requirement already satisfied: python-dateutil in c:\\users\\admin\\studioprojects\\aim-pibd-31-alekseev-i-s\\aimenv\\lib\\site-packages (from holidays>=0.17->featuretools) (2.9.0.post0)\n",
|
|||
|
"Requirement already satisfied: pytz>=2020.1 in c:\\users\\admin\\studioprojects\\aim-pibd-31-alekseev-i-s\\aimenv\\lib\\site-packages (from pandas>=2.0.0->featuretools) (2024.2)\n",
|
|||
|
"Requirement already satisfied: tzdata>=2022.7 in c:\\users\\admin\\studioprojects\\aim-pibd-31-alekseev-i-s\\aimenv\\lib\\site-packages (from pandas>=2.0.0->featuretools) (2024.2)\n",
|
|||
|
"Requirement already satisfied: colorama in c:\\users\\admin\\studioprojects\\aim-pibd-31-alekseev-i-s\\aimenv\\lib\\site-packages (from tqdm>=4.66.3->featuretools) (0.4.6)\n",
|
|||
|
"Requirement already satisfied: scikit-learn>=1.1.0 in c:\\users\\admin\\studioprojects\\aim-pibd-31-alekseev-i-s\\aimenv\\lib\\site-packages (from woodwork>=0.28.0->featuretools) (1.5.2)\n",
|
|||
|
"Collecting importlib-resources>=5.10.0 (from woodwork>=0.28.0->featuretools)\n",
|
|||
|
" Downloading importlib_resources-6.4.5-py3-none-any.whl.metadata (4.0 kB)\n",
|
|||
|
"Requirement already satisfied: six>=1.5 in c:\\users\\admin\\studioprojects\\aim-pibd-31-alekseev-i-s\\aimenv\\lib\\site-packages (from python-dateutil->holidays>=0.17->featuretools) (1.16.0)\n",
|
|||
|
"Requirement already satisfied: joblib>=1.2.0 in c:\\users\\admin\\studioprojects\\aim-pibd-31-alekseev-i-s\\aimenv\\lib\\site-packages (from scikit-learn>=1.1.0->woodwork>=0.28.0->featuretools) (1.4.2)\n",
|
|||
|
"Requirement already satisfied: threadpoolctl>=3.1.0 in c:\\users\\admin\\studioprojects\\aim-pibd-31-alekseev-i-s\\aimenv\\lib\\site-packages (from scikit-learn>=1.1.0->woodwork>=0.28.0->featuretools) (3.5.0)\n",
|
|||
|
"Downloading featuretools-1.31.0-py3-none-any.whl (587 kB)\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ----------------- ---------------------- 262.1/587.9 kB ? eta -:--:--\n",
|
|||
|
" ---------------------------------- ---- 524.3/587.9 kB 50.4 kB/s eta 0:00:02\n",
|
|||
|
" ---------------------------------- ---- 524.3/587.9 kB 50.4 kB/s eta 0:00:02\n",
|
|||
|
" ---------------------------------- ---- 524.3/587.9 kB 50.4 kB/s eta 0:00:02\n",
|
|||
|
" ---------------------------------- ---- 524.3/587.9 kB 50.4 kB/s eta 0:00:02\n",
|
|||
|
" ---------------------------------- ---- 524.3/587.9 kB 50.4 kB/s eta 0:00:02\n",
|
|||
|
" ---------------------------------- ---- 524.3/587.9 kB 50.4 kB/s eta 0:00:02\n",
|
|||
|
" ---------------------------------- ---- 524.3/587.9 kB 50.4 kB/s eta 0:00:02\n",
|
|||
|
" ---------------------------------- ---- 524.3/587.9 kB 50.4 kB/s eta 0:00:02\n",
|
|||
|
" --------------------------------------- 587.9/587.9 kB 47.1 kB/s eta 0:00:00\n",
|
|||
|
"Downloading cloudpickle-3.1.0-py3-none-any.whl (22 kB)\n",
|
|||
|
"Downloading holidays-0.59-py3-none-any.whl (1.1 MB)\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.1 MB ? eta -:--:--\n",
|
|||
|
" --------- ------------------------------ 0.3/1.1 MB ? eta -:--:--\n",
|
|||
|
" --------- ------------------------------ 0.3/1.1 MB ? eta -:--:--\n",
|
|||
|
" --------- ------------------------------ 0.3/1.1 MB ? eta -:--:--\n",
|
|||
|
" --------- ------------------------------ 0.3/1.1 MB ? eta -:--:--\n",
|
|||
|
" --------- ------------------------------ 0.3/1.1 MB ? eta -:--:--\n",
|
|||
|
" --------- ------------------------------ 0.3/1.1 MB ? eta -:--:--\n",
|
|||
|
" --------- ------------------------------ 0.3/1.1 MB ? eta -:--:--\n",
|
|||
|
" --------- ------------------------------ 0.3/1.1 MB ? eta -:--:--\n",
|
|||
|
" --------- ------------------------------ 0.3/1.1 MB ? eta -:--:--\n",
|
|||
|
" --------- ------------------------------ 0.3/1.1 MB ? eta -:--:--\n",
|
|||
|
" --------- ------------------------------ 0.3/1.1 MB ? eta -:--:--\n",
|
|||
|
" --------- ------------------------------ 0.3/1.1 MB ? eta -:--:--\n",
|
|||
|
" --------- ------------------------------ 0.3/1.1 MB ? eta -:--:--\n",
|
|||
|
" --------- ------------------------------ 0.3/1.1 MB ? eta -:--:--\n",
|
|||
|
" --------- ------------------------------ 0.3/1.1 MB ? eta -:--:--\n",
|
|||
|
" --------- ------------------------------ 0.3/1.1 MB ? eta -:--:--\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ------------------ --------------------- 0.5/1.1 MB 80.7 kB/s eta 0:00:08\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ---------------------------- ----------- 0.8/1.1 MB 73.9 kB/s eta 0:00:05\n",
|
|||
|
" ------------------------------------- -- 1.0/1.1 MB 71.3 kB/s eta 0:00:01\n",
|
|||
|
" ------------------------------------- -- 1.0/1.1 MB 71.3 kB/s eta 0:00:01\n",
|
|||
|
" ------------------------------------- -- 1.0/1.1 MB 71.3 kB/s eta 0:00:01\n",
|
|||
|
" ------------------------------------- -- 1.0/1.1 MB 71.3 kB/s eta 0:00:01\n",
|
|||
|
" ---------------------------------------- 1.1/1.1 MB 71.6 kB/s eta 0:00:00\n",
|
|||
|
"Downloading tqdm-4.66.5-py3-none-any.whl (78 kB)\n",
|
|||
|
"Downloading woodwork-0.31.0-py3-none-any.whl (215 kB)\n",
|
|||
|
"Downloading importlib_resources-6.4.5-py3-none-any.whl (36 kB)\n",
|
|||
|
"Installing collected packages: tqdm, importlib-resources, cloudpickle, holidays, woodwork, featuretools\n",
|
|||
|
"Successfully installed cloudpickle-3.1.0 featuretools-1.31.0 holidays-0.59 importlib-resources-6.4.5 tqdm-4.66.5 woodwork-0.31.0\n",
|
|||
|
"Note: you may need to restart the kernel to use updated packages.\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"pip install --upgrade featuretools"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 19,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Collecting setuptoolsNote: you may need to restart the kernel to use updated packages.\n",
|
|||
|
"\n",
|
|||
|
" Downloading setuptools-75.2.0-py3-none-any.whl.metadata (6.9 kB)\n",
|
|||
|
"Downloading setuptools-75.2.0-py3-none-any.whl (1.2 MB)\n",
|
|||
|
" ---------------------------------------- 0.0/1.2 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.2 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.2 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.2 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.2 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.2 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.2 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.2 MB ? eta -:--:--\n",
|
|||
|
" ---------------------------------------- 0.0/1.2 MB ? eta -:--:--\n",
|
|||
|
" -------- ------------------------------- 0.3/1.2 MB ? eta -:--:--\n",
|
|||
|
" -------- ------------------------------- 0.3/1.2 MB ? eta -:--:--\n",
|
|||
|
" -------- ------------------------------- 0.3/1.2 MB ? eta -:--:--\n",
|
|||
|
" -------- ------------------------------- 0.3/1.2 MB ? eta -:--:--\n",
|
|||
|
" -------- ------------------------------- 0.3/1.2 MB ? eta -:--:--\n",
|
|||
|
" -------- ------------------------------- 0.3/1.2 MB ? eta -:--:--\n",
|
|||
|
" -------- ------------------------------- 0.3/1.2 MB ? eta -:--:--\n",
|
|||
|
" -------- ------------------------------- 0.3/1.2 MB ? eta -:--:--\n",
|
|||
|
" -------- ------------------------------- 0.3/1.2 MB ? eta -:--:--\n",
|
|||
|
" -------- ------------------------------- 0.3/1.2 MB ? eta -:--:--\n",
|
|||
|
" -------- ------------------------------- 0.3/1.2 MB ? eta -:--:--\n",
|
|||
|
" -------- ------------------------------- 0.3/1.2 MB ? eta -:--:--\n",
|
|||
|
" -------- ------------------------------- 0.3/1.2 MB ? eta -:--:--\n",
|
|||
|
" ---------------- ----------------------- 0.5/1.2 MB 98.1 kB/s eta 0:00:08\n",
|
|||
|
" ---------------- ----------------------- 0.5/1.2 MB 98.1 kB/s eta 0:00:08\n",
|
|||
|
" ---------------- ----------------------- 0.5/1.2 MB 98.1 kB/s eta 0:00:08\n",
|
|||
|
" ---------------- ----------------------- 0.5/1.2 MB 98.1 kB/s eta 0:00:08\n",
|
|||
|
" ---------------- ----------------------- 0.5/1.2 MB 98.1 kB/s eta 0:00:08\n",
|
|||
|
" ---------------- ----------------------- 0.5/1.2 MB 98.1 kB/s eta 0:00:08\n",
|
|||
|
" ---------------- ----------------------- 0.5/1.2 MB 98.1 kB/s eta 0:00:08\n",
|
|||
|
" ------------------------- -------------- 0.8/1.2 MB 126.2 kB/s eta 0:00:04\n",
|
|||
|
" ------------------------- -------------- 0.8/1.2 MB 126.2 kB/s eta 0:00:04\n",
|
|||
|
" ------------------------- -------------- 0.8/1.2 MB 126.2 kB/s eta 0:00:04\n",
|
|||
|
" ------------------------- -------------- 0.8/1.2 MB 126.2 kB/s eta 0:00:04\n",
|
|||
|
" ------------------------- -------------- 0.8/1.2 MB 126.2 kB/s eta 0:00:04\n",
|
|||
|
" ------------------------- -------------- 0.8/1.2 MB 126.2 kB/s eta 0:00:04\n",
|
|||
|
" ------------------------- -------------- 0.8/1.2 MB 126.2 kB/s eta 0:00:04\n",
|
|||
|
" ------------------------- -------------- 0.8/1.2 MB 126.2 kB/s eta 0:00:04\n",
|
|||
|
" ------------------------- -------------- 0.8/1.2 MB 126.2 kB/s eta 0:00:04\n",
|
|||
|
" --------------------------------- ------ 1.0/1.2 MB 126.8 kB/s eta 0:00:02\n",
|
|||
|
" --------------------------------- ------ 1.0/1.2 MB 126.8 kB/s eta 0:00:02\n",
|
|||
|
" --------------------------------- ------ 1.0/1.2 MB 126.8 kB/s eta 0:00:02\n",
|
|||
|
" --------------------------------- ------ 1.0/1.2 MB 126.8 kB/s eta 0:00:02\n",
|
|||
|
" --------------------------------- ------ 1.0/1.2 MB 126.8 kB/s eta 0:00:02\n",
|
|||
|
" --------------------------------- ------ 1.0/1.2 MB 126.8 kB/s eta 0:00:02\n",
|
|||
|
" --------------------------------- ------ 1.0/1.2 MB 126.8 kB/s eta 0:00:02\n",
|
|||
|
" ---------------------------------------- 1.2/1.2 MB 130.3 kB/s eta 0:00:00\n",
|
|||
|
"Installing collected packages: setuptools\n",
|
|||
|
"Successfully installed setuptools-75.2.0\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"pip install --upgrade setuptools"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 22,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"c:\\Users\\Admin\\StudioProjects\\AIM-PIbd-31-Alekseev-I-S\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n",
|
|||
|
" pd.to_datetime(\n",
|
|||
|
"c:\\Users\\Admin\\StudioProjects\\AIM-PIbd-31-Alekseev-I-S\\aimenv\\Lib\\site-packages\\woodwork\\type_sys\\utils.py:33: UserWarning: Could not infer format, so each element will be parsed individually, falling back to `dateutil`. To ensure parsing is consistent and as-expected, please specify a format.\n",
|
|||
|
" pd.to_datetime(\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
" est_diameter_min est_diameter_max relative_velocity miss_distance \\\n",
|
|||
|
"id \n",
|
|||
|
"1 1.198271 2.679415 13569.249224 5.483974e+07 \n",
|
|||
|
"2 0.265800 0.594347 73588.726663 6.143813e+07 \n",
|
|||
|
"3 0.722030 1.614507 114258.692129 4.979872e+07 \n",
|
|||
|
"4 0.096506 0.215794 24764.303138 2.543497e+07 \n",
|
|||
|
"5 0.255009 0.570217 42737.733765 4.627557e+07 \n",
|
|||
|
"\n",
|
|||
|
" orbiting_body sentry_object absolute_magnitude hazardous \n",
|
|||
|
"id \n",
|
|||
|
"1 Earth False 16.73 False \n",
|
|||
|
"2 Earth False 20.00 True \n",
|
|||
|
"3 Earth False 17.83 False \n",
|
|||
|
"4 Earth False 22.20 False \n",
|
|||
|
"5 Earth False 20.09 True \n",
|
|||
|
" est_diameter_min est_diameter_max relative_velocity miss_distance \\\n",
|
|||
|
"id \n",
|
|||
|
"17465 0.265800 0.594347 6639.199305 7.248720e+07 \n",
|
|||
|
"10057 0.023150 0.051765 66065.475247 2.182677e+07 \n",
|
|||
|
"6905 0.148784 0.332690 35092.567329 6.261058e+07 \n",
|
|||
|
"40989 0.007321 0.016370 24301.494107 2.765938e+06 \n",
|
|||
|
"23499 0.044112 0.098637 33502.608133 7.025798e+07 \n",
|
|||
|
"\n",
|
|||
|
" orbiting_body sentry_object absolute_magnitude hazardous \n",
|
|||
|
"id \n",
|
|||
|
"17465 Earth False 20.00 False \n",
|
|||
|
"10057 Earth False 25.30 False \n",
|
|||
|
"6905 Earth False 21.26 False \n",
|
|||
|
"40989 Earth False 27.80 False \n",
|
|||
|
"23499 Earth False 23.90 False \n",
|
|||
|
" est_diameter_min est_diameter_max relative_velocity miss_distance \\\n",
|
|||
|
"id \n",
|
|||
|
"66148 0.020163 0.045086 24899.946486 7.427192e+06 \n",
|
|||
|
"68694 0.175612 0.392681 67322.863166 3.526971e+07 \n",
|
|||
|
"17013 0.031809 0.071128 20216.336390 5.832689e+07 \n",
|
|||
|
"69199 0.007321 0.016370 40616.528788 2.591562e+07 \n",
|
|||
|
"45632 0.199781 0.446725 86281.198262 6.763452e+07 \n",
|
|||
|
"\n",
|
|||
|
" orbiting_body sentry_object absolute_magnitude hazardous \n",
|
|||
|
"id \n",
|
|||
|
"66148 Earth False 25.60 False \n",
|
|||
|
"68694 Earth False 20.90 True \n",
|
|||
|
"17013 Earth False 24.61 False \n",
|
|||
|
"69199 Earth False 27.80 False \n",
|
|||
|
"45632 Earth False 20.62 True \n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import pandas as pd\n",
|
|||
|
"import featuretools as ft\n",
|
|||
|
"from sklearn.model_selection import train_test_split\n",
|
|||
|
"\n",
|
|||
|
"# Загрузка данных\n",
|
|||
|
"df = pd.read_csv(\".//static//csv//neo.csv\")\n",
|
|||
|
"\n",
|
|||
|
"# Создание уникального идентификатора для каждой строки\n",
|
|||
|
"df['id'] = range(1, len(df) + 1)\n",
|
|||
|
"\n",
|
|||
|
"# Предобработка данных (например, кодирование категориальных признаков, удаление дубликатов)\n",
|
|||
|
"# Удаление дубликатов по всем столбцам\n",
|
|||
|
"df = df.drop_duplicates()\n",
|
|||
|
"\n",
|
|||
|
"# Создание EntitySet\n",
|
|||
|
"es = ft.EntitySet(id='objects_data')\n",
|
|||
|
"\n",
|
|||
|
"# Добавление датафрейма с объектами\n",
|
|||
|
"es = es.add_dataframe(\n",
|
|||
|
" dataframe_name='objects',\n",
|
|||
|
" dataframe=df,\n",
|
|||
|
" index='id'\n",
|
|||
|
")\n",
|
|||
|
"\n",
|
|||
|
"# Генерация признаков с помощью глубокой синтезы признаков\n",
|
|||
|
"feature_matrix, feature_defs = ft.dfs(entityset=es, target_dataframe_name='objects', max_depth=1)\n",
|
|||
|
"\n",
|
|||
|
"# Выводим первые 5 строк сгенерированного набора признаков\n",
|
|||
|
"print(feature_matrix.head())\n",
|
|||
|
"\n",
|
|||
|
"# Разделение данных на обучающую и тестовую выборки\n",
|
|||
|
"train_data, test_data = train_test_split(df, test_size=0.3, random_state=42)\n",
|
|||
|
"\n",
|
|||
|
"# Разделение оставшейся части на валидационную и тестовую выборки\n",
|
|||
|
"val_data, test_data = train_test_split(test_data, test_size=0.5, random_state=42)\n",
|
|||
|
"\n",
|
|||
|
"# Преобразование признаков для контрольной и тестовой выборок\n",
|
|||
|
"val_feature_matrix = ft.calculate_feature_matrix(features=feature_defs, entityset=es, instance_ids=val_data['id'])\n",
|
|||
|
"test_feature_matrix = ft.calculate_feature_matrix(features=feature_defs, entityset=es, instance_ids=test_data['id'])\n",
|
|||
|
"\n",
|
|||
|
"# Вывод первых 5 строк сгенерированных признаков для валидационной и тестовой выборок\n",
|
|||
|
"print(val_feature_matrix.head())\n",
|
|||
|
"print(test_feature_matrix.head())"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Оценка качества каждого набора признаков\n",
|
|||
|
"\n",
|
|||
|
"Представим основные оценки качества наборов признаков: \n",
|
|||
|
"\n",
|
|||
|
"* Предсказательная способность Метрики: RMSE, MAE, R²\n",
|
|||
|
"\n",
|
|||
|
" Методы: Обучение модели на обучающей выборке и оценка на контрольной и тестовой выборках.\n",
|
|||
|
"\n",
|
|||
|
"* Скорость вычисления \n",
|
|||
|
"\n",
|
|||
|
" Методы: Измерение времени выполнения генерации признаков и обучения модели.\n",
|
|||
|
"\n",
|
|||
|
"* Надежность \n",
|
|||
|
"\n",
|
|||
|
" Методы: Кросс-валидация, анализ чувствительности модели к изменениям в данных.\n",
|
|||
|
"\n",
|
|||
|
"* Корреляция \n",
|
|||
|
"\n",
|
|||
|
" Методы: Анализ корреляционной матрицы признаков, удаление мультиколлинеарных признаков.\n",
|
|||
|
"\n",
|
|||
|
"* Цельность \n",
|
|||
|
"\n",
|
|||
|
" Методы: Проверка логической связи между признаками и целевой переменной, интерпретация результатов модели."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 27,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Время обучения модели: 0.02 секунд\n",
|
|||
|
"Среднеквадратичная ошибка: 0.07\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import time\n",
|
|||
|
"from sklearn.model_selection import train_test_split\n",
|
|||
|
"from sklearn.linear_model import LinearRegression\n",
|
|||
|
"from sklearn.metrics import mean_squared_error\n",
|
|||
|
"\n",
|
|||
|
"# Разделение данных на обучающую и валидационную выборки. Удаляем целевую переменную\n",
|
|||
|
"X = feature_matrix.drop('hazardous', axis=1)\n",
|
|||
|
"y = feature_matrix['hazardous']\n",
|
|||
|
"\n",
|
|||
|
"# One-hot encoding для категориальных переменных (преобразование категориальных объектов в числовые)\n",
|
|||
|
"X = pd.get_dummies(X, drop_first=True)\n",
|
|||
|
"\n",
|
|||
|
"# Проверяем, есть ли пропущенные значения, и заполняем их медианой или другим подходящим значением\n",
|
|||
|
"X.fillna(X.median(), inplace=True)\n",
|
|||
|
"\n",
|
|||
|
"X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\n",
|
|||
|
"\n",
|
|||
|
"# Обучение модели\n",
|
|||
|
"model = LinearRegression()\n",
|
|||
|
"\n",
|
|||
|
"# Начинаем отсчет времени\n",
|
|||
|
"start_time = time.time()\n",
|
|||
|
"model.fit(X_train, y_train)\n",
|
|||
|
"\n",
|
|||
|
"# Время обучения модели\n",
|
|||
|
"train_time = time.time() - start_time\n",
|
|||
|
"\n",
|
|||
|
"# Предсказания и оценка модели и вычисляем среднеквадратичную ошибку\n",
|
|||
|
"predictions = model.predict(X_val)\n",
|
|||
|
"mse = mean_squared_error(y_val, predictions)\n",
|
|||
|
"\n",
|
|||
|
"print(f'Время обучения модели: {train_time:.2f} секунд')\n",
|
|||
|
"print(f'Среднеквадратичная ошибка: {mse:.2f}')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 29,
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"c:\\Users\\Admin\\StudioProjects\\AIM-PIbd-31-Alekseev-I-S\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n",
|
|||
|
" warnings.warn(\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"\n",
|
|||
|
"RMSE: 0.2413462854539548\n",
|
|||
|
"R²: 0.3235665248509211\n",
|
|||
|
"MAE: 0.1107915015411713 \n",
|
|||
|
"\n",
|
|||
|
"Кросс-валидация RMSE: 0.24639371360520584 \n",
|
|||
|
"\n",
|
|||
|
"Train RMSE: 0.09113402717915829\n",
|
|||
|
"Train R²: 0.9059198959348872\n",
|
|||
|
"Train MAE: 0.04106869598722959\n",
|
|||
|
"\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"c:\\Users\\Admin\\StudioProjects\\AIM-PIbd-31-Alekseev-I-S\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n",
|
|||
|
" warnings.warn(\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"from sklearn.ensemble import RandomForestRegressor\n",
|
|||
|
"from sklearn.metrics import r2_score, mean_absolute_error\n",
|
|||
|
"from sklearn.model_selection import cross_val_score\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"# Удаление строк с NaN\n",
|
|||
|
"feature_matrix = feature_matrix.dropna()\n",
|
|||
|
"val_feature_matrix = val_feature_matrix.dropna()\n",
|
|||
|
"test_feature_matrix = test_feature_matrix.dropna()\n",
|
|||
|
"\n",
|
|||
|
"# Разделение данных на обучающую и тестовую выборки\n",
|
|||
|
"X_train = feature_matrix.drop('hazardous', axis=1)\n",
|
|||
|
"y_train = feature_matrix['hazardous']\n",
|
|||
|
"X_val = val_feature_matrix.drop('hazardous', axis=1)\n",
|
|||
|
"y_val = val_feature_matrix['hazardous']\n",
|
|||
|
"X_test = test_feature_matrix.drop('hazardous', axis=1)\n",
|
|||
|
"y_test = test_feature_matrix['hazardous']\n",
|
|||
|
"\n",
|
|||
|
"X_test = X_test.reindex(columns=X_train.columns, fill_value=0) \n",
|
|||
|
"\n",
|
|||
|
"# Кодирования категориальных переменных с использованием одноразового кодирования\n",
|
|||
|
"X = pd.get_dummies(X, drop_first=True)\n",
|
|||
|
"\n",
|
|||
|
"# Разобьём тренировочный тест и примерку модели\n",
|
|||
|
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
|
|||
|
"\n",
|
|||
|
"# Выбор модели\n",
|
|||
|
"model = RandomForestRegressor(random_state=42)\n",
|
|||
|
"\n",
|
|||
|
"# Обучение модели\n",
|
|||
|
"model.fit(X_train, y_train)\n",
|
|||
|
"\n",
|
|||
|
"# Предсказание и оценка\n",
|
|||
|
"y_pred = model.predict(X_test)\n",
|
|||
|
"\n",
|
|||
|
"rmse = mean_squared_error(y_test, y_pred, squared=False)\n",
|
|||
|
"r2 = r2_score(y_test, y_pred)\n",
|
|||
|
"mae = mean_absolute_error(y_test, y_pred)\n",
|
|||
|
"\n",
|
|||
|
"print()\n",
|
|||
|
"print(f\"RMSE: {rmse}\")\n",
|
|||
|
"print(f\"R²: {r2}\")\n",
|
|||
|
"print(f\"MAE: {mae} \\n\")\n",
|
|||
|
"\n",
|
|||
|
"# Кросс-валидация\n",
|
|||
|
"scores = cross_val_score(model, X_train, y_train, cv=5, scoring='neg_mean_squared_error')\n",
|
|||
|
"rmse_cv = (-scores.mean())**0.5\n",
|
|||
|
"print(f\"Кросс-валидация RMSE: {rmse_cv} \\n\")\n",
|
|||
|
"\n",
|
|||
|
"# Анализ важности признаков\n",
|
|||
|
"feature_importances = model.feature_importances_\n",
|
|||
|
"feature_names = X_train.columns\n",
|
|||
|
"\n",
|
|||
|
"# Проверка на переобучение\n",
|
|||
|
"y_train_pred = model.predict(X_train)\n",
|
|||
|
"\n",
|
|||
|
"rmse_train = mean_squared_error(y_train, y_train_pred, squared=False)\n",
|
|||
|
"r2_train = r2_score(y_train, y_train_pred)\n",
|
|||
|
"mae_train = mean_absolute_error(y_train, y_train_pred)\n",
|
|||
|
"\n",
|
|||
|
"print(f\"Train RMSE: {rmse_train}\")\n",
|
|||
|
"print(f\"Train R²: {r2_train}\")\n",
|
|||
|
"print(f\"Train MAE: {mae_train}\")\n",
|
|||
|
"print()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"#### Выводы:\n",
|
|||
|
"\n",
|
|||
|
"Выбранная модель, а именно Модель случайного леса, показала неплохие результаты прогнозирования потенциальной опасности различных объектов. Метрики качества и кросс-валидация позволяют предположить, что модель не сильно переобучена и может быть использована для практических целей.\n",
|
|||
|
"\n",
|
|||
|
"* Точность предсказаний: Модель демонстрирует довольно неплохой(хотя мог бы быть и получше) R² (0.3236) на обучающей выборке и R² (0.9060), что указывает на приемлемую точность предсказания модели. Значения RMSE и MAE не высоки (0.09113 и 0.04106), что свидетельствует о том, что модель достаточно точно предсказывает значения.\n",
|
|||
|
"\n",
|
|||
|
"* Переобучение: Разница между RMSE на обучающей и тестовой выборках незначительна, что указывает на то, что модель не склонна к переобучению. Однако в будущем стоит следить за этой метрикой при добавлении новых признаков или усложнении модели, чтобы избежать излишней подгонки под тренировочные данные. Также стоит быть осторожным и продолжать мониторинг этого показателя. R² на обучающей выборке ниже, чем на тестовой - еще один признак того, что модель не склонна к прееобучению\n",
|
|||
|
"\n",
|
|||
|
"* Кросс-валидация: При кросс-валидации наблюдается небольшое увеличение ошибки RMSE по сравнению с тестовой выборкой (рост на 2-3%). Это может указывать на небольшую нестабильность модели при использовании разных подвыборок данных."
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"metadata": {
|
|||
|
"kernelspec": {
|
|||
|
"display_name": "aimenv",
|
|||
|
"language": "python",
|
|||
|
"name": "python3"
|
|||
|
},
|
|||
|
"language_info": {
|
|||
|
"codemirror_mode": {
|
|||
|
"name": "ipython",
|
|||
|
"version": 3
|
|||
|
},
|
|||
|
"file_extension": ".py",
|
|||
|
"mimetype": "text/x-python",
|
|||
|
"name": "python",
|
|||
|
"nbconvert_exporter": "python",
|
|||
|
"pygments_lexer": "ipython3",
|
|||
|
"version": "3.12.6"
|
|||
|
}
|
|||
|
},
|
|||
|
"nbformat": 4,
|
|||
|
"nbformat_minor": 2
|
|||
|
}
|