{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "^C\n",
      "Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\n",
      "Requirement already satisfied: pandas in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (1.5.1)\n",
      "Collecting pandas\n",
      "  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/69/a6/81d5dc9a612cf0c1810c2ebc4f2afddb900382276522b18d128213faeae3/pandas-2.2.2-cp310-cp310-win_amd64.whl (11.6 MB)\n",
      "     ---------------------------------------- 11.6/11.6 MB 5.2 MB/s eta 0:00:00\n",
      "Requirement already satisfied: numpy>=1.22.4 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from pandas) (1.22.4)\n",
      "Requirement already satisfied: python-dateutil>=2.8.2 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from pandas) (2.8.2)\n",
      "Requirement already satisfied: pytz>=2020.1 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from pandas) (2022.6)\n",
      "Collecting tzdata>=2022.7 (from pandas)\n",
      "  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/65/58/f9c9e6be752e9fcb8b6a0ee9fb87e6e7a1f6bcab2cdc73f02bb7ba91ada0/tzdata-2024.1-py2.py3-none-any.whl (345 kB)\n",
      "     -------------------------------------- 345.4/345.4 kB 7.1 MB/s eta 0:00:00\n",
      "Requirement already satisfied: six>=1.5 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from python-dateutil>=2.8.2->pandas) (1.16.0)\n",
      "Installing collected packages: tzdata, pandas\n",
      "  Attempting uninstall: pandas\n",
      "    Found existing installation: pandas 1.5.1\n",
      "    Uninstalling pandas-1.5.1:\n",
      "      Successfully uninstalled pandas-1.5.1\n",
      "Successfully installed pandas-2.2.2 tzdata-2024.1\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[notice] A new release of pip is available: 23.1 -> 24.0\n",
      "[notice] To update, run: C:\\Users\\zw\\AppData\\Local\\Microsoft\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\python.exe -m pip install --upgrade pip\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\n",
      "Requirement already satisfied: numpy in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (1.22.4)\n",
      "Collecting numpy\n",
      "  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/19/77/538f202862b9183f54108557bfda67e17603fc560c384559e769321c9d92/numpy-1.26.4-cp310-cp310-win_amd64.whl (15.8 MB)\n",
      "     --------------------------------------- 15.8/15.8 MB 13.6 MB/s eta 0:00:00\n",
      "Installing collected packages: numpy\n",
      "  Attempting uninstall: numpy\n",
      "    Found existing installation: numpy 1.22.4\n",
      "    Uninstalling numpy-1.22.4:\n",
      "      Successfully uninstalled numpy-1.22.4\n",
      "Successfully installed numpy-1.26.4\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n",
      "scipy 1.9.3 requires numpy<1.26.0,>=1.18.5, but you have numpy 1.26.4 which is incompatible.\n",
      "\n",
      "[notice] A new release of pip is available: 23.1 -> 24.0\n",
      "[notice] To update, run: C:\\Users\\zw\\AppData\\Local\\Microsoft\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\python.exe -m pip install --upgrade pip\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\n",
      "Requirement already satisfied: matplotlib in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (3.8.0)\n",
      "Collecting matplotlib\n",
      "  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/62/5a/a5108ae3db37f35f8a2be8a57d62da327af239214c9661464ce09ee32d7d/matplotlib-3.8.4-cp310-cp310-win_amd64.whl (7.7 MB)\n",
      "     ---------------------------------------- 7.7/7.7 MB 8.4 MB/s eta 0:00:00\n",
      "Requirement already satisfied: contourpy>=1.0.1 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from matplotlib) (1.1.1)\n",
      "Requirement already satisfied: cycler>=0.10 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from matplotlib) (0.11.0)\n",
      "Requirement already satisfied: fonttools>=4.22.0 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from matplotlib) (4.33.3)\n",
      "Requirement already satisfied: kiwisolver>=1.3.1 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from matplotlib) (1.4.5)\n",
      "Requirement already satisfied: numpy>=1.21 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from matplotlib) (1.26.4)\n",
      "Requirement already satisfied: packaging>=20.0 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from matplotlib) (23.1)\n",
      "Requirement already satisfied: pillow>=8 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from matplotlib) (9.3.0)\n",
      "Requirement already satisfied: pyparsing>=2.3.1 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from matplotlib) (3.0.9)\n",
      "Requirement already satisfied: python-dateutil>=2.7 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from matplotlib) (2.8.2)\n",
      "Requirement already satisfied: six>=1.5 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)\n",
      "Installing collected packages: matplotlib\n",
      "  Attempting uninstall: matplotlib\n",
      "    Found existing installation: matplotlib 3.8.0\n",
      "    Uninstalling matplotlib-3.8.0:\n",
      "      Successfully uninstalled matplotlib-3.8.0\n",
      "Successfully installed matplotlib-3.8.4\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[notice] A new release of pip is available: 23.1 -> 24.0\n",
      "[notice] To update, run: C:\\Users\\zw\\AppData\\Local\\Microsoft\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\python.exe -m pip install --upgrade pip\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple\n",
      "Requirement already satisfied: scikit-learn in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (1.3.1)\n",
      "Collecting scikit-learn\n",
      "  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/54/43/40a4ae4b05b00cd532fe77fdd1629dd5355776d0977a7e3b8890bec309a9/scikit_learn-1.4.2-cp310-cp310-win_amd64.whl (10.6 MB)\n",
      "     ---------------------------------------- 10.6/10.6 MB 9.5 MB/s eta 0:00:00\n",
      "Requirement already satisfied: numpy>=1.19.5 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from scikit-learn) (1.26.4)\n",
      "Requirement already satisfied: scipy>=1.6.0 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from scikit-learn) (1.9.3)\n",
      "Requirement already satisfied: joblib>=1.2.0 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from scikit-learn) (1.2.0)\n",
      "Requirement already satisfied: threadpoolctl>=2.0.0 in c:\\users\\zw\\appdata\\local\\packages\\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\\localcache\\local-packages\\python310\\site-packages (from scikit-learn) (3.2.0)\n",
      "Collecting numpy>=1.19.5 (from scikit-learn)\n",
      "  Downloading https://pypi.tuna.tsinghua.edu.cn/packages/b7/db/4d37359e2c9cf8bf071c08b8a6f7374648a5ab2e76e2e22e3b808f81d507/numpy-1.25.2-cp310-cp310-win_amd64.whl (15.6 MB)\n",
      "     ---------------------------------------- 15.6/15.6 MB 8.4 MB/s eta 0:00:00\n",
      "Installing collected packages: numpy, scikit-learn\n",
      "  Attempting uninstall: numpy\n",
      "    Found existing installation: numpy 1.26.4\n",
      "    Uninstalling numpy-1.26.4:\n",
      "      Successfully uninstalled numpy-1.26.4\n",
      "  Attempting uninstall: scikit-learn\n",
      "    Found existing installation: scikit-learn 1.3.1\n",
      "    Uninstalling scikit-learn-1.3.1:\n",
      "      Successfully uninstalled scikit-learn-1.3.1\n",
      "Successfully installed numpy-1.25.2 scikit-learn-1.4.2\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n",
      "[notice] A new release of pip is available: 23.1 -> 24.0\n",
      "[notice] To update, run: C:\\Users\\zw\\AppData\\Local\\Microsoft\\WindowsApps\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\python.exe -m pip install --upgrade pip\n"
     ]
    }
   ],
   "source": [
    "# 安装包 （使用清华镜像）\n",
    "!pip install -U -i  https://pypi.tuna.tsinghua.edu.cn/simple pandas\n",
    "!pip install -U -i  https://pypi.tuna.tsinghua.edu.cn/simple numpy\n",
    "!pip install -U -i  https://pypi.tuna.tsinghua.edu.cn/simple matplotlib\n",
    "!pip install -U -i  https://pypi.tuna.tsinghua.edu.cn/simple scikit-learn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 提前导入要用到的包\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "from sklearn.tree import DecisionTreeClassifier"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 一、赛事背景\n",
    "\n",
    "截至2022年，中国糖尿病患者近1.3亿。中国糖尿病患病原因受生活方式、老龄化、城市化、家族遗传等多种因素影响。同时，糖尿病患者趋向年轻化。\n",
    "\n",
    "糖尿病可导致心血管、肾脏、脑血管并发症的发生。因此，准确诊断出患有糖尿病个体具有非常重要的临床意义。糖尿病早期遗传风险预测将有助于预防糖尿病的发生。\n",
    "\n",
    "根据《中国2型糖尿病防治指南（2017年版）》，糖尿病的诊断标准是\n",
    "- ```具有典型糖尿病症状（烦渴多饮、多尿、多食、不明原因的体重下降）```\n",
    "\n",
    "- 且```随机静脉血浆葡萄糖≥11.1mmol/L```或```空腹静脉血浆葡萄糖≥7.0mmol/L```或```口服葡萄糖耐量试验（OGTT）负荷后2h血浆葡萄糖≥11.1mmol/L```。\n",
    "\n",
    "在这次比赛中，您需要通过训练数据集构建糖尿病遗传风险预测模型，然后预测出测试数据集中个体是否患有糖尿病，和我们一起帮助糖尿病患者解决这“甜蜜的烦恼”。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 二、赛事任务\n",
    "#### 2.1 数据集字段说明\n",
    "- 编号：标识个体身份的数字；\n",
    "\n",
    "- 性别：1表示男性，0表示女性；\n",
    "\n",
    "- 出生年份：出生的年份；\n",
    "\n",
    "- 体重指数：体重除以身高的平方，单位kg/m2;\n",
    "\n",
    "- 糖尿病家族史：标识糖尿病的遗传特性，记录家族里面患有糖尿病的家属，分成三种标识，分别是父母有一方患有糖尿病、叔叔或者姑姑有一方患有糖尿病、无记录；\n",
    "\n",
    "- 舒张压：心脏舒张时，动脉血管弹性回缩时，产生的压力称为舒张压，单位mmHg；\n",
    "\n",
    "- 口服耐糖量测试：诊断糖尿病的一种实验室检查方法。比赛数据采用120分钟耐糖测试后的血糖值，单位mmol/L；\n",
    "\n",
    "- 胰岛素释放实验：空腹时定量口服葡萄糖刺激胰岛β细胞释放胰岛素。比赛数据采用服糖后120分钟的血浆胰岛素水平，单位pmol/L；\n",
    "\n",
    "- 肱三头肌皮褶厚度：在右上臂后面肩峰与鹰嘴连线的重点处，夹取与上肢长轴平行的皮褶，纵向测量，单位mm；\n",
    "\n",
    "- 患有糖尿病标识：数据标签，1表示患有糖尿病，0表示未患有糖尿病。\n",
    "\n",
    "#### 2.2 训练集说明\n",
    "- 训练集（比赛训练集.csv）一共有5070条数据，用于构建您的预测模型（您可能需要先进行数据分析）。\n",
    "- 数据的字段有编号、性别、出生年份、体重指数、糖尿病家族史、舒张压、口服耐糖量测试、胰岛素释放实验、肱三头肌皮褶厚度、患有糖尿病标识（最后一列）\n",
    "- 您也可以通过特征工程技术构建新的特征。\n",
    "\n",
    "#### 2.3 测试集说明\n",
    "- 测试集（比赛测试集.csv）一共有1000条数据，用于验证预测模型的性能。\n",
    "- 数据的字段有编号、性别、出生年份、体重指数、糖尿病家族史、舒张压、口服耐糖量测试、胰岛素释放实验、肱三头肌皮褶厚度。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data = pd.read_csv('比赛训练集.csv', encoding='gbk')\n",
    "test_data = pd.read_csv('比赛测试集.csv', encoding='gbk')\n",
    "submission = pd.read_csv('提交示例.csv', encoding='gbk')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "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>编号</th>\n",
       "      <th>性别</th>\n",
       "      <th>出生年份</th>\n",
       "      <th>体重指数</th>\n",
       "      <th>糖尿病家族史</th>\n",
       "      <th>舒张压</th>\n",
       "      <th>口服耐糖量测试</th>\n",
       "      <th>胰岛素释放实验</th>\n",
       "      <th>肱三头肌皮褶厚度</th>\n",
       "      <th>患有糖尿病标识</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1996</td>\n",
       "      <td>30.1</td>\n",
       "      <td>无记录</td>\n",
       "      <td>106.0</td>\n",
       "      <td>3.818</td>\n",
       "      <td>7.89</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1988</td>\n",
       "      <td>27.5</td>\n",
       "      <td>无记录</td>\n",
       "      <td>84.0</td>\n",
       "      <td>-1.000</td>\n",
       "      <td>0.00</td>\n",
       "      <td>14.7</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1988</td>\n",
       "      <td>36.5</td>\n",
       "      <td>无记录</td>\n",
       "      <td>85.0</td>\n",
       "      <td>7.131</td>\n",
       "      <td>0.00</td>\n",
       "      <td>40.1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1992</td>\n",
       "      <td>29.5</td>\n",
       "      <td>无记录</td>\n",
       "      <td>91.0</td>\n",
       "      <td>7.041</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1998</td>\n",
       "      <td>42.0</td>\n",
       "      <td>叔叔或者姑姑有一方患有糖尿病</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7.134</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5065</th>\n",
       "      <td>5066</td>\n",
       "      <td>1</td>\n",
       "      <td>1992</td>\n",
       "      <td>36.4</td>\n",
       "      <td>父母有一方患有糖尿病</td>\n",
       "      <td>95.0</td>\n",
       "      <td>3.102</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5066</th>\n",
       "      <td>5067</td>\n",
       "      <td>1</td>\n",
       "      <td>1991</td>\n",
       "      <td>37.1</td>\n",
       "      <td>叔叔或姑姑有一方患有糖尿病</td>\n",
       "      <td>94.0</td>\n",
       "      <td>6.207</td>\n",
       "      <td>6.77</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5067</th>\n",
       "      <td>5068</td>\n",
       "      <td>0</td>\n",
       "      <td>1975</td>\n",
       "      <td>25.4</td>\n",
       "      <td>无记录</td>\n",
       "      <td>90.0</td>\n",
       "      <td>7.343</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5068</th>\n",
       "      <td>5069</td>\n",
       "      <td>0</td>\n",
       "      <td>1972</td>\n",
       "      <td>28.5</td>\n",
       "      <td>父母有一方患有糖尿病</td>\n",
       "      <td>101.0</td>\n",
       "      <td>6.268</td>\n",
       "      <td>8.99</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5069</th>\n",
       "      <td>5070</td>\n",
       "      <td>0</td>\n",
       "      <td>1976</td>\n",
       "      <td>49.9</td>\n",
       "      <td>无记录</td>\n",
       "      <td>88.0</td>\n",
       "      <td>3.732</td>\n",
       "      <td>29.71</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5070 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        编号  性别  出生年份  体重指数          糖尿病家族史    舒张压  口服耐糖量测试  胰岛素释放实验  肱三头肌皮褶厚度  \\\n",
       "0        1   0  1996  30.1             无记录  106.0    3.818     7.89       0.0   \n",
       "1        2   0  1988  27.5             无记录   84.0   -1.000     0.00      14.7   \n",
       "2        3   1  1988  36.5             无记录   85.0    7.131     0.00      40.1   \n",
       "3        4   1  1992  29.5             无记录   91.0    7.041     0.00       0.0   \n",
       "4        5   0  1998  42.0  叔叔或者姑姑有一方患有糖尿病    NaN    7.134     0.00       0.0   \n",
       "...    ...  ..   ...   ...             ...    ...      ...      ...       ...   \n",
       "5065  5066   1  1992  36.4      父母有一方患有糖尿病   95.0    3.102     0.00       0.0   \n",
       "5066  5067   1  1991  37.1   叔叔或姑姑有一方患有糖尿病   94.0    6.207     6.77       0.0   \n",
       "5067  5068   0  1975  25.4             无记录   90.0    7.343     0.00       0.0   \n",
       "5068  5069   0  1972  28.5      父母有一方患有糖尿病  101.0    6.268     8.99       0.0   \n",
       "5069  5070   0  1976  49.9             无记录   88.0    3.732    29.71       0.0   \n",
       "\n",
       "      患有糖尿病标识  \n",
       "0           0  \n",
       "1           0  \n",
       "2           1  \n",
       "3           0  \n",
       "4           1  \n",
       "...       ...  \n",
       "5065        0  \n",
       "5066        0  \n",
       "5067        0  \n",
       "5068        0  \n",
       "5069        1  \n",
       "\n",
       "[5070 rows x 10 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "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>编号</th>\n",
       "      <th>性别</th>\n",
       "      <th>出生年份</th>\n",
       "      <th>体重指数</th>\n",
       "      <th>糖尿病家族史</th>\n",
       "      <th>舒张压</th>\n",
       "      <th>口服耐糖量测试</th>\n",
       "      <th>胰岛素释放实验</th>\n",
       "      <th>肱三头肌皮褶厚度</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1987</td>\n",
       "      <td>33.1</td>\n",
       "      <td>无记录</td>\n",
       "      <td>72.0</td>\n",
       "      <td>6.586</td>\n",
       "      <td>24.16</td>\n",
       "      <td>2.94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1998</td>\n",
       "      <td>20.6</td>\n",
       "      <td>叔叔或者姑姑有一方患有糖尿病</td>\n",
       "      <td>68.0</td>\n",
       "      <td>3.861</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1979</td>\n",
       "      <td>42.1</td>\n",
       "      <td>无记录</td>\n",
       "      <td>98.0</td>\n",
       "      <td>5.713</td>\n",
       "      <td>0.00</td>\n",
       "      <td>3.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1999</td>\n",
       "      <td>34.6</td>\n",
       "      <td>无记录</td>\n",
       "      <td>66.0</td>\n",
       "      <td>4.684</td>\n",
       "      <td>0.00</td>\n",
       "      <td>3.14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1997</td>\n",
       "      <td>27.7</td>\n",
       "      <td>无记录</td>\n",
       "      <td>89.0</td>\n",
       "      <td>7.948</td>\n",
       "      <td>14.65</td>\n",
       "      <td>2.65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>995</th>\n",
       "      <td>996</td>\n",
       "      <td>1</td>\n",
       "      <td>1990</td>\n",
       "      <td>50.1</td>\n",
       "      <td>无记录</td>\n",
       "      <td>87.0</td>\n",
       "      <td>5.125</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>996</th>\n",
       "      <td>997</td>\n",
       "      <td>0</td>\n",
       "      <td>1992</td>\n",
       "      <td>56.3</td>\n",
       "      <td>无记录</td>\n",
       "      <td>87.0</td>\n",
       "      <td>7.695</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>997</th>\n",
       "      <td>998</td>\n",
       "      <td>1</td>\n",
       "      <td>1992</td>\n",
       "      <td>23.8</td>\n",
       "      <td>无记录</td>\n",
       "      <td>85.0</td>\n",
       "      <td>3.194</td>\n",
       "      <td>7.50</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>998</th>\n",
       "      <td>999</td>\n",
       "      <td>0</td>\n",
       "      <td>2000</td>\n",
       "      <td>53.1</td>\n",
       "      <td>无记录</td>\n",
       "      <td>95.0</td>\n",
       "      <td>8.226</td>\n",
       "      <td>7.55</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999</th>\n",
       "      <td>1000</td>\n",
       "      <td>1</td>\n",
       "      <td>1980</td>\n",
       "      <td>46.9</td>\n",
       "      <td>无记录</td>\n",
       "      <td>88.0</td>\n",
       "      <td>4.802</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1000 rows × 9 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       编号  性别  出生年份  体重指数          糖尿病家族史   舒张压  口服耐糖量测试  胰岛素释放实验  肱三头肌皮褶厚度\n",
       "0       1   0  1987  33.1             无记录  72.0    6.586    24.16      2.94\n",
       "1       2   0  1998  20.6  叔叔或者姑姑有一方患有糖尿病  68.0    3.861     0.00      0.00\n",
       "2       3   1  1979  42.1             无记录  98.0    5.713     0.00      3.53\n",
       "3       4   0  1999  34.6             无记录  66.0    4.684     0.00      3.14\n",
       "4       5   0  1997  27.7             无记录  89.0    7.948    14.65      2.65\n",
       "..    ...  ..   ...   ...             ...   ...      ...      ...       ...\n",
       "995   996   1  1990  50.1             无记录  87.0    5.125     0.00      0.00\n",
       "996   997   0  1992  56.3             无记录  87.0    7.695     0.00      0.00\n",
       "997   998   1  1992  23.8             无记录  85.0    3.194     7.50      0.00\n",
       "998   999   0  2000  53.1             无记录  95.0    8.226     7.55      0.00\n",
       "999  1000   1  1980  46.9             无记录  88.0    4.802     0.00      0.00\n",
       "\n",
       "[1000 rows x 9 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 三、提交说明\n",
    "对于测试数据集当中的个体，您必须预测其是否患有糖尿病（患有糖尿病：1，未患有糖尿病：0），预测值只能是整数1或者0。提交的数据应该具有如下格式：\n",
    "\n",
    "uuid,label\n",
    "\n",
    "1,0\n",
    "\n",
    "2,1\n",
    "\n",
    "3,1\n",
    "\n",
    "...\n",
    "\n",
    "本次比赛中，预测模型的结果文件需要命名成：预测结果.csv，然后提交。请确保您提交的文件格式规范。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "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>uuid</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>995</th>\n",
       "      <td>996</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>996</th>\n",
       "      <td>997</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>997</th>\n",
       "      <td>998</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>998</th>\n",
       "      <td>999</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999</th>\n",
       "      <td>1000</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1000 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     uuid  label\n",
       "0       1      1\n",
       "1       2      1\n",
       "2       3      1\n",
       "3       4      1\n",
       "4       5      1\n",
       "..    ...    ...\n",
       "995   996      1\n",
       "996   997      1\n",
       "997   998      1\n",
       "998   999      1\n",
       "999  1000      1\n",
       "\n",
       "[1000 rows x 2 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "submission"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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97pJH5/73OeKF2Vl8803L1vzRz3v8pJLLilb+ifCs0kvu+yy5uKLL57xg61M1/M/QwghhBBCCCGEcMdiToiXRBQvfalMtC32jghx14tbfv3rXw89/D5MBCZ4PfnJTy7Pd4Tt497Mff7555fP40CE9MKfE044oXyu28Uf+MAHls/DIOB5Uc8dAc/+fN/73leenzldyOftt9+++dCHPlS214/Cy5nG8bxU5175ylc2j3zkI2f8ePe7393ccMMNgzuHEEIIIYQQQgghjM+cEC9vuummcoBQ4+UpYfq5xz3uUbwv5TGIivvss8/YXnFeZmM7c8V28ac//emDT/14Pua+++572zMbvUhmUX+mKYF4r732Ki/K+fCHP1yeqdn3oqCJjv/8z/8sb3DnIbvbbrtNKFwSl4877rjBp9tDPLzuuusGn0IIIYQQQgghhBDmB3NCvCSq1Dczr7baare9KTn8k2WXXba8NfwTn/jE7Q5v154M3lBt+zGImF7sctVVV5XPoyB+8Z6czHZx2J7e9rrccccdi3fioo63rvO+5O36pje96XYvCBr3eNWrXlXKy0t6xsEW85NOOmnw6Z8ou7e97W3Ny172sub0008v34mflwttsskmYx0bbLBBuQ7KXBn2ndd3rLzyys3ii+fxuiGEEEIIIYQQQpg8c0JRuOCCCwb//eONzcSOcHuWWmqp8sbwJzzhCbc7JrvF3hu5PR9zo402KtubPY/RdxOxwgorNO9///ub//f//l8Rl3kGTrRd3Nbkvffe+7Y3XxPz3HvUMxvnG54d6ZgL/OQnPynPFW17t3o8wMc+9rHy0h+etm94wxua448/vll99dXLMzW/+93vjnW85jWvKeFh3XXXLZ6gfef1HWxMvQ4hhBBCCCGEEEKYLAtdvLTVtf2CEUJaxMuZhTcfUemJT3zipIREby3/r//6r/KsTCLkKGxFd17dxszL89/+7d8m3Po8HyDKfv/73y95YRu+50wubHguH3300eV/InH1lJTvnktaXyJ01llnlWdQ/vSnPy2fQwghhBBCCCGEEOYyC128vPzyy5uzzz578Klp1lprrYiXM4wtw0svvfTg0+QgdhIgJ7r+tNNOaw488MDBp6bZaqutmsc//vGDT6MhDr7iFa+47S3qow7P7Kycd9555SU0fed1D96IU+HQQw8t6XjLW97SHHTQQcV2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O7wlp5Ott966ecADHjD41JTnXnr5UAghhBBCCCGEEMJkmRXx8o9//GMRTH74wx/O6jHusx632Wab5mMf+9jtts4edthhZdv16aefPvhm7uHZhRdeeOHgU1P+v/TSS8v/3j79mte8prwcacMNNyzfzVcIbh/84AcX6Pjc5z5Xts/fkbnpppvKc1DrIwTue9/7Nk996lPLs2gngofyuKy00krNtttuO/jUFK/LPHc1hBBCCCGEEEIIU2Gxv83QG2re8573NHvvvffg09yAkMfTbBjEv3e9611F4KkQ/ny35ZZbDr6ZOxCEeIh6rmUbb332VnfPMpwsX/7yl5uPfvSj5f/73//+Jc/WWGON8nk6sJX9LW95S3PooYeWz2984xvLS4XaXHzxxc0uu+zSnHrqqYNvph8v02Gj4/DFL36x+fjHP17+tyX6Qx/6ULP88suXz13adi/fVl111fL/VLDF+w9/+EMRG23v/shHPjLWsynbedx33XnnnVfSxLZf+MIXDr4dDvFx1113bb7+9a+Xz1Xsr1vD+3AP991+++1Lnq2wwgqDX0IIIYQQQgghhBDGJy/saWHrOOGuLXASBt/+9rffJrbNFXjRfeMb37idcLnccsuV5xd+6UtfmpJweUeHWHjZZZfd7oVN55xzTnPkkUcOPjXNKqusMlS47EKE/fWvfz3lw1brmXjR0rrrrtv893//9+2ES/djTzyWiffi7mBf6sR+++03OLNpVl555WbZZZcdfOrHPbw0ij1GuAwhhBBCCCGEEMJUiXjZgTjlhT2Pf/zjB9/84yU4H/7wh2/3LMmFzTLLLNM85SlPae51r3uVz6uttlp5UY/nW0rDooS3wH/iE59YoOO9733vbXk1DJ63L3vZy4rH6cYbb1wOduCZjZW111578N+ixZJLLlnESx67L37xi5tHPvKR5dhpp53KC63aL3/ixenFPCGEEEIIIYQQQggzzayIl8Qg3mtnnHHGrB62PE8Fz+yz/dd214otwBOJX7PN5ptv3uy8887l5SjS+vznP7+8gGhRw9bnJzzhCQt0POIRj5jQY9IW71Fb5D0jcrvttht8mhhb0/vsctzjm9/8Zkn7bED8HrUNvKJOPPGJTxx8CiGEEEIIIYQQQphZ4nk5BAImL0ZizUMe8pDy/zrrrDP4de5AsNxrr72azTbbbPBNmCq8CW2J7mOLLbZo3vnOdzbrr7/+4JtFC2kfJV4S7r3JnleyuhFCCCGEEEIIIYQwG8zYC3v22Wef257H6Jl3L3jBC4YKQzPFKaec0hxwwAGDT03xGOOlOBmuuuqq8ndR24o9DG9X95xHELS22mqrad0i7M3znrdY3+L+9Kc/vXgotvHcyXe/+93lL/rOmSzdMKXrDW94Q/m/zTXXXNP8+c9/Hnz6B6NEzS5tu/dCHJ6xU+X8888v4XkG59JLL13CGkdA94Kd4447rrn22mvLdnDC6x3FfkMIIYQQQgghhLBoMWPiZQghhBBCCCGEEEIIISwI2TYeQgghhBBCCCGEEEKYk0S8DCGEEEIIIYQQQgghzEkiXoYQQgghhBBCCCGEEOYkES9DCCGEEEIIIYQQQghzkoiXIYQQQgghhBBCCCGEOUnEyxBCCCGEEEIIIYQQwpwk4mUIIYQQQgghhBBCCGFOEvEyhBBCCCGEEEIIIYQwJ4l4GUIIIYQQQgghhBBCmJNEvAwhhBBCCCGEEEIIIcxJIl6GEEIIIYQQQgghhBDmJBEvQwghhBBCCCGEEEIIc5KIlyGEEEIIIYQQQgghhDlJxMsQQgghhBBCCCGEEMKcJOJlCCGEEEIIIYQQQghhThLxMoQQQgghhBBCCCGEMCeJeBlCCCGEEEIIIYQQQpiTRLwMIYQQQgghhBBCCCHMSSJehhBCCCGEEEIIIYQQ5iQRL0MIIYQQQgghhBBCCHOSiJchhBBCCCGEEEIIIYQ5ScTLEEIIIYQQQgghhBDCnCTiZQghhBBCCCGEEEIIYU4S8TKEEEIIIYQQQgghhDAniXgZQgghhBBCCCGEEEKYk0S8DCGEEEIIIYQQQgghzEkiXoYQQgghhBBCCCGEEOYkES9DCCGEEEIIIYQQQghzkoiXIYQQQgghhBBCCCGEOUnEyxBCCCGEEEIIIYQQwpwk4mUIIYQQQgghhBBCCGFOEvEyhBBCCCGEEEIIIYQwJ4l4GUIIIYQQQgghhBBCmJNEvAwhhBBCCCGEEEIIIcxJIl6GEEIIIYQQQgghhBDmJBEvQwghhBBCCCGEEEIIc5KIlyGEEEIIIYQQQgghhDlJxMsQQgghhBBCCCGEEMKcJOJlCCGEEEIIIYQQQghhThLxMoQQQgghhBBCCCGEMCeZU+LljTfe2FxyySXNDTfcMPhmdrjmmmuayy67rPnrX/86+Gbm+fOf/9xccMEFg0+T529/+1tz3XXXlb/DkJ+Tzcurrrqq+d3vfjcyXCyMPFsUkK9/+tOfBp/6cc6ZZ57Z/PGPfxx8E+YDN998c2m/pgM2cOWVV5Zjoro4CnFakOtHcfzxx5f2Yqb5xS9+0Rx44IHNRRddNPhmcmijtJWj0E5qL8PCp44D2uXBjvU3CzI2YAcLGsZkqPfr1uFh34/iiiuumLF6PNsYO3TLNyx6sFc2rrxHUet2tYep9lk1nInu18ctt9wy+O/2iMeo8Zp+xVg+/INRbazv/OacLl0bwLj2M1OMO8fp668m4qyzzirjmmFh17ySL5NBHMa5Ttpq/yMOo87vK5twx4W9zOZ4Wvs63fMMNr2gczXpW1htU2iaJd7zdwb/L3SOOOKI5sUvfnGzzDLLNJtvvvng25nngx/8YPPVr361eeQjH9mssMIK5TuDmeOOO6459dRTS0cz6rj88subu9/97s0SSyxRrp0Ik/D/9//+X3PooYc2W2+9dXPnO9958Mv4nHfeec1LX/rS5ic/+Umz3XbbNUsvvfTgl38iTbvsskuz8sorN/e73/0G347mO9/5TvPGN76xWXXVVZv73ve+g2//lb48G4YK7tCgTeW49dZbm2WXXXYQ2txBx69R1ZATok844YTmN7/5TbPvvvuWMu7Lc8KwciNOPvzhD28WX/xf1w9c//rXv76knX0stthig18mh/h95StfKbZ2yCGHNNtss82UbK2isTaJ7paPQx788pe/bE477bTb6gXb/NWvflXsaMkllxyEMv+Rrx/72MeaH//4x6WMl19++WLf6toBBxzQbLvttuW7cWAnv/3tb5s111zzduVMuH7LW97SHH744b31+8QTTyx/R5WnNkzzvsceezSbbbZZaQemi3PPPbd529veVuKnDbjTne40+GX6+dznPtd86Utfah7wgAc066+//uDb8SGyvvCFLyxt5iMe8Yh/qU/KU3v23ve+t7n3ve/d3OMe9xj8EhYGdRyw4YYb3lbe+uGXvexl5f+JxgbXXnttc/rpp5c+rN0nX3rppc0rXvGK0o5Nx/jCoFrd0uazza5d1fsZR7Tr8LDvh6F9eNWrXtWcc845zUMe8pApt6UmHfrsU045pXngAx845X5lFFdffXXzn//5n6V92nLLLf8lbfrL173udc3uu+/ePOhBD2rW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Nuuss06z9tprN6usskqz2GKLDa4MIYQQQgghhBBCmH9EvAxhHnHjjTcW4fLEE09sfvvb3zZrrbVWs9JKKzVLL710ETOvuuqqImZuu+22zWabbVbEzHhghhBCCCGEEEIIYb6SZ16GMI8gTJ599tnNoYce2hxwwAFFmNx0002bxz72sc1GG23UXHHFFc1uu+3WHHbYYc1FF13U3HLLLYMrQwghhBBCCCGEEOYfES9DmEcsu+yyzT3vec9mxx13bF760pc2W2yxRbP66qs3Sy65ZBEvN9hgg7Kt/PLLL28uueSSiJchhBBCCCGEEEKY10S8DGEeYXs4sdKW8O23375Zd911mxVWWKE823L55Zcvh/89DSJPhAghhBBCCCGEEMJ8J+JlCPMIHpaeY7nmmmsWD0yemCBUet7lNddcU865613v2qyxxhrlzeMhhBBCCCGEEEII85WIlyHMM3hWLr744uV5l/73BvKbbrqpOfbYY5tzzjmn2WabbcpzMAmcES9DCCGEEEIIIYQwn4l4GcI8hsfldddd15x77rnNaaedVt5G/pjHPKbZZJNNmpVXXjlvGg8hhBBCCCGEEMK8JuJlCPMY4iVvy3333be54YYbmo033rh5/OMf36y33nrFKzOEEEIIIYQQQghhPhPxMoR5Ci/LU045pTn11FObK6+8srnf/e7XbL311s3d73735k53utPgrBBCCCGEEEIIIYT5S8TLEOYhN998cxEsTzjhhOZ3v/td2SL+4Ac/uDzr0nMub7311uaWW27JG8dDCCGEEEIIIYQwr4l4GcI85JJLLmlOPvnk5uyzzy7C5dOf/vRm3XXXLVvFeWReccUVzWWXXVZEzBBCCCGEEEIIIYT5ymJ/i2tWCPMGbxbnUXnkkUc2hx9+eHP11Vc366+/fvPwhz+8eFx66ziPzKWXXrpZbbXVylby5ZZbbnB1CCGEEEIIIYQQwvwi4mUI8wjCpRfzfO1rX2u++93vNhtssEF5xiXvS1x77bXN+eefX17cs/nmmxdRc8UVVyy/hRBCCCGEEEIIIcw3sm08hHkEz8s//elPzeqrr16eb3m3u92teFkSNR3+X3vttYuouc466xRvzBBCCCGEEEIIIYT5SjwvQ5hHECh5V5533nnN73//+94X8nju5Xrrrdfc4x73aFZaaaVmySWXHPwSQgghhBBCCCGEML+IeBnCPGScakvEDCGEEEIIIYQQQpjPTJt4+Ze//KW8+fjXv/51eduxz6PwkpEHPvCBzbLLLns7z7D6TL8//OEPzXXXXddssskmxXsshBBCCCGEEEIIIYRwx2LaxMtbb721Oemkk5ojjjii+c1vflMEzFVWWaW5053uVJ7DB8/qu/7668u210c84hHNs571rCJM+p3Y6ftLL720Oeecc4oQevPNN5dzPLsvhBBCCCGEEEIIIYRwx2LaXtjDe9JLRLwopHpg0kW9UMR3PC2XX3755oorrmiOP/745re//e1tHpoO/5966qnlDcq77rpr85WvfKU56qijiqAZQgghhBBCCCGEEEK44zGtbxtfYYUVmrvf/e7lWXu8Ke91r3uVNyJvtdVW5Xj0ox/dPPaxj2023njj4pXpPJ6YhMz99tuvOfPMM5ubbrqpCKHeqvznP/+5/A0hhBBCCCGEEEIIIdzxWOI9f2fw/wLD05IH5cEHH9wsvvjizfbbb1+ea7nhhhs2q666arPaaqs1K6+8ctkOzhtzo402KmKl51v+8pe/LJ6Ztpl71qUt5gTQHXbYoQiiCwviqbh4Dqd41b9XX331bZ6jSy21VEmv9Ns+T3S95ppryrnEWf8Lw/M867mo5/Iu/eMf/1jOdcgT911iiSVuC9e9nHfZZZeV+7vOb+5x1VVXlcN18qy+qMV1dat+jYu/zvObuOSlLiGEEEIIIYQQQghhrjKtbxsnlJ133nnNq1/96iJQvvKVrywel/e4xz2K2FZFSaLZne9853L4vgp8nn9JnLN13NZyUfv4xz9evDcXBu5PNOQResEFFzSXXHLJbR6h4rvmmmsWL9IHPehBzYorrlh+IyLKg9NOO62Ik9JL6JQ2z+7cZpttipDrXGGcf/755RmhhE155iDWrrvuukXcreGKg2318sVLjuSpsH7/+983J598cnP55Zc397nPfZodd9yxuctd7tIss8wyJUxereeee27Je2nBXe9617KN/373u99tAmkIIYQQQgghhBBCCHONafW8JJYR5A488MDikbjFFlsUkY04RszzHMyLLrqoCH68MH3vILQR93hl8gokuF144YVFtFuYnpdER8/v/PGPf1xE1fXWW++27e6/+93vilBJEORZyuPR8zyPPPLIcg0PUmm0lV6eEDQvvvji5gEPeED5jpjomZ6ES4IlQbHmiXN9T6R0ON85rideEjzdm7BZvTF/9atfle32BEkerMI/8cQTS75feeWVzVprrVXymCB7yimnlOudV+/RRVnyBpUm18uLUYc0uqfrqvdnvDpDCCGEEEIIIYQQwoIwY+IlUY8nIMGMwEbUO+GEE4p4udlmm90mAvL844lJ8PI/IYyHIY/ChS1eEgmJhfvuu28RFZ/xjGcUoZJoKB0EQGmWHnE966yzmm9/+9vl+2233bbZZJNNinjLA5OgSZB9+MMfXsRCW+WdS6iUT7w3a37Jp8MOO6zkCS/Ke97znrcJkrbXu0Y+rbHGGiUuyy23XHP66aeXc8XFZ56iPFh5iwrzUY96VHkGKaH4oIMOKmkTvrxVFl14jBIupcm5hFNhjTqcT7QWj65HJ9GUACu/5EeOHPPlYNPVQb1t0yGEEEIIIYQQQph5ZmzbOO/J+973vuUN5G5h6zJRjaD32te+tmxb7uOcc85p9tprr+boo48uQtfC3DZ+7LHHFiGW2Cfeb3/7229LD3GVgEiku//979+cccYZxUPzpJNOau5973uXPLAtHs4jXtoe/9CHPrR4Mh5zzDHNAQccUDwuX/WqVxXPyOphuc8++zT7779/EXcf97jHNS95yUtKOIRLb2G3TZxo+frXv74Iks6T3+5HABXGz372s+ajH/1oeUGSreQ8Pomml156afPZz3625DNR82Uve1mz5ZZblvDbECMJl7xDCbUTmQlRh7epfBJn8Wt7dLKNmgeE3hDmC+zYox4c6kwIIYQQQgghhBBmjxlzIyLqEbMIckTL+eixJP68CHko8pokYvKKtE37bne7WxEKCZXOIwrajk3k48lYnzvpIFASODfffPMiMBIveUrals2j0rMz/bXtW14J2zUEUvetwqE8dA5PVecTPB1rr712ESBtGZffPF1dy/uScOozcdVWdNvd6/Vtj7Iu4i0dXqwkXKLkqMM58kJ85Fdfebtfn2dbjhxz+WC3BPeJBPwQQgghhBBCCCFMPzPmeUkwe85znlPeNm7yT/gj+nmu42te85p54XkpvgS///3f/y3P6yQcPuIRjygvyvEiIgIjsZBQt+eeezaf+cxnitj3mMc8pnnBC14w9JmPP/rRj5o99tijiJjCedvb3na7N3///Oc/b374wx823/nOd5rHP/7xJQ/cg1fnV7/61RIn27133XXXsi29jbzm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hBDCwmJGxcv5xPLLL1/Eyx122KFZbLHFBt+GEEIIIYQQQgghhBAWFjMqXl5//fXN29/+9ubJT37yhMe3vvWtwVUhhBBCCCGEEEIIIYQwz17Yc8EFFzQPfvCDyxvBu5x88snN+eef3zz0oQ9tVl999cG3/+Taa69tjjnmmGb77bcf+rbxEEIIIYQQQgghhBDC3GFGxctvfvObvWJkH6POr+LliSeeOPhm6uy4444RL0MIIYQQQgghhBBCmAfMq2de8ro88sgji4jZPYiS+NCHPtT7+5e//OWxPEBDCCGEEEIIIYQQQghzg2nzvDzppJPKm7ptz54u7nnPeza77bZbc7e73a256qqrynerrLJK7wt13vnOdzYHHXRQES8f85jHDL79JzfffHNzzTXXNEsvvXSz8sorD74NIYQQQgghhBBCCCHMVaZNvPS8Sdu+b7rppsE3C86d73zn5oUvfOFYYuNE4uVEEDePO+64cq9NNtkkbxwPIYQQQgghhBBCCGEhM2PPvKycd955zWc+85lmo402al760pfeThQ899xzmze+8Y3Nfe973+bf//3fm4033njKouGCipd77713ed4mz05/73//+w9+CSGEEEIIIYQQQgghLAxm7JmXRMt3vetdzTOf+czmpz/9aXmb+NVXXz349R9cdNFFzeKLL15Ex+c///nNi170oubHP/5x8YKcbZZffvkSF9vKl1lmmcG3IYQQQgghhBBCCCGEhcW0el7+9a9/LS/H2WOPPZrjjz++fMeD8XWve13xruzzqnT7M844o7xQ56ijjmr+8pe/FO/HnXfeuRwrrrji4MzRLKjnpXh4ribhcoUVVhh8G0IIIYQQQgghhBBCWFhMm3h5yimnNO94xztu86bccssty/MqN9tss7G3gl9yySXN7rvv3hx44IHNjTfeWML42Mc+1iy33HKDM4azoOJlCCGEEEIIIYQQQghhbjFt28bvc5/7NJtuummz0047Nfvss095zuXmm28+qWdY3v3ud2/e9ra3Nfvvv3/Zbv7Upz51LOEyhBBCCCGEEEIIIYSw6DHjL+wJIYQQQgghhBBCCCGEqTBjL+wJIYQQQgghhBBCCCGEBSHiZQghhBBCCCGEEEIIYU4S8TKEEEIIIYQQQgghhDAniXgZQgghhBBCCCGEEEKYk0S8DCGEEEIIIYQQQgghzEkiXoYQQgghhBBCCCGEEOYkES9DCCGEEEIIIYQQQghzkoiXIYQQQgghhBBCCCGEOUnEyxBCCCGEEEIIIYQQwpwk4mUIIYQQQgghhBBCCGFOEvEyhBBCCCGEEEIIIYQwJ4l4GUIIIYQQQgghhBBCmJNEvAwhhBBCCCGEEEIIIcxJIl6GEEIIIYQQQgghhBDmJBEvQwghhBBCCCGEEEIIc5LF/vZ3Bv+HEGaJv/zlL83NN988+HR7FltssduOv/71r81EVXTJJZcsh/MrwscSSyxR/o6L+7nW4dqlllpq8MtoxNG1DvEQnwVBONddd11z+eWXN5deemmz/vrrN3e9610nHe6f/vSn5s9//nNJyzLLLNPc6U53GvzyD8Tb7+6zwgorNCuvvHKz+OKL3y4v+6hpFe5E57aZ6nW33nprc+ONN5a4QjzHLZvZ5oYbbihxlb7lllvuX/J8LqJMbrnlllL205Wv5513XnPxxRc3d7vb3ZpVV121WWmllQa/jM8f//jH5rLLLmtWWWWV3uuvv/765sorryz2sPzyy48V9wVpG9QXeYRx7dc17qmOuUY9HqeOtbnpppvK9exJWl3bvp69XX311cXWHEsvvfSkwm8jz+Xpne9853K/qYQlzeyp5pe8rvl21VVXleOaa65p1lxzzXKMi3bAteLn+o022qjYhvyt4csrNqP9XG+99Uq7FkIIIYQQwnxniff8ncH/IYRZoooSJpgOIoS/hB+TT5Nxhwnqtddee9vv7fPrYYJswl4n9D77nnBnQlvFyCo+wF8TYfdCvdaEm0Dmvs43eW9Tr+9O5qu45nBdd8I/7LphCO/CCy9sTjnllObII49s1lhjjWb11VeftOhnkn/JJZeUPHNdeyLvs3gRPU466aSS9ipWVCFgGMpPHkurvHXtOIe8dW0VnLvUfKrUtConabnooouKeEHI6hNVXO/oyyNxFY68lb56bveo9gLh9IU1Cvmt7MRXecnzccKp9xc/f9vf1c+YbHza1HC6YSgb+SqPll122dv9PuyaifjZz37WHH744UVUXHHFFackXmojjj/++BIGAbSN+Pj9t7/9bYm3vCbQK9tRca2CvmvkdddGhx3thYBh92iXVf3dfbQL4imP73KXu5QwHG1GlbE2UFsgLPno2vY56vDpp59eflcvxqnDfYgDwflXv/pVCV842tbJhiW/rrjiipJuYarrNb2///3vmzPOOKPcg0B6j3vco3w/DNerj/4K7+yzz25OPvnk5pe//GVzz3ves4ShvRZf6dfW/eY3v2lOO+20EjbbG4Ww2YHFtG6Z9x3OrfHplmEIIYQQQggzRTwvQ1gIHHvssc3Xvva1IgaYEMLkkXCyySablAmn788888wyMQfxwKSRQGEyXCfUj3rUo5pnPOMZRXjznQns97///TJJ3myzzcp3JpwEEF5LxAPwaDTJvc997tOsu+66ZRJMJLjggguan/70p+W7nXba6XYigThWgaA9oRfWOeecUybXwr///e9/O3GuTnpdN86EVzgERcepp57aPO95z2u22GKLSU+WTfRN4okF0rn99tuX+AtHXOo5e++9d4mfyf4Tn/jEIpaO4rDDDmt+/vOfN2uvvXbJ967Y0ofwCZcE6ic84QnNxhtvPPjln1SBAOKorKFczj333ObEE08sQoUy51XF66qNsKVPnFxf48Vu3Jugptwe9KAHDY0zUZYAwmOQvXQF7Ik44YQTiuBGXHnYwx7WPO5xjyvCW03LMAir7s2WxL2mTXzZEq9Ch8/ttI1DWwCC67v2u99++xWbf/SjH13CruGLl+vEfzL3/NSnPtUceOCBzbve9a6S35PNRyivD33oQ82LXvSiUhfZkDiIO/tVV+U3IYyot/POO5dyG3Yv6Tj66KOLLdX62Cei90E4Z1s77rhjs84665T2pI2w2S47045Vj1t1mWhpEcJf8Xvwgx9c7Lci3Nq2SF+7nfCd+H79618v9916661LPW2n8de//nXzjW98o7nf/e5X8vpe97pXicNkqPFXtz/96U83m266abPVVlsVe6hpGQf5+oc//KHZc889SzuuDmywwQalLkH9/d3vftccd9xxpX3ecssty/fD0EcQVOUHG9Ymnn/++aWuPP7xjy/x/sEPflDaR22K/CYUs+knP/nJE4qjwuYlzLPVvSaC7Sl7wqm+KoQQQgghhNkgnpchLAR4TJnAwmSQKMNbjVBJZCPcEBVMJqvoYgJv8k9YMynm0WZSbUu17YNV2HGuybzzecERFetktwoExDD3r15d9f6EGucQnoT/gAc84HaCjUmu8HjVOXgXmfT6zj1NmImsrvG7dJocO6RNmFXEqkKHMNzTpN/9Hb4nKoo30eS+971v2W5af28f8si9/C8twiK+uU585AEBVLrd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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 0.先看看数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "data1=pd.read_csv('比赛训练集.csv',encoding='gbk')\n",
    "data2=pd.read_csv('比赛测试集.csv',encoding='gbk')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "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>编号</th>\n",
       "      <th>性别</th>\n",
       "      <th>出生年份</th>\n",
       "      <th>体重指数</th>\n",
       "      <th>糖尿病家族史</th>\n",
       "      <th>舒张压</th>\n",
       "      <th>口服耐糖量测试</th>\n",
       "      <th>胰岛素释放实验</th>\n",
       "      <th>肱三头肌皮褶厚度</th>\n",
       "      <th>患有糖尿病标识</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1996</td>\n",
       "      <td>30.1</td>\n",
       "      <td>无记录</td>\n",
       "      <td>106.0</td>\n",
       "      <td>3.818</td>\n",
       "      <td>7.89</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1988</td>\n",
       "      <td>27.5</td>\n",
       "      <td>无记录</td>\n",
       "      <td>84.0</td>\n",
       "      <td>-1.000</td>\n",
       "      <td>0.00</td>\n",
       "      <td>14.7</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1988</td>\n",
       "      <td>36.5</td>\n",
       "      <td>无记录</td>\n",
       "      <td>85.0</td>\n",
       "      <td>7.131</td>\n",
       "      <td>0.00</td>\n",
       "      <td>40.1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1992</td>\n",
       "      <td>29.5</td>\n",
       "      <td>无记录</td>\n",
       "      <td>91.0</td>\n",
       "      <td>7.041</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1998</td>\n",
       "      <td>42.0</td>\n",
       "      <td>叔叔或者姑姑有一方患有糖尿病</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7.134</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5065</th>\n",
       "      <td>5066</td>\n",
       "      <td>1</td>\n",
       "      <td>1992</td>\n",
       "      <td>36.4</td>\n",
       "      <td>父母有一方患有糖尿病</td>\n",
       "      <td>95.0</td>\n",
       "      <td>3.102</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5066</th>\n",
       "      <td>5067</td>\n",
       "      <td>1</td>\n",
       "      <td>1991</td>\n",
       "      <td>37.1</td>\n",
       "      <td>叔叔或姑姑有一方患有糖尿病</td>\n",
       "      <td>94.0</td>\n",
       "      <td>6.207</td>\n",
       "      <td>6.77</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5067</th>\n",
       "      <td>5068</td>\n",
       "      <td>0</td>\n",
       "      <td>1975</td>\n",
       "      <td>25.4</td>\n",
       "      <td>无记录</td>\n",
       "      <td>90.0</td>\n",
       "      <td>7.343</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5068</th>\n",
       "      <td>5069</td>\n",
       "      <td>0</td>\n",
       "      <td>1972</td>\n",
       "      <td>28.5</td>\n",
       "      <td>父母有一方患有糖尿病</td>\n",
       "      <td>101.0</td>\n",
       "      <td>6.268</td>\n",
       "      <td>8.99</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5069</th>\n",
       "      <td>5070</td>\n",
       "      <td>0</td>\n",
       "      <td>1976</td>\n",
       "      <td>49.9</td>\n",
       "      <td>无记录</td>\n",
       "      <td>88.0</td>\n",
       "      <td>3.732</td>\n",
       "      <td>29.71</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5070 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        编号  性别  出生年份  体重指数          糖尿病家族史    舒张压  口服耐糖量测试  胰岛素释放实验  肱三头肌皮褶厚度  \\\n",
       "0        1   0  1996  30.1             无记录  106.0    3.818     7.89       0.0   \n",
       "1        2   0  1988  27.5             无记录   84.0   -1.000     0.00      14.7   \n",
       "2        3   1  1988  36.5             无记录   85.0    7.131     0.00      40.1   \n",
       "3        4   1  1992  29.5             无记录   91.0    7.041     0.00       0.0   \n",
       "4        5   0  1998  42.0  叔叔或者姑姑有一方患有糖尿病    NaN    7.134     0.00       0.0   \n",
       "...    ...  ..   ...   ...             ...    ...      ...      ...       ...   \n",
       "5065  5066   1  1992  36.4      父母有一方患有糖尿病   95.0    3.102     0.00       0.0   \n",
       "5066  5067   1  1991  37.1   叔叔或姑姑有一方患有糖尿病   94.0    6.207     6.77       0.0   \n",
       "5067  5068   0  1975  25.4             无记录   90.0    7.343     0.00       0.0   \n",
       "5068  5069   0  1972  28.5      父母有一方患有糖尿病  101.0    6.268     8.99       0.0   \n",
       "5069  5070   0  1976  49.9             无记录   88.0    3.732    29.71       0.0   \n",
       "\n",
       "      患有糖尿病标识  \n",
       "0           0  \n",
       "1           0  \n",
       "2           1  \n",
       "3           0  \n",
       "4           1  \n",
       "...       ...  \n",
       "5065        0  \n",
       "5066        0  \n",
       "5067        0  \n",
       "5068        0  \n",
       "5069        1  \n",
       "\n",
       "[5070 rows x 10 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data1\n",
    "# data1.describe()\n",
    "# data1.isnull().sum() # 统计缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "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>编号</th>\n",
       "      <th>性别</th>\n",
       "      <th>出生年份</th>\n",
       "      <th>体重指数</th>\n",
       "      <th>糖尿病家族史</th>\n",
       "      <th>舒张压</th>\n",
       "      <th>口服耐糖量测试</th>\n",
       "      <th>胰岛素释放实验</th>\n",
       "      <th>肱三头肌皮褶厚度</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1987</td>\n",
       "      <td>33.1</td>\n",
       "      <td>无记录</td>\n",
       "      <td>72.0</td>\n",
       "      <td>6.586</td>\n",
       "      <td>24.16</td>\n",
       "      <td>2.94</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1998</td>\n",
       "      <td>20.6</td>\n",
       "      <td>叔叔或者姑姑有一方患有糖尿病</td>\n",
       "      <td>68.0</td>\n",
       "      <td>3.861</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1979</td>\n",
       "      <td>42.1</td>\n",
       "      <td>无记录</td>\n",
       "      <td>98.0</td>\n",
       "      <td>5.713</td>\n",
       "      <td>0.00</td>\n",
       "      <td>3.53</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1999</td>\n",
       "      <td>34.6</td>\n",
       "      <td>无记录</td>\n",
       "      <td>66.0</td>\n",
       "      <td>4.684</td>\n",
       "      <td>0.00</td>\n",
       "      <td>3.14</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1997</td>\n",
       "      <td>27.7</td>\n",
       "      <td>无记录</td>\n",
       "      <td>89.0</td>\n",
       "      <td>7.948</td>\n",
       "      <td>14.65</td>\n",
       "      <td>2.65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>995</th>\n",
       "      <td>996</td>\n",
       "      <td>1</td>\n",
       "      <td>1990</td>\n",
       "      <td>50.1</td>\n",
       "      <td>无记录</td>\n",
       "      <td>87.0</td>\n",
       "      <td>5.125</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>996</th>\n",
       "      <td>997</td>\n",
       "      <td>0</td>\n",
       "      <td>1992</td>\n",
       "      <td>56.3</td>\n",
       "      <td>无记录</td>\n",
       "      <td>87.0</td>\n",
       "      <td>7.695</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>997</th>\n",
       "      <td>998</td>\n",
       "      <td>1</td>\n",
       "      <td>1992</td>\n",
       "      <td>23.8</td>\n",
       "      <td>无记录</td>\n",
       "      <td>85.0</td>\n",
       "      <td>3.194</td>\n",
       "      <td>7.50</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>998</th>\n",
       "      <td>999</td>\n",
       "      <td>0</td>\n",
       "      <td>2000</td>\n",
       "      <td>53.1</td>\n",
       "      <td>无记录</td>\n",
       "      <td>95.0</td>\n",
       "      <td>8.226</td>\n",
       "      <td>7.55</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>999</th>\n",
       "      <td>1000</td>\n",
       "      <td>1</td>\n",
       "      <td>1980</td>\n",
       "      <td>46.9</td>\n",
       "      <td>无记录</td>\n",
       "      <td>88.0</td>\n",
       "      <td>4.802</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1000 rows × 9 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       编号  性别  出生年份  体重指数          糖尿病家族史   舒张压  口服耐糖量测试  胰岛素释放实验  肱三头肌皮褶厚度\n",
       "0       1   0  1987  33.1             无记录  72.0    6.586    24.16      2.94\n",
       "1       2   0  1998  20.6  叔叔或者姑姑有一方患有糖尿病  68.0    3.861     0.00      0.00\n",
       "2       3   1  1979  42.1             无记录  98.0    5.713     0.00      3.53\n",
       "3       4   0  1999  34.6             无记录  66.0    4.684     0.00      3.14\n",
       "4       5   0  1997  27.7             无记录  89.0    7.948    14.65      2.65\n",
       "..    ...  ..   ...   ...             ...   ...      ...      ...       ...\n",
       "995   996   1  1990  50.1             无记录  87.0    5.125     0.00      0.00\n",
       "996   997   0  1992  56.3             无记录  87.0    7.695     0.00      0.00\n",
       "997   998   1  1992  23.8             无记录  85.0    3.194     7.50      0.00\n",
       "998   999   0  2000  53.1             无记录  95.0    8.226     7.55      0.00\n",
       "999  1000   1  1980  46.9             无记录  88.0    4.802     0.00      0.00\n",
       "\n",
       "[1000 rows x 9 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data2\n",
    "# data2.describe()\n",
    "# data2.isnull().sum() # 统计缺失值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "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>编号</th>\n",
       "      <th>性别</th>\n",
       "      <th>出生年份</th>\n",
       "      <th>体重指数</th>\n",
       "      <th>糖尿病家族史</th>\n",
       "      <th>舒张压</th>\n",
       "      <th>口服耐糖量测试</th>\n",
       "      <th>胰岛素释放实验</th>\n",
       "      <th>肱三头肌皮褶厚度</th>\n",
       "      <th>患有糖尿病标识</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1996</td>\n",
       "      <td>30.1</td>\n",
       "      <td>无记录</td>\n",
       "      <td>106.0</td>\n",
       "      <td>3.818</td>\n",
       "      <td>7.89</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1988</td>\n",
       "      <td>27.5</td>\n",
       "      <td>无记录</td>\n",
       "      <td>84.0</td>\n",
       "      <td>-1.000</td>\n",
       "      <td>0.00</td>\n",
       "      <td>14.7</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1988</td>\n",
       "      <td>36.5</td>\n",
       "      <td>无记录</td>\n",
       "      <td>85.0</td>\n",
       "      <td>7.131</td>\n",
       "      <td>0.00</td>\n",
       "      <td>40.1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1992</td>\n",
       "      <td>29.5</td>\n",
       "      <td>无记录</td>\n",
       "      <td>91.0</td>\n",
       "      <td>7.041</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1998</td>\n",
       "      <td>42.0</td>\n",
       "      <td>叔叔或者姑姑有一方患有糖尿病</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>7.134</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6065</th>\n",
       "      <td>996</td>\n",
       "      <td>1</td>\n",
       "      <td>1990</td>\n",
       "      <td>50.1</td>\n",
       "      <td>无记录</td>\n",
       "      <td>87.0</td>\n",
       "      <td>5.125</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6066</th>\n",
       "      <td>997</td>\n",
       "      <td>0</td>\n",
       "      <td>1992</td>\n",
       "      <td>56.3</td>\n",
       "      <td>无记录</td>\n",
       "      <td>87.0</td>\n",
       "      <td>7.695</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6067</th>\n",
       "      <td>998</td>\n",
       "      <td>1</td>\n",
       "      <td>1992</td>\n",
       "      <td>23.8</td>\n",
       "      <td>无记录</td>\n",
       "      <td>85.0</td>\n",
       "      <td>3.194</td>\n",
       "      <td>7.50</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6068</th>\n",
       "      <td>999</td>\n",
       "      <td>0</td>\n",
       "      <td>2000</td>\n",
       "      <td>53.1</td>\n",
       "      <td>无记录</td>\n",
       "      <td>95.0</td>\n",
       "      <td>8.226</td>\n",
       "      <td>7.55</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6069</th>\n",
       "      <td>1000</td>\n",
       "      <td>1</td>\n",
       "      <td>1980</td>\n",
       "      <td>46.9</td>\n",
       "      <td>无记录</td>\n",
       "      <td>88.0</td>\n",
       "      <td>4.802</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>6070 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        编号  性别  出生年份  体重指数          糖尿病家族史    舒张压  口服耐糖量测试  胰岛素释放实验  肱三头肌皮褶厚度  \\\n",
       "0        1   0  1996  30.1             无记录  106.0    3.818     7.89       0.0   \n",
       "1        2   0  1988  27.5             无记录   84.0   -1.000     0.00      14.7   \n",
       "2        3   1  1988  36.5             无记录   85.0    7.131     0.00      40.1   \n",
       "3        4   1  1992  29.5             无记录   91.0    7.041     0.00       0.0   \n",
       "4        5   0  1998  42.0  叔叔或者姑姑有一方患有糖尿病   -1.0    7.134     0.00       0.0   \n",
       "...    ...  ..   ...   ...             ...    ...      ...      ...       ...   \n",
       "6065   996   1  1990  50.1             无记录   87.0    5.125     0.00       0.0   \n",
       "6066   997   0  1992  56.3             无记录   87.0    7.695     0.00       0.0   \n",
       "6067   998   1  1992  23.8             无记录   85.0    3.194     7.50       0.0   \n",
       "6068   999   0  2000  53.1             无记录   95.0    8.226     7.55       0.0   \n",
       "6069  1000   1  1980  46.9             无记录   88.0    4.802     0.00       0.0   \n",
       "\n",
       "      患有糖尿病标识  \n",
       "0           0  \n",
       "1           0  \n",
       "2           1  \n",
       "3           0  \n",
       "4           1  \n",
       "...       ...  \n",
       "6065       -1  \n",
       "6066       -1  \n",
       "6067       -1  \n",
       "6068       -1  \n",
       "6069       -1  \n",
       "\n",
       "[6070 rows x 10 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#----------------数据预处理----------------\n",
    "#label标记为-1\n",
    "data2['患有糖尿病标识']=-1\n",
    "\n",
    "#训练集和测试集合并 (一起处理后再分训练集和测试集)\n",
    "data=pd.concat([data1,data2], axis=0, ignore_index=True)\n",
    "\n",
    "#将舒张压特征中的缺失值填充为-1 (也可以尝试取均值、中位数、众数)\n",
    "data['舒张压']=data['舒张压'].fillna(-1)\n",
    "data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'叔叔或姑姑有一方患有糖尿病', '叔叔或者姑姑有一方患有糖尿病', '无记录', '父母有一方患有糖尿病'}"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "set(data['糖尿病家族史'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "#----------------特征工程----------------\n",
    "\"\"\"\n",
    "将出生年份换算成年龄\n",
    "\"\"\"\n",
    "data['年龄']=2022-data['出生年份']  #换成年龄\n",
    "\n",
    "\n",
    "#按体重指数进行一个分类\n",
    "\"\"\"\n",
    "人体的成人体重指数正常值是在18.5-24之间\n",
    "低于18.5是体重指数过轻\n",
    "在24-27之间是体重超重\n",
    "27以上考虑是肥胖\n",
    "高于32了就是非常的肥胖。\n",
    "\"\"\"\n",
    "def BMI(a):\n",
    "    if a<18.5:\n",
    "        return 0\n",
    "    elif 18.5<=a<=24:\n",
    "        return 1\n",
    "    elif 24<a<=27:\n",
    "        return 2\n",
    "    elif 27<a<=32:\n",
    "        return 3\n",
    "    else:\n",
    "        return 4\n",
    "\n",
    "data['BMI']=data['体重指数'].apply(BMI)\n",
    "\n",
    "\n",
    "#按年龄进行一个分类\n",
    "\"\"\"\n",
    ">50\n",
    "<=18\n",
    "19-30\n",
    "31-50\n",
    "\"\"\"\n",
    "def resetAge(input):\n",
    "    if input<=18:\n",
    "        return 0\n",
    "    elif 19<=input<=30:\n",
    "        return 1\n",
    "    elif 31<=input<=50:\n",
    "        return 2\n",
    "    elif input>=51:\n",
    "        return 3\n",
    "\n",
    "data['rAge']=data['出生年份'].apply(resetAge)\n",
    "\n",
    "#糖尿病家族史\n",
    "\"\"\"\n",
    "无记录\n",
    "叔叔或者姑姑有一方患有糖尿病/叔叔或姑姑有一方患有糖尿病\n",
    "父母有一方患有糖尿病\n",
    "\"\"\"\n",
    "def FHOD(a):\n",
    "    if a=='无记录':\n",
    "        return 0\n",
    "    elif a=='叔叔或者姑姑有一方患有糖尿病' or a=='叔叔或姑姑有一方患有糖尿病':\n",
    "        return 1\n",
    "    else:\n",
    "        return 2\n",
    "    \n",
    "data['糖尿病家族史']=data['糖尿病家族史'].apply(FHOD)\n",
    "\n",
    "\n",
    "# 按舒张压进行一个分组\n",
    "\"\"\"\n",
    "舒张压范围为60-90\n",
    "\"\"\"\n",
    "def DBP(a):\n",
    "    if 0<=a<60:\n",
    "        return 0\n",
    "    elif 60<=a<=90:\n",
    "        return 1\n",
    "    elif a>90:\n",
    "        return 2\n",
    "    else:\n",
    "        return a\n",
    "data['DBP']=data['舒张压'].apply(DBP)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "#------------------------------------\n",
    "#将处理好的特征工程分为训练集和测试集，其中训练集是用来训练模型，测试集用来评估模型准确度\n",
    "#其中编号和患者是否得糖尿病没有任何联系，属于无关特征予以删除\n",
    "train = data[data['患有糖尿病标识'] !=-1]\n",
    "test = data[data['患有糖尿病标识'] ==-1]\n",
    "\n",
    "# 训练集的标签\n",
    "train_label = train['患有糖尿病标识']\n",
    "\n",
    "# 训练集的特征\n",
    "train = train.drop(['编号','患有糖尿病标识','出生年份'], axis=1)\n",
    "\n",
    "# 测试集的特征\n",
    "test = test.drop(['编号','患有糖尿病标识','出生年份'], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "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>性别</th>\n",
       "      <th>体重指数</th>\n",
       "      <th>糖尿病家族史</th>\n",
       "      <th>舒张压</th>\n",
       "      <th>口服耐糖量测试</th>\n",
       "      <th>胰岛素释放实验</th>\n",
       "      <th>肱三头肌皮褶厚度</th>\n",
       "      <th>年龄</th>\n",
       "      <th>BMI</th>\n",
       "      <th>rAge</th>\n",
       "      <th>DBP</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>30.1</td>\n",
       "      <td>0</td>\n",
       "      <td>106.0</td>\n",
       "      <td>3.818</td>\n",
       "      <td>7.89</td>\n",
       "      <td>0.0</td>\n",
       "      <td>26</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>27.5</td>\n",
       "      <td>0</td>\n",
       "      <td>84.0</td>\n",
       "      <td>-1.000</td>\n",
       "      <td>0.00</td>\n",
       "      <td>14.7</td>\n",
       "      <td>34</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>36.5</td>\n",
       "      <td>0</td>\n",
       "      <td>85.0</td>\n",
       "      <td>7.131</td>\n",
       "      <td>0.00</td>\n",
       "      <td>40.1</td>\n",
       "      <td>34</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>29.5</td>\n",
       "      <td>0</td>\n",
       "      <td>91.0</td>\n",
       "      <td>7.041</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>30</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>42.0</td>\n",
       "      <td>1</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>7.134</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>24</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5065</th>\n",
       "      <td>1</td>\n",
       "      <td>36.4</td>\n",
       "      <td>2</td>\n",
       "      <td>95.0</td>\n",
       "      <td>3.102</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>30</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5066</th>\n",
       "      <td>1</td>\n",
       "      <td>37.1</td>\n",
       "      <td>1</td>\n",
       "      <td>94.0</td>\n",
       "      <td>6.207</td>\n",
       "      <td>6.77</td>\n",
       "      <td>0.0</td>\n",
       "      <td>31</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5067</th>\n",
       "      <td>0</td>\n",
       "      <td>25.4</td>\n",
       "      <td>0</td>\n",
       "      <td>90.0</td>\n",
       "      <td>7.343</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>47</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5068</th>\n",
       "      <td>0</td>\n",
       "      <td>28.5</td>\n",
       "      <td>2</td>\n",
       "      <td>101.0</td>\n",
       "      <td>6.268</td>\n",
       "      <td>8.99</td>\n",
       "      <td>0.0</td>\n",
       "      <td>50</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5069</th>\n",
       "      <td>0</td>\n",
       "      <td>49.9</td>\n",
       "      <td>0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>3.732</td>\n",
       "      <td>29.71</td>\n",
       "      <td>0.0</td>\n",
       "      <td>46</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5070 rows × 11 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      性别  体重指数  糖尿病家族史    舒张压  口服耐糖量测试  胰岛素释放实验  肱三头肌皮褶厚度  年龄  BMI  rAge  DBP\n",
       "0      0  30.1       0  106.0    3.818     7.89       0.0  26    3     3  2.0\n",
       "1      0  27.5       0   84.0   -1.000     0.00      14.7  34    3     3  1.0\n",
       "2      1  36.5       0   85.0    7.131     0.00      40.1  34    4     3  1.0\n",
       "3      1  29.5       0   91.0    7.041     0.00       0.0  30    3     3  2.0\n",
       "4      0  42.0       1   -1.0    7.134     0.00       0.0  24    4     3 -1.0\n",
       "...   ..   ...     ...    ...      ...      ...       ...  ..  ...   ...  ...\n",
       "5065   1  36.4       2   95.0    3.102     0.00       0.0  30    4     3  2.0\n",
       "5066   1  37.1       1   94.0    6.207     6.77       0.0  31    4     3  2.0\n",
       "5067   0  25.4       0   90.0    7.343     0.00       0.0  47    2     3  1.0\n",
       "5068   0  28.5       2  101.0    6.268     8.99       0.0  50    3     3  2.0\n",
       "5069   0  49.9       0   88.0    3.732    29.71       0.0  46    4     3  1.0\n",
       "\n",
       "[5070 rows x 11 columns]"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "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>性别</th>\n",
       "      <th>体重指数</th>\n",
       "      <th>糖尿病家族史</th>\n",
       "      <th>舒张压</th>\n",
       "      <th>口服耐糖量测试</th>\n",
       "      <th>胰岛素释放实验</th>\n",
       "      <th>肱三头肌皮褶厚度</th>\n",
       "      <th>年龄</th>\n",
       "      <th>BMI</th>\n",
       "      <th>rAge</th>\n",
       "      <th>DBP</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5070</th>\n",
       "      <td>0</td>\n",
       "      <td>33.1</td>\n",
       "      <td>0</td>\n",
       "      <td>72.0</td>\n",
       "      <td>6.586</td>\n",
       "      <td>24.16</td>\n",
       "      <td>2.94</td>\n",
       "      <td>35</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5071</th>\n",
       "      <td>0</td>\n",
       "      <td>20.6</td>\n",
       "      <td>1</td>\n",
       "      <td>68.0</td>\n",
       "      <td>3.861</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>24</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5072</th>\n",
       "      <td>1</td>\n",
       "      <td>42.1</td>\n",
       "      <td>0</td>\n",
       "      <td>98.0</td>\n",
       "      <td>5.713</td>\n",
       "      <td>0.00</td>\n",
       "      <td>3.53</td>\n",
       "      <td>43</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5073</th>\n",
       "      <td>0</td>\n",
       "      <td>34.6</td>\n",
       "      <td>0</td>\n",
       "      <td>66.0</td>\n",
       "      <td>4.684</td>\n",
       "      <td>0.00</td>\n",
       "      <td>3.14</td>\n",
       "      <td>23</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5074</th>\n",
       "      <td>0</td>\n",
       "      <td>27.7</td>\n",
       "      <td>0</td>\n",
       "      <td>89.0</td>\n",
       "      <td>7.948</td>\n",
       "      <td>14.65</td>\n",
       "      <td>2.65</td>\n",
       "      <td>25</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6065</th>\n",
       "      <td>1</td>\n",
       "      <td>50.1</td>\n",
       "      <td>0</td>\n",
       "      <td>87.0</td>\n",
       "      <td>5.125</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>32</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6066</th>\n",
       "      <td>0</td>\n",
       "      <td>56.3</td>\n",
       "      <td>0</td>\n",
       "      <td>87.0</td>\n",
       "      <td>7.695</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>30</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6067</th>\n",
       "      <td>1</td>\n",
       "      <td>23.8</td>\n",
       "      <td>0</td>\n",
       "      <td>85.0</td>\n",
       "      <td>3.194</td>\n",
       "      <td>7.50</td>\n",
       "      <td>0.00</td>\n",
       "      <td>30</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6068</th>\n",
       "      <td>0</td>\n",
       "      <td>53.1</td>\n",
       "      <td>0</td>\n",
       "      <td>95.0</td>\n",
       "      <td>8.226</td>\n",
       "      <td>7.55</td>\n",
       "      <td>0.00</td>\n",
       "      <td>22</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6069</th>\n",
       "      <td>1</td>\n",
       "      <td>46.9</td>\n",
       "      <td>0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>4.802</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>42</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1000 rows × 11 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      性别  体重指数  糖尿病家族史   舒张压  口服耐糖量测试  胰岛素释放实验  肱三头肌皮褶厚度  年龄  BMI  rAge  DBP\n",
       "5070   0  33.1       0  72.0    6.586    24.16      2.94  35    4     3  1.0\n",
       "5071   0  20.6       1  68.0    3.861     0.00      0.00  24    1     3  1.0\n",
       "5072   1  42.1       0  98.0    5.713     0.00      3.53  43    4     3  2.0\n",
       "5073   0  34.6       0  66.0    4.684     0.00      3.14  23    4     3  1.0\n",
       "5074   0  27.7       0  89.0    7.948    14.65      2.65  25    3     3  1.0\n",
       "...   ..   ...     ...   ...      ...      ...       ...  ..  ...   ...  ...\n",
       "6065   1  50.1       0  87.0    5.125     0.00      0.00  32    4     3  1.0\n",
       "6066   0  56.3       0  87.0    7.695     0.00      0.00  30    4     3  1.0\n",
       "6067   1  23.8       0  85.0    3.194     7.50      0.00  30    1     3  1.0\n",
       "6068   0  53.1       0  95.0    8.226     7.55      0.00  22    4     3  2.0\n",
       "6069   1  46.9       0  88.0    4.802     0.00      0.00  42    4     3  1.0\n",
       "\n",
       "[1000 rows x 11 columns]"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. 决策树预测，并提交结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "#----------------模型训练----------------\n",
    "from sklearn import tree\n",
    "model = tree.DecisionTreeClassifier()\n",
    "model.fit(train, train_label) \n",
    "y_pre = model.predict(test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1,\n",
       "       1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1,\n",
       "       0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0,\n",
       "       0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0,\n",
       "       1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1,\n",
       "       1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0,\n",
       "       0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0,\n",
       "       1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1,\n",
       "       1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0,\n",
       "       1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1,\n",
       "       1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0,\n",
       "       0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0,\n",
       "       0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0,\n",
       "       0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,\n",
       "       0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0,\n",
       "       0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0,\n",
       "       0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1,\n",
       "       0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1,\n",
       "       1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1,\n",
       "       0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1,\n",
       "       0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0,\n",
       "       1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,\n",
       "       0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1,\n",
       "       1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0,\n",
       "       0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1,\n",
       "       0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1,\n",
       "       1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0,\n",
       "       0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,\n",
       "       1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0,\n",
       "       0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,\n",
       "       0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0,\n",
       "       0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,\n",
       "       1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,\n",
       "       0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1,\n",
       "       0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1,\n",
       "       0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0,\n",
       "       0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1,\n",
       "       0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0,\n",
       "       0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0,\n",
       "       0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0,\n",
       "       1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "       0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1,\n",
       "       1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,\n",
       "       0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1,\n",
       "       1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1,\n",
       "       1, 1, 1, 1, 0, 0, 1, 0, 1, 0], dtype=int64)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pre"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "#----------------结果输出----------------\n",
    "result = pd.read_csv('提交示例.csv')\n",
    "result['label'] = y_pre\n",
    "result.to_csv('result-desicion-tree.csv',index=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 划分验证集， 本地评估结果  (固定随机种子非常重要)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "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>编号</th>\n",
       "      <th>性别</th>\n",
       "      <th>出生年份</th>\n",
       "      <th>体重指数</th>\n",
       "      <th>糖尿病家族史</th>\n",
       "      <th>舒张压</th>\n",
       "      <th>口服耐糖量测试</th>\n",
       "      <th>胰岛素释放实验</th>\n",
       "      <th>肱三头肌皮褶厚度</th>\n",
       "      <th>患有糖尿病标识</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1996</td>\n",
       "      <td>30.1</td>\n",
       "      <td>无记录</td>\n",
       "      <td>106.0</td>\n",
       "      <td>3.818</td>\n",
       "      <td>7.89</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1988</td>\n",
       "      <td>27.5</td>\n",
       "      <td>无记录</td>\n",
       "      <td>84.0</td>\n",
       "      <td>-1.000</td>\n",
       "      <td>0.00</td>\n",
       "      <td>14.7</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>1988</td>\n",
       "      <td>36.5</td>\n",
       "      <td>无记录</td>\n",
       "      <td>85.0</td>\n",
       "      <td>7.131</td>\n",
       "      <td>0.00</td>\n",
       "      <td>40.1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1992</td>\n",
       "      <td>29.5</td>\n",
       "      <td>无记录</td>\n",
       "      <td>91.0</td>\n",
       "      <td>7.041</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1998</td>\n",
       "      <td>42.0</td>\n",
       "      <td>叔叔或者姑姑有一方患有糖尿病</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7.134</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5065</th>\n",
       "      <td>5066</td>\n",
       "      <td>1</td>\n",
       "      <td>1992</td>\n",
       "      <td>36.4</td>\n",
       "      <td>父母有一方患有糖尿病</td>\n",
       "      <td>95.0</td>\n",
       "      <td>3.102</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5066</th>\n",
       "      <td>5067</td>\n",
       "      <td>1</td>\n",
       "      <td>1991</td>\n",
       "      <td>37.1</td>\n",
       "      <td>叔叔或姑姑有一方患有糖尿病</td>\n",
       "      <td>94.0</td>\n",
       "      <td>6.207</td>\n",
       "      <td>6.77</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5067</th>\n",
       "      <td>5068</td>\n",
       "      <td>0</td>\n",
       "      <td>1975</td>\n",
       "      <td>25.4</td>\n",
       "      <td>无记录</td>\n",
       "      <td>90.0</td>\n",
       "      <td>7.343</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5068</th>\n",
       "      <td>5069</td>\n",
       "      <td>0</td>\n",
       "      <td>1972</td>\n",
       "      <td>28.5</td>\n",
       "      <td>父母有一方患有糖尿病</td>\n",
       "      <td>101.0</td>\n",
       "      <td>6.268</td>\n",
       "      <td>8.99</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5069</th>\n",
       "      <td>5070</td>\n",
       "      <td>0</td>\n",
       "      <td>1976</td>\n",
       "      <td>49.9</td>\n",
       "      <td>无记录</td>\n",
       "      <td>88.0</td>\n",
       "      <td>3.732</td>\n",
       "      <td>29.71</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5070 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        编号  性别  出生年份  体重指数          糖尿病家族史    舒张压  口服耐糖量测试  胰岛素释放实验  肱三头肌皮褶厚度  \\\n",
       "0        1   0  1996  30.1             无记录  106.0    3.818     7.89       0.0   \n",
       "1        2   0  1988  27.5             无记录   84.0   -1.000     0.00      14.7   \n",
       "2        3   1  1988  36.5             无记录   85.0    7.131     0.00      40.1   \n",
       "3        4   1  1992  29.5             无记录   91.0    7.041     0.00       0.0   \n",
       "4        5   0  1998  42.0  叔叔或者姑姑有一方患有糖尿病    NaN    7.134     0.00       0.0   \n",
       "...    ...  ..   ...   ...             ...    ...      ...      ...       ...   \n",
       "5065  5066   1  1992  36.4      父母有一方患有糖尿病   95.0    3.102     0.00       0.0   \n",
       "5066  5067   1  1991  37.1   叔叔或姑姑有一方患有糖尿病   94.0    6.207     6.77       0.0   \n",
       "5067  5068   0  1975  25.4             无记录   90.0    7.343     0.00       0.0   \n",
       "5068  5069   0  1972  28.5      父母有一方患有糖尿病  101.0    6.268     8.99       0.0   \n",
       "5069  5070   0  1976  49.9             无记录   88.0    3.732    29.71       0.0   \n",
       "\n",
       "      患有糖尿病标识  \n",
       "0           0  \n",
       "1           0  \n",
       "2           1  \n",
       "3           0  \n",
       "4           1  \n",
       "...       ...  \n",
       "5065        0  \n",
       "5066        0  \n",
       "5067        0  \n",
       "5068        0  \n",
       "5069        1  \n",
       "\n",
       "[5070 rows x 10 columns]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "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>性别</th>\n",
       "      <th>体重指数</th>\n",
       "      <th>糖尿病家族史</th>\n",
       "      <th>舒张压</th>\n",
       "      <th>口服耐糖量测试</th>\n",
       "      <th>胰岛素释放实验</th>\n",
       "      <th>肱三头肌皮褶厚度</th>\n",
       "      <th>患有糖尿病标识</th>\n",
       "      <th>年龄</th>\n",
       "      <th>BMI</th>\n",
       "      <th>rAge</th>\n",
       "      <th>DBP</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>30.1</td>\n",
       "      <td>0</td>\n",
       "      <td>106.0</td>\n",
       "      <td>3.818</td>\n",
       "      <td>7.89</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>26</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>27.5</td>\n",
       "      <td>0</td>\n",
       "      <td>84.0</td>\n",
       "      <td>-1.000</td>\n",
       "      <td>0.00</td>\n",
       "      <td>14.7</td>\n",
       "      <td>0</td>\n",
       "      <td>34</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>36.5</td>\n",
       "      <td>0</td>\n",
       "      <td>85.0</td>\n",
       "      <td>7.131</td>\n",
       "      <td>0.00</td>\n",
       "      <td>40.1</td>\n",
       "      <td>1</td>\n",
       "      <td>34</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>29.5</td>\n",
       "      <td>0</td>\n",
       "      <td>91.0</td>\n",
       "      <td>7.041</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>30</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>42.0</td>\n",
       "      <td>1</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>7.134</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>24</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5065</th>\n",
       "      <td>1</td>\n",
       "      <td>36.4</td>\n",
       "      <td>2</td>\n",
       "      <td>95.0</td>\n",
       "      <td>3.102</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>30</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5066</th>\n",
       "      <td>1</td>\n",
       "      <td>37.1</td>\n",
       "      <td>1</td>\n",
       "      <td>94.0</td>\n",
       "      <td>6.207</td>\n",
       "      <td>6.77</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>31</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5067</th>\n",
       "      <td>0</td>\n",
       "      <td>25.4</td>\n",
       "      <td>0</td>\n",
       "      <td>90.0</td>\n",
       "      <td>7.343</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>47</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5068</th>\n",
       "      <td>0</td>\n",
       "      <td>28.5</td>\n",
       "      <td>2</td>\n",
       "      <td>101.0</td>\n",
       "      <td>6.268</td>\n",
       "      <td>8.99</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>50</td>\n",
       "      <td>3</td>\n",
       "      <td>3</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5069</th>\n",
       "      <td>0</td>\n",
       "      <td>49.9</td>\n",
       "      <td>0</td>\n",
       "      <td>88.0</td>\n",
       "      <td>3.732</td>\n",
       "      <td>29.71</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1</td>\n",
       "      <td>46</td>\n",
       "      <td>4</td>\n",
       "      <td>3</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5070 rows × 12 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      性别  体重指数  糖尿病家族史    舒张压  口服耐糖量测试  胰岛素释放实验  肱三头肌皮褶厚度  患有糖尿病标识  年龄  BMI  \\\n",
       "0      0  30.1       0  106.0    3.818     7.89       0.0        0  26    3   \n",
       "1      0  27.5       0   84.0   -1.000     0.00      14.7        0  34    3   \n",
       "2      1  36.5       0   85.0    7.131     0.00      40.1        1  34    4   \n",
       "3      1  29.5       0   91.0    7.041     0.00       0.0        0  30    3   \n",
       "4      0  42.0       1   -1.0    7.134     0.00       0.0        1  24    4   \n",
       "...   ..   ...     ...    ...      ...      ...       ...      ...  ..  ...   \n",
       "5065   1  36.4       2   95.0    3.102     0.00       0.0        0  30    4   \n",
       "5066   1  37.1       1   94.0    6.207     6.77       0.0        0  31    4   \n",
       "5067   0  25.4       0   90.0    7.343     0.00       0.0        0  47    2   \n",
       "5068   0  28.5       2  101.0    6.268     8.99       0.0        0  50    3   \n",
       "5069   0  49.9       0   88.0    3.732    29.71       0.0        1  46    4   \n",
       "\n",
       "      rAge  DBP  \n",
       "0        3  2.0  \n",
       "1        3  1.0  \n",
       "2        3  1.0  \n",
       "3        3  2.0  \n",
       "4        3 -1.0  \n",
       "...    ...  ...  \n",
       "5065     3  2.0  \n",
       "5066     3  2.0  \n",
       "5067     3  1.0  \n",
       "5068     3  2.0  \n",
       "5069     3  1.0  \n",
       "\n",
       "[5070 rows x 12 columns]"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 划分数据集\n",
    "from sklearn.model_selection import train_test_split\n",
    "train = data[data['患有糖尿病标识'] !=-1].drop(['编号', '出生年份'], axis=1)\n",
    "train_, valid_ = train_test_split(train, test_size=0.2, random_state = 666)\n",
    "train"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. 决策树"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "#----------------模型训练----------------\n",
    "from sklearn import tree\n",
    "model = tree.DecisionTreeClassifier()\n",
    "\n",
    "train_x = train_.drop(['患有糖尿病标识'], axis=1)\n",
    "valid_x = valid_.drop(['患有糖尿病标识'], axis=1)\n",
    "\n",
    "train_y = train_['患有糖尿病标识']\n",
    "valid_y = valid_['患有糖尿病标识']\n",
    "\n",
    "model.fit(train_x, train_y) \n",
    "y_pred = model.predict(valid_x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9277566539923954\n"
     ]
    }
   ],
   "source": [
    "#----------------性能评估----------------\n",
    "from sklearn.metrics import f1_score\n",
    "print(f1_score(valid_y, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 进阶\n",
    "- 2.1 [更多更高级的模型](https://scikit-learn.org/stable/user_guide.html)（RandomForest、XGBoost、LightGBM、CatBoost、Neural Network ...）\n",
    "    - 可参考 [糖尿病遗传风险检测挑战赛解决方案](https://blog.csdn.net/weixin_44590417/article/details/126674501)\n",
    "\n",
    "- 2.2 更高级的特征 (交叉创造特征、根据知识构建特征)\n",
    "\n",
    "- 2.3 交叉验证（充分利用数据集）\n",
    "\n",
    "- 2.4 调参、搜参\n",
    "\n",
    "- 2.5 集成"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1 随机森林"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "#----------------模型训练----------------\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "model = RandomForestClassifier()\n",
    "\n",
    "train_x = train_.drop(['患有糖尿病标识'], axis=1)\n",
    "valid_x = valid_.drop(['患有糖尿病标识'], axis=1)\n",
    "\n",
    "train_y = train_['患有糖尿病标识']\n",
    "valid_y = valid_['患有糖尿病标识']\n",
    "\n",
    "model.fit(train_x, train_y) \n",
    "y_pred = model.predict(valid_x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9500640204865557\n"
     ]
    }
   ],
   "source": [
    "#----------------性能评估----------------\n",
    "from sklearn.metrics import f1_score\n",
    "print(f1_score(valid_y, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "#--------------再提交一次结果----------------\n",
    "y_pre = model.predict(test)\n",
    "result = pd.read_csv('提交示例.csv')\n",
    "result['label'] = y_pre\n",
    "result.to_csv('result-random-forest.csv',index=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2 特征工程进阶（更多的分析数据）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "根据《中国2型糖尿病防治指南（2017年版）》，糖尿病的诊断标准是\n",
    "- ```具有典型糖尿病症状（烦渴多饮、多尿、多食、不明原因的体重下降）```\n",
    "\n",
    "- 且```随机静脉血浆葡萄糖≥11.1mmol/L```或```空腹静脉血浆葡萄糖≥7.0mmol/L```或```口服葡萄糖耐量试验（OGTT）负荷后2h血浆葡萄糖≥11.1mmol/L```。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "思考:\n",
    "0. 回顾前面特征工程，为什么要那样操作？\n",
    "1. 文本数据为什么要进行编码?有没有其他的处理方法？除了编码为连续数字，有没有其他形式？\n",
    "2. 为什么要填充缺失值？你觉得参考代码中将所有的缺失值全部填充为0是否正确？\n",
    "3. 为什么要将出生年份转换成年龄？为什么要对年龄分组？\n",
    "4. 为什么对体重和舒张压进行了分组？这么做是否正确？\n",
    "5. 为什么要删除编号这一列？\n",
    "\n",
    "支线任务：\n",
    "1. 计算每个个体口服耐糖量测试、胰岛素释放实验、舒张压这三个指标对糖尿病家族史进行分组求平均值后的差值\n",
    "2. 计算每个个体口服耐糖量测试、胰岛素释放实验、舒张压这三个指标对年龄进行分组求平均值后的差值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "#以下是支线任务参考代码\n",
    "\n",
    "#这里计算口服耐糖量相对糖尿病家族史进行分组求平均值后的差值\n",
    "train_x['口服耐糖量测试_diff'] = abs(train_x['口服耐糖量测试'] - train_x.groupby('糖尿病家族史').transform('mean')['口服耐糖量测试'])\n",
    "valid_x['口服耐糖量测试_diff'] = abs(valid_x['口服耐糖量测试'] - valid_x.groupby('糖尿病家族史').transform('mean')['口服耐糖量测试'])\n",
    "\n",
    "#这里计算口服耐糖量相对年龄进行分组求平均值后的差值\n",
    "train_x['口服耐糖量测试_diff'] = abs(train_x['口服耐糖量测试'] - train_x.groupby('rAge').transform('mean')['口服耐糖量测试'])\n",
    "valid_x['口服耐糖量测试_diff'] = abs(valid_x['口服耐糖量测试'] - valid_x.groupby('rAge').transform('mean')['口服耐糖量测试'])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9512820512820513\n"
     ]
    }
   ],
   "source": [
    "#----------------模型训练----------------\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "model = RandomForestClassifier()\n",
    "\n",
    "model.fit(train_x, train_y) \n",
    "y_pred = model.predict(valid_x)\n",
    "\n",
    "#----------------性能评估----------------\n",
    "from sklearn.metrics import f1_score\n",
    "print(f1_score(valid_y, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.3 交叉验证\n",
    "\n",
    "> 在本节中，我们将训练数据使用5折交叉验证训练的方法进行训练，这是一个不错的提升模型预测准确度的方法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "fold_1_valid: 0.9473684210526315\n",
      "fold_2_valid: 0.9502018842530282\n",
      "fold_3_valid: 0.9281045751633987\n",
      "fold_4_valid: 0.9505703422053232\n",
      "fold_5_valid: 0.9407216494845361\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import KFold\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "import numpy as np\n",
    "\n",
    "# 假设 test 是已经定义好的测试数据集\n",
    "X_test = test\n",
    "\n",
    "# 准备训练数据\n",
    "train = data[data['患有糖尿病标识'] !=-1].drop(['编号', '出生年份'], axis=1)\n",
    "X = train.drop(['患有糖尿病标识'], axis=1)\n",
    "y = train['患有糖尿病标识']\n",
    "\n",
    "# 初始化 KFold\n",
    "kf = KFold(n_splits=5, shuffle=True, random_state=42)\n",
    "\n",
    "# 存储每折的预测结果\n",
    "predictions_val = []\n",
    "predictions_test = []\n",
    "\n",
    "# 遍历每一折\n",
    "n = 0 \n",
    "for train_index, test_index in kf.split(X):\n",
    "    n += 1\n",
    "    X_train, X_val = X.iloc[train_index], X.iloc[test_index]\n",
    "    y_train, y_val = y.iloc[train_index], y.iloc[test_index]\n",
    "\n",
    "    # 创建并训练模型\n",
    "    model = RandomForestClassifier()\n",
    "    model.fit(X_train, y_train)\n",
    "\n",
    "    # 在测试集上进行预测\n",
    "    y_pred_val = model.predict(X_val)\n",
    "    y_pred_test = model.predict(X_test)\n",
    "    \n",
    "    predictions_val.append(y_pred_val)\n",
    "    predictions_test.append(y_pred_test)\n",
    "    print(f\"fold_{n}_valid:\", f1_score(y_val, y_pred_val))\n",
    "\n",
    "# 将预测结果数组转换为 NumPy 数组以方便计算\n",
    "predictions_test = np.array(predictions_test)\n",
    "\n",
    "# 集成预测结果，这里我们使用简单的平均法作为示例\n",
    "# 对于分类任务，可能需要使用投票法\n",
    "final_prediction_test = np.mean(predictions_test, axis=0)\n",
    "final_prediction_test = np.round(final_prediction_test)  # 对结果进行四舍五入以得到最终的分类结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "#--------------再提交一次结果----------------\n",
    "result = pd.read_csv('提交示例.csv')\n",
    "result['label'] = final_prediction_test\n",
    "result.to_csv('result-random-forest-5folds.csv',index=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.4 调参、搜参"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on RandomForestClassifier in module sklearn.ensemble._forest object:\n",
      "\n",
      "class RandomForestClassifier(ForestClassifier)\n",
      " |  RandomForestClassifier(n_estimators=100, *, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='sqrt', max_leaf_nodes=None, min_impurity_decrease=0.0, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None)\n",
      " |  \n",
      " |  A random forest classifier.\n",
      " |  \n",
      " |  A random forest is a meta estimator that fits a number of decision tree\n",
      " |  classifiers on various sub-samples of the dataset and uses averaging to\n",
      " |  improve the predictive accuracy and control over-fitting.\n",
      " |  The sub-sample size is controlled with the `max_samples` parameter if\n",
      " |  `bootstrap=True` (default), otherwise the whole dataset is used to build\n",
      " |  each tree.\n",
      " |  \n",
      " |  For a comparison between tree-based ensemble models see the example\n",
      " |  :ref:`sphx_glr_auto_examples_ensemble_plot_forest_hist_grad_boosting_comparison.py`.\n",
      " |  \n",
      " |  Read more in the :ref:`User Guide <forest>`.\n",
      " |  \n",
      " |  Parameters\n",
      " |  ----------\n",
      " |  n_estimators : int, default=100\n",
      " |      The number of trees in the forest.\n",
      " |  \n",
      " |      .. versionchanged:: 0.22\n",
      " |         The default value of ``n_estimators`` changed from 10 to 100\n",
      " |         in 0.22.\n",
      " |  \n",
      " |  criterion : {\"gini\", \"entropy\", \"log_loss\"}, default=\"gini\"\n",
      " |      The function to measure the quality of a split. Supported criteria are\n",
      " |      \"gini\" for the Gini impurity and \"log_loss\" and \"entropy\" both for the\n",
      " |      Shannon information gain, see :ref:`tree_mathematical_formulation`.\n",
      " |      Note: This parameter is tree-specific.\n",
      " |  \n",
      " |  max_depth : int, default=None\n",
      " |      The maximum depth of the tree. If None, then nodes are expanded until\n",
      " |      all leaves are pure or until all leaves contain less than\n",
      " |      min_samples_split samples.\n",
      " |  \n",
      " |  min_samples_split : int or float, default=2\n",
      " |      The minimum number of samples required to split an internal node:\n",
      " |  \n",
      " |      - If int, then consider `min_samples_split` as the minimum number.\n",
      " |      - If float, then `min_samples_split` is a fraction and\n",
      " |        `ceil(min_samples_split * n_samples)` are the minimum\n",
      " |        number of samples for each split.\n",
      " |  \n",
      " |      .. versionchanged:: 0.18\n",
      " |         Added float values for fractions.\n",
      " |  \n",
      " |  min_samples_leaf : int or float, default=1\n",
      " |      The minimum number of samples required to be at a leaf node.\n",
      " |      A split point at any depth will only be considered if it leaves at\n",
      " |      least ``min_samples_leaf`` training samples in each of the left and\n",
      " |      right branches.  This may have the effect of smoothing the model,\n",
      " |      especially in regression.\n",
      " |  \n",
      " |      - If int, then consider `min_samples_leaf` as the minimum number.\n",
      " |      - If float, then `min_samples_leaf` is a fraction and\n",
      " |        `ceil(min_samples_leaf * n_samples)` are the minimum\n",
      " |        number of samples for each node.\n",
      " |  \n",
      " |      .. versionchanged:: 0.18\n",
      " |         Added float values for fractions.\n",
      " |  \n",
      " |  min_weight_fraction_leaf : float, default=0.0\n",
      " |      The minimum weighted fraction of the sum total of weights (of all\n",
      " |      the input samples) required to be at a leaf node. Samples have\n",
      " |      equal weight when sample_weight is not provided.\n",
      " |  \n",
      " |  max_features : {\"sqrt\", \"log2\", None}, int or float, default=\"sqrt\"\n",
      " |      The number of features to consider when looking for the best split:\n",
      " |  \n",
      " |      - If int, then consider `max_features` features at each split.\n",
      " |      - If float, then `max_features` is a fraction and\n",
      " |        `max(1, int(max_features * n_features_in_))` features are considered at each\n",
      " |        split.\n",
      " |      - If \"sqrt\", then `max_features=sqrt(n_features)`.\n",
      " |      - If \"log2\", then `max_features=log2(n_features)`.\n",
      " |      - If None, then `max_features=n_features`.\n",
      " |  \n",
      " |      .. versionchanged:: 1.1\n",
      " |          The default of `max_features` changed from `\"auto\"` to `\"sqrt\"`.\n",
      " |  \n",
      " |      Note: the search for a split does not stop until at least one\n",
      " |      valid partition of the node samples is found, even if it requires to\n",
      " |      effectively inspect more than ``max_features`` features.\n",
      " |  \n",
      " |  max_leaf_nodes : int, default=None\n",
      " |      Grow trees with ``max_leaf_nodes`` in best-first fashion.\n",
      " |      Best nodes are defined as relative reduction in impurity.\n",
      " |      If None then unlimited number of leaf nodes.\n",
      " |  \n",
      " |  min_impurity_decrease : float, default=0.0\n",
      " |      A node will be split if this split induces a decrease of the impurity\n",
      " |      greater than or equal to this value.\n",
      " |  \n",
      " |      The weighted impurity decrease equation is the following::\n",
      " |  \n",
      " |          N_t / N * (impurity - N_t_R / N_t * right_impurity\n",
      " |                              - N_t_L / N_t * left_impurity)\n",
      " |  \n",
      " |      where ``N`` is the total number of samples, ``N_t`` is the number of\n",
      " |      samples at the current node, ``N_t_L`` is the number of samples in the\n",
      " |      left child, and ``N_t_R`` is the number of samples in the right child.\n",
      " |  \n",
      " |      ``N``, ``N_t``, ``N_t_R`` and ``N_t_L`` all refer to the weighted sum,\n",
      " |      if ``sample_weight`` is passed.\n",
      " |  \n",
      " |      .. versionadded:: 0.19\n",
      " |  \n",
      " |  bootstrap : bool, default=True\n",
      " |      Whether bootstrap samples are used when building trees. If False, the\n",
      " |      whole dataset is used to build each tree.\n",
      " |  \n",
      " |  oob_score : bool or callable, default=False\n",
      " |      Whether to use out-of-bag samples to estimate the generalization score.\n",
      " |      By default, :func:`~sklearn.metrics.accuracy_score` is used.\n",
      " |      Provide a callable with signature `metric(y_true, y_pred)` to use a\n",
      " |      custom metric. Only available if `bootstrap=True`.\n",
      " |  \n",
      " |  n_jobs : int, default=None\n",
      " |      The number of jobs to run in parallel. :meth:`fit`, :meth:`predict`,\n",
      " |      :meth:`decision_path` and :meth:`apply` are all parallelized over the\n",
      " |      trees. ``None`` means 1 unless in a :obj:`joblib.parallel_backend`\n",
      " |      context. ``-1`` means using all processors. See :term:`Glossary\n",
      " |      <n_jobs>` for more details.\n",
      " |  \n",
      " |  random_state : int, RandomState instance or None, default=None\n",
      " |      Controls both the randomness of the bootstrapping of the samples used\n",
      " |      when building trees (if ``bootstrap=True``) and the sampling of the\n",
      " |      features to consider when looking for the best split at each node\n",
      " |      (if ``max_features < n_features``).\n",
      " |      See :term:`Glossary <random_state>` for details.\n",
      " |  \n",
      " |  verbose : int, default=0\n",
      " |      Controls the verbosity when fitting and predicting.\n",
      " |  \n",
      " |  warm_start : bool, default=False\n",
      " |      When set to ``True``, reuse the solution of the previous call to fit\n",
      " |      and add more estimators to the ensemble, otherwise, just fit a whole\n",
      " |      new forest. See :term:`Glossary <warm_start>` and\n",
      " |      :ref:`gradient_boosting_warm_start` for details.\n",
      " |  \n",
      " |  class_weight : {\"balanced\", \"balanced_subsample\"}, dict or list of dicts,             default=None\n",
      " |      Weights associated with classes in the form ``{class_label: weight}``.\n",
      " |      If not given, all classes are supposed to have weight one. For\n",
      " |      multi-output problems, a list of dicts can be provided in the same\n",
      " |      order as the columns of y.\n",
      " |  \n",
      " |      Note that for multioutput (including multilabel) weights should be\n",
      " |      defined for each class of every column in its own dict. For example,\n",
      " |      for four-class multilabel classification weights should be\n",
      " |      [{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}] instead of\n",
      " |      [{1:1}, {2:5}, {3:1}, {4:1}].\n",
      " |  \n",
      " |      The \"balanced\" mode uses the values of y to automatically adjust\n",
      " |      weights inversely proportional to class frequencies in the input data\n",
      " |      as ``n_samples / (n_classes * np.bincount(y))``\n",
      " |  \n",
      " |      The \"balanced_subsample\" mode is the same as \"balanced\" except that\n",
      " |      weights are computed based on the bootstrap sample for every tree\n",
      " |      grown.\n",
      " |  \n",
      " |      For multi-output, the weights of each column of y will be multiplied.\n",
      " |  \n",
      " |      Note that these weights will be multiplied with sample_weight (passed\n",
      " |      through the fit method) if sample_weight is specified.\n",
      " |  \n",
      " |  ccp_alpha : non-negative float, default=0.0\n",
      " |      Complexity parameter used for Minimal Cost-Complexity Pruning. The\n",
      " |      subtree with the largest cost complexity that is smaller than\n",
      " |      ``ccp_alpha`` will be chosen. By default, no pruning is performed. See\n",
      " |      :ref:`minimal_cost_complexity_pruning` for details.\n",
      " |  \n",
      " |      .. versionadded:: 0.22\n",
      " |  \n",
      " |  max_samples : int or float, default=None\n",
      " |      If bootstrap is True, the number of samples to draw from X\n",
      " |      to train each base estimator.\n",
      " |  \n",
      " |      - If None (default), then draw `X.shape[0]` samples.\n",
      " |      - If int, then draw `max_samples` samples.\n",
      " |      - If float, then draw `max(round(n_samples * max_samples), 1)` samples. Thus,\n",
      " |        `max_samples` should be in the interval `(0.0, 1.0]`.\n",
      " |  \n",
      " |      .. versionadded:: 0.22\n",
      " |  \n",
      " |  Attributes\n",
      " |  ----------\n",
      " |  estimator_ : :class:`~sklearn.tree.DecisionTreeClassifier`\n",
      " |      The child estimator template used to create the collection of fitted\n",
      " |      sub-estimators.\n",
      " |  \n",
      " |      .. versionadded:: 1.2\n",
      " |         `base_estimator_` was renamed to `estimator_`.\n",
      " |  \n",
      " |  base_estimator_ : DecisionTreeClassifier\n",
      " |      The child estimator template used to create the collection of fitted\n",
      " |      sub-estimators.\n",
      " |  \n",
      " |      .. deprecated:: 1.2\n",
      " |          `base_estimator_` is deprecated and will be removed in 1.4.\n",
      " |          Use `estimator_` instead.\n",
      " |  \n",
      " |  estimators_ : list of DecisionTreeClassifier\n",
      " |      The collection of fitted sub-estimators.\n",
      " |  \n",
      " |  classes_ : ndarray of shape (n_classes,) or a list of such arrays\n",
      " |      The classes labels (single output problem), or a list of arrays of\n",
      " |      class labels (multi-output problem).\n",
      " |  \n",
      " |  n_classes_ : int or list\n",
      " |      The number of classes (single output problem), or a list containing the\n",
      " |      number of classes for each output (multi-output problem).\n",
      " |  \n",
      " |  n_features_in_ : int\n",
      " |      Number of features seen during :term:`fit`.\n",
      " |  \n",
      " |      .. versionadded:: 0.24\n",
      " |  \n",
      " |  feature_names_in_ : ndarray of shape (`n_features_in_`,)\n",
      " |      Names of features seen during :term:`fit`. Defined only when `X`\n",
      " |      has feature names that are all strings.\n",
      " |  \n",
      " |      .. versionadded:: 1.0\n",
      " |  \n",
      " |  n_outputs_ : int\n",
      " |      The number of outputs when ``fit`` is performed.\n",
      " |  \n",
      " |  feature_importances_ : ndarray of shape (n_features,)\n",
      " |      The impurity-based feature importances.\n",
      " |      The higher, the more important the feature.\n",
      " |      The importance of a feature is computed as the (normalized)\n",
      " |      total reduction of the criterion brought by that feature.  It is also\n",
      " |      known as the Gini importance.\n",
      " |  \n",
      " |      Warning: impurity-based feature importances can be misleading for\n",
      " |      high cardinality features (many unique values). See\n",
      " |      :func:`sklearn.inspection.permutation_importance` as an alternative.\n",
      " |  \n",
      " |  oob_score_ : float\n",
      " |      Score of the training dataset obtained using an out-of-bag estimate.\n",
      " |      This attribute exists only when ``oob_score`` is True.\n",
      " |  \n",
      " |  oob_decision_function_ : ndarray of shape (n_samples, n_classes) or             (n_samples, n_classes, n_outputs)\n",
      " |      Decision function computed with out-of-bag estimate on the training\n",
      " |      set. If n_estimators is small it might be possible that a data point\n",
      " |      was never left out during the bootstrap. In this case,\n",
      " |      `oob_decision_function_` might contain NaN. This attribute exists\n",
      " |      only when ``oob_score`` is True.\n",
      " |  \n",
      " |  See Also\n",
      " |  --------\n",
      " |  sklearn.tree.DecisionTreeClassifier : A decision tree classifier.\n",
      " |  sklearn.ensemble.ExtraTreesClassifier : Ensemble of extremely randomized\n",
      " |      tree classifiers.\n",
      " |  sklearn.ensemble.HistGradientBoostingClassifier : A Histogram-based Gradient\n",
      " |      Boosting Classification Tree, very fast for big datasets (n_samples >=\n",
      " |      10_000).\n",
      " |  \n",
      " |  Notes\n",
      " |  -----\n",
      " |  The default values for the parameters controlling the size of the trees\n",
      " |  (e.g. ``max_depth``, ``min_samples_leaf``, etc.) lead to fully grown and\n",
      " |  unpruned trees which can potentially be very large on some data sets. To\n",
      " |  reduce memory consumption, the complexity and size of the trees should be\n",
      " |  controlled by setting those parameter values.\n",
      " |  \n",
      " |  The features are always randomly permuted at each split. Therefore,\n",
      " |  the best found split may vary, even with the same training data,\n",
      " |  ``max_features=n_features`` and ``bootstrap=False``, if the improvement\n",
      " |  of the criterion is identical for several splits enumerated during the\n",
      " |  search of the best split. To obtain a deterministic behaviour during\n",
      " |  fitting, ``random_state`` has to be fixed.\n",
      " |  \n",
      " |  References\n",
      " |  ----------\n",
      " |  .. [1] L. Breiman, \"Random Forests\", Machine Learning, 45(1), 5-32, 2001.\n",
      " |  \n",
      " |  Examples\n",
      " |  --------\n",
      " |  >>> from sklearn.ensemble import RandomForestClassifier\n",
      " |  >>> from sklearn.datasets import make_classification\n",
      " |  >>> X, y = make_classification(n_samples=1000, n_features=4,\n",
      " |  ...                            n_informative=2, n_redundant=0,\n",
      " |  ...                            random_state=0, shuffle=False)\n",
      " |  >>> clf = RandomForestClassifier(max_depth=2, random_state=0)\n",
      " |  >>> clf.fit(X, y)\n",
      " |  RandomForestClassifier(...)\n",
      " |  >>> print(clf.predict([[0, 0, 0, 0]]))\n",
      " |  [1]\n",
      " |  \n",
      " |  Method resolution order:\n",
      " |      RandomForestClassifier\n",
      " |      ForestClassifier\n",
      " |      sklearn.base.ClassifierMixin\n",
      " |      BaseForest\n",
      " |      sklearn.base.MultiOutputMixin\n",
      " |      sklearn.ensemble._base.BaseEnsemble\n",
      " |      sklearn.base.MetaEstimatorMixin\n",
      " |      sklearn.base.BaseEstimator\n",
      " |      sklearn.utils._metadata_requests._MetadataRequester\n",
      " |      builtins.object\n",
      " |  \n",
      " |  Methods defined here:\n",
      " |  \n",
      " |  __init__(self, n_estimators=100, *, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='sqrt', max_leaf_nodes=None, min_impurity_decrease=0.0, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None)\n",
      " |      Initialize self.  See help(type(self)) for accurate signature.\n",
      " |  \n",
      " |  set_fit_request(self: sklearn.ensemble._forest.RandomForestClassifier, *, sample_weight: Union[bool, NoneType, str] = '$UNCHANGED$') -> sklearn.ensemble._forest.RandomForestClassifier\n",
      " |      Request metadata passed to the ``fit`` method.\n",
      " |      \n",
      " |      Note that this method is only relevant if\n",
      " |      ``enable_metadata_routing=True`` (see :func:`sklearn.set_config`).\n",
      " |      Please see :ref:`User Guide <metadata_routing>` on how the routing\n",
      " |      mechanism works.\n",
      " |      \n",
      " |      The options for each parameter are:\n",
      " |      \n",
      " |      - ``True``: metadata is requested, and passed to ``fit`` if provided. The request is ignored if metadata is not provided.\n",
      " |      \n",
      " |      - ``False``: metadata is not requested and the meta-estimator will not pass it to ``fit``.\n",
      " |      \n",
      " |      - ``None``: metadata is not requested, and the meta-estimator will raise an error if the user provides it.\n",
      " |      \n",
      " |      - ``str``: metadata should be passed to the meta-estimator with this given alias instead of the original name.\n",
      " |      \n",
      " |      The default (``sklearn.utils.metadata_routing.UNCHANGED``) retains the\n",
      " |      existing request. This allows you to change the request for some\n",
      " |      parameters and not others.\n",
      " |      \n",
      " |      .. versionadded:: 1.3\n",
      " |      \n",
      " |      .. note::\n",
      " |          This method is only relevant if this estimator is used as a\n",
      " |          sub-estimator of a meta-estimator, e.g. used inside a\n",
      " |          :class:`~sklearn.pipeline.Pipeline`. Otherwise it has no effect.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      sample_weight : str, True, False, or None,                     default=sklearn.utils.metadata_routing.UNCHANGED\n",
      " |          Metadata routing for ``sample_weight`` parameter in ``fit``.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      self : object\n",
      " |          The updated object.\n",
      " |  \n",
      " |  set_score_request(self: sklearn.ensemble._forest.RandomForestClassifier, *, sample_weight: Union[bool, NoneType, str] = '$UNCHANGED$') -> sklearn.ensemble._forest.RandomForestClassifier\n",
      " |      Request metadata passed to the ``score`` method.\n",
      " |      \n",
      " |      Note that this method is only relevant if\n",
      " |      ``enable_metadata_routing=True`` (see :func:`sklearn.set_config`).\n",
      " |      Please see :ref:`User Guide <metadata_routing>` on how the routing\n",
      " |      mechanism works.\n",
      " |      \n",
      " |      The options for each parameter are:\n",
      " |      \n",
      " |      - ``True``: metadata is requested, and passed to ``score`` if provided. The request is ignored if metadata is not provided.\n",
      " |      \n",
      " |      - ``False``: metadata is not requested and the meta-estimator will not pass it to ``score``.\n",
      " |      \n",
      " |      - ``None``: metadata is not requested, and the meta-estimator will raise an error if the user provides it.\n",
      " |      \n",
      " |      - ``str``: metadata should be passed to the meta-estimator with this given alias instead of the original name.\n",
      " |      \n",
      " |      The default (``sklearn.utils.metadata_routing.UNCHANGED``) retains the\n",
      " |      existing request. This allows you to change the request for some\n",
      " |      parameters and not others.\n",
      " |      \n",
      " |      .. versionadded:: 1.3\n",
      " |      \n",
      " |      .. note::\n",
      " |          This method is only relevant if this estimator is used as a\n",
      " |          sub-estimator of a meta-estimator, e.g. used inside a\n",
      " |          :class:`~sklearn.pipeline.Pipeline`. Otherwise it has no effect.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      sample_weight : str, True, False, or None,                     default=sklearn.utils.metadata_routing.UNCHANGED\n",
      " |          Metadata routing for ``sample_weight`` parameter in ``score``.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      self : object\n",
      " |          The updated object.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Data and other attributes defined here:\n",
      " |  \n",
      " |  __abstractmethods__ = frozenset()\n",
      " |  \n",
      " |  __annotations__ = {'_parameter_constraints': <class 'dict'>}\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from ForestClassifier:\n",
      " |  \n",
      " |  predict(self, X)\n",
      " |      Predict class for X.\n",
      " |      \n",
      " |      The predicted class of an input sample is a vote by the trees in\n",
      " |      the forest, weighted by their probability estimates. That is,\n",
      " |      the predicted class is the one with highest mean probability\n",
      " |      estimate across the trees.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      X : {array-like, sparse matrix} of shape (n_samples, n_features)\n",
      " |          The input samples. Internally, its dtype will be converted to\n",
      " |          ``dtype=np.float32``. If a sparse matrix is provided, it will be\n",
      " |          converted into a sparse ``csr_matrix``.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      y : ndarray of shape (n_samples,) or (n_samples, n_outputs)\n",
      " |          The predicted classes.\n",
      " |  \n",
      " |  predict_log_proba(self, X)\n",
      " |      Predict class log-probabilities for X.\n",
      " |      \n",
      " |      The predicted class log-probabilities of an input sample is computed as\n",
      " |      the log of the mean predicted class probabilities of the trees in the\n",
      " |      forest.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      X : {array-like, sparse matrix} of shape (n_samples, n_features)\n",
      " |          The input samples. Internally, its dtype will be converted to\n",
      " |          ``dtype=np.float32``. If a sparse matrix is provided, it will be\n",
      " |          converted into a sparse ``csr_matrix``.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      p : ndarray of shape (n_samples, n_classes), or a list of such arrays\n",
      " |          The class probabilities of the input samples. The order of the\n",
      " |          classes corresponds to that in the attribute :term:`classes_`.\n",
      " |  \n",
      " |  predict_proba(self, X)\n",
      " |      Predict class probabilities for X.\n",
      " |      \n",
      " |      The predicted class probabilities of an input sample are computed as\n",
      " |      the mean predicted class probabilities of the trees in the forest.\n",
      " |      The class probability of a single tree is the fraction of samples of\n",
      " |      the same class in a leaf.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      X : {array-like, sparse matrix} of shape (n_samples, n_features)\n",
      " |          The input samples. Internally, its dtype will be converted to\n",
      " |          ``dtype=np.float32``. If a sparse matrix is provided, it will be\n",
      " |          converted into a sparse ``csr_matrix``.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      p : ndarray of shape (n_samples, n_classes), or a list of such arrays\n",
      " |          The class probabilities of the input samples. The order of the\n",
      " |          classes corresponds to that in the attribute :term:`classes_`.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from sklearn.base.ClassifierMixin:\n",
      " |  \n",
      " |  score(self, X, y, sample_weight=None)\n",
      " |      Return the mean accuracy on the given test data and labels.\n",
      " |      \n",
      " |      In multi-label classification, this is the subset accuracy\n",
      " |      which is a harsh metric since you require for each sample that\n",
      " |      each label set be correctly predicted.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      X : array-like of shape (n_samples, n_features)\n",
      " |          Test samples.\n",
      " |      \n",
      " |      y : array-like of shape (n_samples,) or (n_samples, n_outputs)\n",
      " |          True labels for `X`.\n",
      " |      \n",
      " |      sample_weight : array-like of shape (n_samples,), default=None\n",
      " |          Sample weights.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      score : float\n",
      " |          Mean accuracy of ``self.predict(X)`` w.r.t. `y`.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Data descriptors inherited from sklearn.base.ClassifierMixin:\n",
      " |  \n",
      " |  __dict__\n",
      " |      dictionary for instance variables (if defined)\n",
      " |  \n",
      " |  __weakref__\n",
      " |      list of weak references to the object (if defined)\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from BaseForest:\n",
      " |  \n",
      " |  apply(self, X)\n",
      " |      Apply trees in the forest to X, return leaf indices.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      X : {array-like, sparse matrix} of shape (n_samples, n_features)\n",
      " |          The input samples. Internally, its dtype will be converted to\n",
      " |          ``dtype=np.float32``. If a sparse matrix is provided, it will be\n",
      " |          converted into a sparse ``csr_matrix``.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      X_leaves : ndarray of shape (n_samples, n_estimators)\n",
      " |          For each datapoint x in X and for each tree in the forest,\n",
      " |          return the index of the leaf x ends up in.\n",
      " |  \n",
      " |  decision_path(self, X)\n",
      " |      Return the decision path in the forest.\n",
      " |      \n",
      " |      .. versionadded:: 0.18\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      X : {array-like, sparse matrix} of shape (n_samples, n_features)\n",
      " |          The input samples. Internally, its dtype will be converted to\n",
      " |          ``dtype=np.float32``. If a sparse matrix is provided, it will be\n",
      " |          converted into a sparse ``csr_matrix``.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      indicator : sparse matrix of shape (n_samples, n_nodes)\n",
      " |          Return a node indicator matrix where non zero elements indicates\n",
      " |          that the samples goes through the nodes. The matrix is of CSR\n",
      " |          format.\n",
      " |      \n",
      " |      n_nodes_ptr : ndarray of shape (n_estimators + 1,)\n",
      " |          The columns from indicator[n_nodes_ptr[i]:n_nodes_ptr[i+1]]\n",
      " |          gives the indicator value for the i-th estimator.\n",
      " |  \n",
      " |  fit(self, X, y, sample_weight=None)\n",
      " |      Build a forest of trees from the training set (X, y).\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      X : {array-like, sparse matrix} of shape (n_samples, n_features)\n",
      " |          The training input samples. Internally, its dtype will be converted\n",
      " |          to ``dtype=np.float32``. If a sparse matrix is provided, it will be\n",
      " |          converted into a sparse ``csc_matrix``.\n",
      " |      \n",
      " |      y : array-like of shape (n_samples,) or (n_samples, n_outputs)\n",
      " |          The target values (class labels in classification, real numbers in\n",
      " |          regression).\n",
      " |      \n",
      " |      sample_weight : array-like of shape (n_samples,), default=None\n",
      " |          Sample weights. If None, then samples are equally weighted. Splits\n",
      " |          that would create child nodes with net zero or negative weight are\n",
      " |          ignored while searching for a split in each node. In the case of\n",
      " |          classification, splits are also ignored if they would result in any\n",
      " |          single class carrying a negative weight in either child node.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      self : object\n",
      " |          Fitted estimator.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Readonly properties inherited from BaseForest:\n",
      " |  \n",
      " |  feature_importances_\n",
      " |      The impurity-based feature importances.\n",
      " |      \n",
      " |      The higher, the more important the feature.\n",
      " |      The importance of a feature is computed as the (normalized)\n",
      " |      total reduction of the criterion brought by that feature.  It is also\n",
      " |      known as the Gini importance.\n",
      " |      \n",
      " |      Warning: impurity-based feature importances can be misleading for\n",
      " |      high cardinality features (many unique values). See\n",
      " |      :func:`sklearn.inspection.permutation_importance` as an alternative.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      feature_importances_ : ndarray of shape (n_features,)\n",
      " |          The values of this array sum to 1, unless all trees are single node\n",
      " |          trees consisting of only the root node, in which case it will be an\n",
      " |          array of zeros.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from sklearn.ensemble._base.BaseEnsemble:\n",
      " |  \n",
      " |  __getitem__(self, index)\n",
      " |      Return the index'th estimator in the ensemble.\n",
      " |  \n",
      " |  __iter__(self)\n",
      " |      Return iterator over estimators in the ensemble.\n",
      " |  \n",
      " |  __len__(self)\n",
      " |      Return the number of estimators in the ensemble.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Readonly properties inherited from sklearn.ensemble._base.BaseEnsemble:\n",
      " |  \n",
      " |  base_estimator_\n",
      " |      Estimator used to grow the ensemble.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from sklearn.base.BaseEstimator:\n",
      " |  \n",
      " |  __getstate__(self)\n",
      " |  \n",
      " |  __repr__(self, N_CHAR_MAX=700)\n",
      " |      Return repr(self).\n",
      " |  \n",
      " |  __setstate__(self, state)\n",
      " |  \n",
      " |  __sklearn_clone__(self)\n",
      " |  \n",
      " |  get_params(self, deep=True)\n",
      " |      Get parameters for this estimator.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      deep : bool, default=True\n",
      " |          If True, will return the parameters for this estimator and\n",
      " |          contained subobjects that are estimators.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      params : dict\n",
      " |          Parameter names mapped to their values.\n",
      " |  \n",
      " |  set_params(self, **params)\n",
      " |      Set the parameters of this estimator.\n",
      " |      \n",
      " |      The method works on simple estimators as well as on nested objects\n",
      " |      (such as :class:`~sklearn.pipeline.Pipeline`). The latter have\n",
      " |      parameters of the form ``<component>__<parameter>`` so that it's\n",
      " |      possible to update each component of a nested object.\n",
      " |      \n",
      " |      Parameters\n",
      " |      ----------\n",
      " |      **params : dict\n",
      " |          Estimator parameters.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      self : estimator instance\n",
      " |          Estimator instance.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Methods inherited from sklearn.utils._metadata_requests._MetadataRequester:\n",
      " |  \n",
      " |  get_metadata_routing(self)\n",
      " |      Get metadata routing of this object.\n",
      " |      \n",
      " |      Please check :ref:`User Guide <metadata_routing>` on how the routing\n",
      " |      mechanism works.\n",
      " |      \n",
      " |      Returns\n",
      " |      -------\n",
      " |      routing : MetadataRequest\n",
      " |          A :class:`~sklearn.utils.metadata_routing.MetadataRequest` encapsulating\n",
      " |          routing information.\n",
      " |  \n",
      " |  ----------------------------------------------------------------------\n",
      " |  Class methods inherited from sklearn.utils._metadata_requests._MetadataRequester:\n",
      " |  \n",
      " |  __init_subclass__(**kwargs) from abc.ABCMeta\n",
      " |      Set the ``set_{method}_request`` methods.\n",
      " |      \n",
      " |      This uses PEP-487 [1]_ to set the ``set_{method}_request`` methods. It\n",
      " |      looks for the information available in the set default values which are\n",
      " |      set using ``__metadata_request__*`` class attributes, or inferred\n",
      " |      from method signatures.\n",
      " |      \n",
      " |      The ``__metadata_request__*`` class attributes are used when a method\n",
      " |      does not explicitly accept a metadata through its arguments or if the\n",
      " |      developer would like to specify a request value for those metadata\n",
      " |      which are different from the default ``None``.\n",
      " |      \n",
      " |      References\n",
      " |      ----------\n",
      " |      .. [1] https://www.python.org/dev/peps/pep-0487\n",
      "\n"
     ]
    }
   ],
   "source": [
    "model = RandomForestClassifier()\n",
    "help(model)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5 集成\n",
    "回顾：\n",
    "\n",
    "- 前面的交叉验证其实就是集成了5个模型的预测结果\n",
    "\n",
    "思考：\n",
    "- 还有什么集成方式？\n",
    "\n",
    "- 集成的好处是什么？"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 后续（看看提交能不能冲到A榜前面！最重要的是B榜要能稳住!）\n",
    "\n",
    "经过简单的学习，我们完成了糖尿病遗传风险检测挑战赛的baseline任务，接下来应该怎么做呢？主要是以下几个方面：\n",
    "\n",
    "- 继续尝试不同的预测模型或特征工程来提升模型预测的准确度\n",
    "- 查阅糖尿病遗传风险预测相关资料，获取其他模型构建方法\n",
    "- ...\n",
    "\n",
    "总之，就是在baseline的基础上不断的改造与尝试，通过不断的实践来提升自己的数据挖掘能力，正所谓【**纸上得来终觉浅，绝知此事要躬行**】，也许你熟练掌握机器学习的相关算法，能熟练推导各种公式，但如何将学习到的方法应用到实践工程中，需要我们不断的尝试与改进，没有一个模型是一步所得，向最后的冠军冲击~\n",
    "\n",
    "\n",
    "Ref：\n",
    "\n",
    "> - [Datawhale：数据竞赛Baseline & Topline分享](https://github.com/datawhalechina/competition-baseline)\n",
    "> - [Datawhale：数据挖掘与机器学习](https://github.com/datawhalechina/team-learning-data-mining)\n",
    "> - [Datawhale：西瓜书代码实战](https://github.com/datawhalechina/machine-learning-toy-code)\n",
    "> - [CSDN：Kaggle上分技巧——单模K折交叉验证训练+多模型融合](https://blog.csdn.net/fengjiandaxia/article/details/123096182)\n",
    "> - [鱼佬：从数据竞赛到工作！](https://mp.weixin.qq.com/s?__biz=MzIyNjM2MzQyNg==&mid=2247571357&idx=1&sn=96c9a284105588cb458e0b92925f2297&scene=21#wechat_redirect)\n",
    "> - [下一站，向冠军冲击！](https://mp.weixin.qq.com/s/d7dXGYnF4NZuuazktK4SXQ)\n",
    "> - [我的机器学习之路](https://mp.weixin.qq.com/s/2-V1kFbSzi3Z5UJ7GV_WBw)\n",
    "> - [我的机器学习入门清单及路线！](https://mp.weixin.qq.com/s/KeD9kPG8PowlKrz69zSHNQ)\n",
    "> - [机器学习神器Scikit-Learn保姆教程！](https://mp.weixin.qq.com/s/4NSVh1HniNT4CGakzHxm1w)\n",
    "> - [《Datawhale人工智能培养方案》发布！](https://mp.weixin.qq.com/s/JY9RcZ-EquNWdT5k6tLEWg)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.10.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
