{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "OoasdhSAp0zJ" }, "source": [ "##### Copyright 2019 The TensorFlow Authors." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "cellView": "form", "execution": { "iopub.execute_input": "2024-01-11T21:53:57.110235Z", "iopub.status.busy": "2024-01-11T21:53:57.110023Z", "iopub.status.idle": "2024-01-11T21:53:57.113971Z", "shell.execute_reply": "2024-01-11T21:53:57.113278Z" }, "id": "cIrwotvGqsYh" }, "outputs": [], "source": [ "#@title Licensed under the Apache License, Version 2.0 (the \"License\");\n", "# you may not use this file except in compliance with the License.\n", "# You may obtain a copy of the License at\n", "#\n", "# https://www.apache.org/licenses/LICENSE-2.0\n", "#\n", "# Unless required by applicable law or agreed to in writing, software\n", "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", "# See the License for the specific language governing permissions and\n", "# limitations under the License.\n" ] }, { "cell_type": "markdown", "metadata": { "id": "C81KT2D_j-xR" }, "source": [ "# Estimator で線形モデルを構築する\n", "\n", "\n", " \n", " \n", " \n", " \n", "
TensorFlow.org で表示Google Colab で実行GitHub でソースを表示ノートブックをダウンロード
" ] }, { "cell_type": "markdown", "metadata": { "id": "JOccPOFMm5Tc" }, "source": [ "> 警告: 新しいコードには Estimators は推奨されません。Estimators は `v1.Session` スタイルのコードを実行しますが、これは正しく記述するのはより難しく、特に TF 2 コードと組み合わせると予期しない動作をする可能性があります。Estimators は、[互換性保証](https://tensorflow.org/guide/versions)の対象となりますが、セキュリティの脆弱性以外の修正は行われません。詳細については、[移行ガイド](https://tensorflow.org/guide/migrate)を参照してください。" ] }, { "cell_type": "markdown", "metadata": { "id": "tUP8LMdYtWPz" }, "source": [ "## 概要\n", "\n", "このエンドツーエンドのウォークスルーでは、`tf.estimator` API を使用してロジスティック回帰モデルをトレーニングします。このモデルはほかのより複雑なアルゴリズムの基準としてよく使用されます。\n", "\n", "注意: Keras によるロジスティック回帰の例は[こちら](https://tensorflow.org/guide/migrate/tutorials/keras/regression)からご覧いただけます。これは、本チュートリアルよりも推奨されます。\n" ] }, { "cell_type": "markdown", "metadata": { "id": "vkC_j6VpqrDw" }, "source": [ "## セットアップ" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:53:57.117673Z", "iopub.status.busy": "2024-01-11T21:53:57.117423Z", "iopub.status.idle": "2024-01-11T21:53:57.934590Z", "shell.execute_reply": "2024-01-11T21:53:57.933800Z" }, "id": "rutbJGmpqvm3" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting sklearn\r\n", " Using cached sklearn-0.0.post12.tar.gz (2.6 kB)\r\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " Preparing metadata (setup.py) ... \u001b[?25l-\b \berror\r\n", " \u001b[1;31merror\u001b[0m: \u001b[1msubprocess-exited-with-error\u001b[0m\r\n", " \r\n", " \u001b[31m×\u001b[0m \u001b[32mpython setup.py egg_info\u001b[0m did not run successfully.\r\n", " \u001b[31m│\u001b[0m exit code: \u001b[1;36m1\u001b[0m\r\n", " \u001b[31m╰─>\u001b[0m \u001b[31m[15 lines of output]\u001b[0m\r\n", " \u001b[31m \u001b[0m The 'sklearn' PyPI package is deprecated, use 'scikit-learn'\r\n", " \u001b[31m \u001b[0m rather than 'sklearn' for pip commands.\r\n", " \u001b[31m \u001b[0m \r\n", " \u001b[31m \u001b[0m Here is how to fix this error in the main use cases:\r\n", " \u001b[31m \u001b[0m - use 'pip install scikit-learn' rather than 'pip install sklearn'\r\n", " \u001b[31m \u001b[0m - replace 'sklearn' by 'scikit-learn' in your pip requirements files\r\n", " \u001b[31m \u001b[0m (requirements.txt, setup.py, setup.cfg, Pipfile, etc ...)\r\n", " \u001b[31m \u001b[0m - if the 'sklearn' package is used by one of your dependencies,\r\n", " \u001b[31m \u001b[0m it would be great if you take some time to track which package uses\r\n", " \u001b[31m \u001b[0m 'sklearn' instead of 'scikit-learn' and report it to their issue tracker\r\n", " \u001b[31m \u001b[0m - as a last resort, set the environment variable\r\n", " \u001b[31m \u001b[0m SKLEARN_ALLOW_DEPRECATED_SKLEARN_PACKAGE_INSTALL=True to avoid this error\r\n", " \u001b[31m \u001b[0m \r\n", " \u001b[31m \u001b[0m More information is available at\r\n", " \u001b[31m \u001b[0m https://github.com/scikit-learn/sklearn-pypi-package\r\n", " \u001b[31m \u001b[0m \u001b[31m[end of output]\u001b[0m\r\n", " \r\n", " \u001b[1;35mnote\u001b[0m: This error originates from a subprocess, and is likely not a problem with pip.\r\n", "\u001b[1;31merror\u001b[0m: \u001b[1mmetadata-generation-failed\u001b[0m\r\n", "\r\n", "\u001b[31m×\u001b[0m Encountered error while generating package metadata.\r\n", "\u001b[31m╰─>\u001b[0m See above for output.\r\n", "\r\n", "\u001b[1;35mnote\u001b[0m: This is an issue with the package mentioned above, not pip.\r\n", "\u001b[1;36mhint\u001b[0m: See above for details.\r\n", "\u001b[?25h" ] } ], "source": [ "!pip install sklearn\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:53:57.938673Z", "iopub.status.busy": "2024-01-11T21:53:57.938384Z", "iopub.status.idle": "2024-01-11T21:53:58.586191Z", "shell.execute_reply": "2024-01-11T21:53:58.585529Z" }, "id": "54mb4J9PqqDh" }, "outputs": [], "source": [ "import os\n", "import sys\n", "\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from IPython.display import clear_output\n", "from six.moves import urllib" ] }, { "cell_type": "markdown", "metadata": { "id": "fsjkwfsGOBMT" }, "source": [ "## Titanic データセットを読み込む\n", "\n", "Titanic データセットを使用して、性別、年齢、船室クラスなどの特性に基づき、(やや悪趣味ではありますが)乗船者の生存を予測することを目標とします。" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:53:58.590601Z", "iopub.status.busy": "2024-01-11T21:53:58.590089Z", "iopub.status.idle": "2024-01-11T21:54:00.532818Z", "shell.execute_reply": "2024-01-11T21:54:00.531876Z" }, "id": "bNiwh-APcRVD" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2024-01-11 21:53:58.890761: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", "2024-01-11 21:53:58.890806: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", "2024-01-11 21:53:58.892379: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n" ] } ], "source": [ "import tensorflow.compat.v2.feature_column as fc\n", "\n", "import tensorflow as tf" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:00.536979Z", "iopub.status.busy": "2024-01-11T21:54:00.536521Z", "iopub.status.idle": "2024-01-11T21:54:00.640919Z", "shell.execute_reply": "2024-01-11T21:54:00.640309Z" }, "id": "DSeMKcx03d5R" }, "outputs": [], "source": [ "# Load dataset.\n", "dftrain = pd.read_csv('https://storage.googleapis.com/tf-datasets/titanic/train.csv')\n", "dfeval = pd.read_csv('https://storage.googleapis.com/tf-datasets/titanic/eval.csv')\n", "y_train = dftrain.pop('survived')\n", "y_eval = dfeval.pop('survived')" ] }, { "cell_type": "markdown", "metadata": { "id": "jjm4Qj0u7_cp" }, "source": [ "## データを確認する" ] }, { "cell_type": "markdown", "metadata": { "id": "UrQzxKKh4d6u" }, "source": [ "データセットには、次の特徴量が含まれます。" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:00.644566Z", "iopub.status.busy": "2024-01-11T21:54:00.644098Z", "iopub.status.idle": "2024-01-11T21:54:00.657256Z", "shell.execute_reply": "2024-01-11T21:54:00.656626Z" }, "id": "rTjugo3n308g" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sexagen_siblings_spousesparchfareclassdeckembark_townalone
0male22.0107.2500ThirdunknownSouthamptonn
1female38.01071.2833FirstCCherbourgn
2female26.0007.9250ThirdunknownSouthamptony
3female35.01053.1000FirstCSouthamptonn
4male28.0008.4583ThirdunknownQueenstowny
\n", "
" ], "text/plain": [ " sex age n_siblings_spouses parch fare class deck \\\n", "0 male 22.0 1 0 7.2500 Third unknown \n", "1 female 38.0 1 0 71.2833 First C \n", "2 female 26.0 0 0 7.9250 Third unknown \n", "3 female 35.0 1 0 53.1000 First C \n", "4 male 28.0 0 0 8.4583 Third unknown \n", "\n", " embark_town alone \n", "0 Southampton n \n", "1 Cherbourg n \n", "2 Southampton y \n", "3 Southampton n \n", "4 Queenstown y " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dftrain.head()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:00.660299Z", "iopub.status.busy": "2024-01-11T21:54:00.659922Z", "iopub.status.idle": "2024-01-11T21:54:00.674346Z", "shell.execute_reply": "2024-01-11T21:54:00.673716Z" }, "id": "y86q1fj44lZs" }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
agen_siblings_spousesparchfare
count627.000000627.000000627.000000627.000000
mean29.6313080.5454550.37958534.385399
std12.5118181.1510900.79299954.597730
min0.7500000.0000000.0000000.000000
25%23.0000000.0000000.0000007.895800
50%28.0000000.0000000.00000015.045800
75%35.0000001.0000000.00000031.387500
max80.0000008.0000005.000000512.329200
\n", "
" ], "text/plain": [ " age n_siblings_spouses parch fare\n", "count 627.000000 627.000000 627.000000 627.000000\n", "mean 29.631308 0.545455 0.379585 34.385399\n", "std 12.511818 1.151090 0.792999 54.597730\n", "min 0.750000 0.000000 0.000000 0.000000\n", "25% 23.000000 0.000000 0.000000 7.895800\n", "50% 28.000000 0.000000 0.000000 15.045800\n", "75% 35.000000 1.000000 0.000000 31.387500\n", "max 80.000000 8.000000 5.000000 512.329200" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dftrain.describe()" ] }, { "cell_type": "markdown", "metadata": { "id": "8JSa_duD4tFZ" }, "source": [ "トレーニングセットと評価セットには、それぞれ 627 個と 264 個の例があります。" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:00.677689Z", "iopub.status.busy": "2024-01-11T21:54:00.677466Z", "iopub.status.idle": "2024-01-11T21:54:00.681720Z", "shell.execute_reply": "2024-01-11T21:54:00.681117Z" }, "id": "Fs3Nu5pV4v5J" }, "outputs": [ { "data": { "text/plain": [ "(627, 264)" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dftrain.shape[0], dfeval.shape[0]" ] }, { "cell_type": "markdown", "metadata": { "id": "RxCA4Nr45AfF" }, "source": [ "乗船者の大半は 20 代から 30 代です。" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:00.684877Z", "iopub.status.busy": "2024-01-11T21:54:00.684507Z", "iopub.status.idle": "2024-01-11T21:54:00.867254Z", "shell.execute_reply": "2024-01-11T21:54:00.866677Z" }, "id": "RYeCMm7K40ZN" }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dftrain.age.hist(bins=20)" ] }, { "cell_type": "markdown", "metadata": { "id": "DItSwJ_B5B0f" }, "source": [ "男性の乗船者数は女性の乗船者数の約 2 倍です。" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:00.870721Z", "iopub.status.busy": "2024-01-11T21:54:00.870316Z", "iopub.status.idle": "2024-01-11T21:54:00.984998Z", "shell.execute_reply": "2024-01-11T21:54:00.984417Z" }, "id": "b03dVV9q5Dv2" }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlEAAAGdCAYAAAAyviaMAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAdz0lEQVR4nO3de5DV9Xn48WeXywaGvYjgwgrCEgzGIhSkwmpUJhDEWKOSNgZNRozRRtFGkYyBtF5iJ2vq1PGS1LRmjJJpwhgbTacKeIVESgSUVdGWCEGXNqw0OLDgKij7+f3hcH5dufpx4eyur9fMzuye8z2H5+G7uu85Z8+hJKWUAgCAD6W02AMAAHRGIgoAIIOIAgDIIKIAADKIKACADCIKACCDiAIAyCCiAAAydC/2AF1Va2tr/OEPf4jy8vIoKSkp9jgAwEFIKcW2bduipqYmSkv3/1iTiDpE/vCHP8TgwYOLPQYAkGHDhg0xaNCg/R4jog6R8vLyiHj/JFRUVBR5GgDgYDQ3N8fgwYMLP8f3R0QdIrufwquoqBBRANDJHMyv4vjFcgCADCIKACCDiAIAyCCiAAAyiCgAgAwiCgAgg4gCAMggogAAMogoAIAMIgoAIIOIAgDIIKIAADKIKACADCIKACCDiAIAyCCiAAAyiCgAgAwiCgAgg4gCAMggogAAMogoAIAMIgoAIIOIAgDIIKIAADKIKACADCIKACCDiAIAyCCiAAAyiCgAgAwiCgAgg4gCAMggogAAMogoAIAMIgoAIIOIAgDIIKIAADKIKACADCIKACCDiAIAyCCiAAAyiCgAgAwiCgAgg4gCAMjQvdgDdHUjb1gUpWW9iz0GcIi8dstZxR4BKBKPRAEAZBBRAAAZRBQAQAYRBQCQQUQBAGQQUQAAGUQUAEAGEQUAkEFEAQBkEFEAABlEFABABhEFAJBBRAEAZBBRAAAZRBQAQAYRBQCQQUQBAGQQUQAAGUQUAEAGEQUAkEFEAQBkEFEAABlEFABABhEFAJBBRAEAZBBRAAAZRBQAQAYRBQCQQUQBAGQQUQAAGUQUAEAGEQUAkEFEAQBkEFEAABlEFABABhEFAJBBRAEAZBBRAAAZRBQAQAYRBQCQoagRlVKKyy67LPr27RslJSXR0NBQlDlee+21ov75AEDn072Yf/jChQvjvvvui8WLF8ewYcOiX79+xRwHAOCgFTWi1q1bFwMHDoyTTz65mGMAAHxoRXs6b8aMGXHVVVdFY2NjlJSUxNChQ6O1tTXq6+ujtrY2evXqFaNHj44HH3ywcJvFixdHSUlJLFq0KMaMGRO9evWKz372s7Fp06ZYsGBBfPrTn46Kioq44IILoqWlpXC7hQsXxmc+85moqqqKI488Mv78z/881q1bt9/5Vq9eHWeeeWb06dMnqqur46tf/Wr88Y9/PGR/HwBA51K0iLrjjjviu9/9bgwaNCg2btwYK1asiPr6+pg3b1786Ec/ipdffjmuueaa+MpXvhJLlixpc9sbb7wxfvCDH8R//Md/xIYNG+JLX/pS3H777fGzn/0sHnnkkXjsscfirrvuKhz/1ltvxaxZs2LlypXx5JNPRmlpaZx33nnR2tq619m2bNkSn/3sZ2PMmDGxcuXKWLhwYbzxxhvxpS99aZ/77NixI5qbm9t8AABdV9GezqusrIzy8vLo1q1bDBgwIHbs2BHf+9734oknnoi6urqIiBg2bFg888wz8U//9E9x+umnF277d3/3d3HKKadERMQll1wSc+bMiXXr1sWwYcMiIuIv/uIv4umnn47rrrsuIiK++MUvtvmz77333ujfv3+88sorMXLkyD1m+8EPfhBjxoyJ733ve21uM3jw4Pjd734Xn/rUp/a4TX19fdx0000f8W8FAOgsOsxbHKxduzZaWlric5/7XPTp06fwMW/evD2eehs1alTh8+rq6ujdu3choHZftmnTpsLXr776akyfPj2GDRsWFRUVMXTo0IiIaGxs3OssL7zwQjz99NNt5jjuuOMiIvb5NOCcOXNi69athY8NGzZk/T0AAJ1DUX+x/P/avn17REQ88sgjcfTRR7e5rqysrM3XPXr0KHxeUlLS5uvdl/3fp+rOPvvsGDJkSNxzzz1RU1MTra2tMXLkyNi5c+c+Zzn77LPj+9///h7XDRw4cK+3KSsr22NOAKDr6jARdfzxx0dZWVk0Nja2eeruo9q8eXOsWbMm7rnnnjj11FMjIuKZZ57Z723Gjh0b//qv/xpDhw6N7t07zF8RANCBdJin88rLy2P27NlxzTXXxP333x/r1q2L559/Pu666664//77s+/3iCOOiCOPPDL++Z//OdauXRtPPfVUzJo1a7+3mTlzZrz55psxffr0WLFiRaxbty4WLVoUF198ceza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+c530i9/+csUEemhhx5qc/0tt9ySKisr08MPP5xeeOGF9IUvfCHV1tamt99+u3DM1KlT0+jRo9Nvf/vb9Jvf/CYNHz48TZ8+/TBvsm8H2vGiiy5KU6dObXNu33zzzTbHdPQdU0rpjDPOSD/5yU/S6tWrU0NDQ/r85z+fjjnmmLR9+/bCMQf6Pn3vvffSyJEj0+TJk9OqVavSo48+mvr165fmzJlTjJX2cDA7nn766enSSy9tcz63bt1auL6j75hSSv/2b/+WHnnkkfS73/0urVmzJs2dOzf16NEjrV69OqXU+c9jSgfesSucxw9avnx5Gjp0aBo1alT65je/Wbi8s59PEXUInHTSSWnmzJmFr3ft2pVqampSfX19EafKd8MNN6TRo0fv9botW7akHj16pF/84heFy/7zP/8zRURatmzZYZrwo/tgYLS2tqYBAwakW2+9tXDZli1bUllZWfr5z3+eUkrplVdeSRGRVqxYUThmwYIFqaSkJP3P//zPYZv9YO0ros4555x93qaz7bjbpk2bUkSkJUuWpJQO7vv00UcfTaWlpampqalwzN13350qKirSjh07Du8CB+GDO6b0/g/f//sD6oM62467HXHEEenHP/5xlzyPu+3eMaWudx63bduWjj322PT444+32a0rnE9P57WznTt3xnPPPReTJ08uXFZaWhqTJ0+OZcuWFXGyj+bVV1+NmpqaGDZsWFx44YXR2NgYERHPPfdcvPvuu232Pe644+KYY47p1PuuX78+mpqa2uxVWVkZ48ePL+y1bNmyqKqqinHjxhWOmTx5cpSWlsazzz572GfOtXjx4jjqqKNixIgRcfnll8fmzZsL13XWHbdu3RoR//8fAj+Y79Nly5bFCSecENXV1YVjzjjjjGhubo6XX375ME5/cD64427/8i//Ev369YuRI0fGnDlzoqWlpXBdZ9tx165dMX/+/Hjrrbeirq6uS57HD+64W1c6jzNnzoyzzjqrzXmL6Br/XfoHiNvZH//4x9i1a1ebEx4RUV1dHf/1X/9VpKk+mvHjx8d9990XI0aMiI0bN8ZNN90Up556aqxevTqampqiZ8+eUVVV1eY21dXV0dTUVJyB28Hu2fd2Hndf19TUFEcddVSb67t37x59+/btNLtPnTo1pk2bFrW1tbFu3bqYO3dunHnmmbFs2bLo1q1bp9yxtbU1rr766jjllFNi5MiREREH9X3a1NS01/O9+7qOZG87RkRccMEFMWTIkKipqYkXX3wxrrvuulizZk388pe/jIjOs+NLL70UdXV18c4770SfPn3ioYceiuOPPz4aGhq6zHnc144RXec8RkTMnz8/nn/++VixYsUe13WF/y5FFAd05plnFj4fNWpUjB8/PoYMGRIPPPBA9OrVq4iT8VF9+ctfLnx+wgknxKhRo+KTn/xkLF68OCZNmlTEyfLNnDkzVq9eHc8880yxRzlk9rXjZZddVvj8hBNOiIEDB8akSZNi3bp18clPfvJwj5ltxIgR0dDQEFu3bo0HH3wwLrrooliyZEmxx2pX+9rx+OOP7zLnccOGDfHNb34zHn/88fjEJz5R7HEOCU/ntbN+/fpFt27d9nh1wRtvvBEDBgwo0lTtq6qqKj71qU/F2rVrY8CAAbFz587YsmVLm2M6+767Z9/feRwwYEBs2rSpzfXvvfdevPnmm51292HDhkW/fv1i7dq1EdH5drzyyivj3//93+Ppp5+OQYMGFS4/mO/TAQMG7PV8776uo9jXjnszfvz4iIg257Mz7NizZ88YPnx4nHjiiVFfXx+jR4+OO+64o0udx33tuDed9Tw+99xzsWnTphg7dmx07949unfvHkuWLIk777wzunfvHtXV1Z3+fIqodtazZ8848cQT48knnyxc1traGk8++WSb57s7s+3bt8e6deti4MCBceKJJ0aPHj3a7LtmzZpobGzs1PvW1tbGgAED2uzV3Nwczz77bGGvurq62LJlSzz33HOFY5566qlobW0t/E+vs/nv//7v2Lx5cwwcODAiOs+OKaW48sor46GHHoqnnnoqamtr21x/MN+ndXV18dJLL7WJxscffzwqKioKT7MU04F23JuGhoaIiDbnsyPvuC+tra2xY8eOLnEe92X3jnvTWc/jpEmT4qWXXoqGhobCx7hx4+LCCy8sfN7pz2exf7O9K5o/f34qKytL9913X3rllVfSZZddlqqqqtq8uqAzufbaa9PixYvT+vXr09KlS9PkyZNTv3790qZNm1JK779E9ZhjjklPPfVUWrlyZaqrq0t1dXVFnvrAtm3bllatWpVWrVqVIiLddtttadWqVen1119PKb3/FgdVVVXpV7/6VXrxxRfTOeecs9e3OBgzZkx69tln0zPPPJOOPfbYDvXy//3tuG3btjR79uy0bNmytH79+vTEE0+ksWPHpmOPPTa98847hfvo6DumlNLll1+eKisr0+LFi9u8LLylpaVwzIG+T3e/lHrKlCmpoaEhLVy4MPXv37/DvJT6QDuuXbs2ffe7300rV65M69evT7/61a/SsGHD0mmnnVa4j46+Y0opffvb305LlixJ69evTy+++GL69re/nUpKStJjjz2WUur85zGl/e/YVc7jvnzwlYed/XyKqEPkrrvuSsccc0zq2bNnOumkk9Jvf/vbYo+U7fzzz08DBw5MPXv2TEcffXQ6//zz09q1awvXv/322+mKK65IRxxxROrdu3c677zz0saNG4s48cF5+umnU0Ts8XHRRRellN5/m4O//du/TdXV1amsrCxNmjQprVmzps19bN68OU2fPj316dMnVVRUpIsvvjht27atCNvs3f52bGlpSVOmTEn9+/dPPXr0SEOGDEmXXnrpHrHf0XdMKe11x4hIP/nJTwrHHMz36WuvvZbOPPPM1KtXr9SvX7907bXXpnffffcwb7N3B9qxsbExnXbaaalv376prKwsDR8+PH3rW99q8/5CKXXsHVNK6Wtf+1oaMmRI6tmzZ+rfv3+aNGlSIaBS6vznMaX979hVzuO+fDCiOvv5LEkppcP3uBcAQNfgd6IAADKIKACADCIKACCDiAIAyCCiAAAyiCgAgAwiCgAgg4gCAMggogAAMogoAIAMIgoAIIOIAgDI8P8A77LSuqzavtYAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dftrain.sex.value_counts().plot(kind='barh')" ] }, { "cell_type": "markdown", "metadata": { "id": "rK6WQ29q5Jf5" }, "source": [ "乗船者の大半は「3 等」の船室クラスを利用していました。" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:00.988232Z", "iopub.status.busy": "2024-01-11T21:54:00.987764Z", "iopub.status.idle": "2024-01-11T21:54:01.099370Z", "shell.execute_reply": "2024-01-11T21:54:01.098688Z" }, "id": "dgpJVeCq5Fgd" }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlYAAAGdCAYAAADQYj31AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAg70lEQVR4nO3de3SU9Z348c8gEMAQotwSaqAqCCqCIsLB7qIVFBArXtYV9WxFV6y3s1rv6FG8bA9I1d21x3rpRdy2awVdr4vbpShYEbUgFK0UL40LLokolAQv3J/fHz3MrymgIXzJmPB6nTPnZOZ5MvnMlyfm7TMzSS7LsiwAANhlLQo9AABAcyGsAAASEVYAAIkIKwCARIQVAEAiwgoAIBFhBQCQiLACAEikZaEH2BNs2bIlVqxYEe3bt49cLlfocQCAesiyLNauXRvdunWLFi3qdy5KWDWCFStWREVFRaHHAAAaYPny5bHffvvVa19h1Qjat28fEX/+hykpKSnwNABAfdTW1kZFRUX+53h9CKtGsPXpv5KSEmEFAE3MzryMx4vXAQASEVYAAIkIKwCARIQVAEAiwgoAIBFhBQCQiLACAEhEWAEAJCKsAAASEVYAAIkIKwCARIQVAEAiwgoAIBFhBQCQiLACAEhEWAEAJCKsAAASEVYAAIkIKwCARIQVAEAiwgoAIBFhBQCQiLACAEhEWAEAJCKsAAASEVYAAIkIKwCARFoWeoA9Sd+Jv4oWRe0KPQbstPcnjy70CABNgjNWAACJCCsAgESEFQBAIsIKACARYQUAkIiwAgBIRFgBACQirAAAEhFWAACJCCsAgESEFQBAIsIKACARYQUAkIiwAgBIRFgBACQirAAAEhFWAACJCCsAgESEFQBAIsIKACARYQUAkIiwAgBIRFgBACQirAAAEhFWAACJCKsGGDduXJxyyimFHgMA+IopaFh99NFHcfHFF0f37t2jqKgoysrKYsSIETF37txCjgUA0CAtC/nFTz/99NiwYUM8/PDDccABB8SHH34Ys2bNilWrVhVyLACABinYGas1a9bEb37zm7jjjjvim9/8ZvTo0SMGDRoUEyZMiJNPPjm/zwUXXBCdO3eOkpKSOO644+J3v/tdnft55pln4qijjoo2bdpEp06d4tRTT81v+9Of/hTf/va3Y5999ol27drFqFGj4p133slvnzp1apSWlsavfvWrOPjgg6O4uDhGjhwZVVVV+X02b94cV155ZZSWlkbHjh3j2muvjSzLdvPqAABNUcHCqri4OIqLi+PJJ5+M9evXb3efM844I1auXBnPPfdcLFiwIAYMGBDDhg2L1atXR0TEf/3Xf8Wpp54aJ554YixcuDBmzZoVgwYNyn/+uHHjYv78+fH000/HvHnzIsuyOPHEE2Pjxo35fT777LO4884742c/+1m8+OKLsWzZsrj66qvz2++6666YOnVq/PSnP42XXnopVq9eHU888cQXPrb169dHbW1tnQsA0PzlsgKefnn88cdj/Pjx8fnnn8eAAQPimGOOibFjx0a/fv3ipZdeitGjR8fKlSujqKgo/zk9e/aMa6+9Ni688MI4+uij44ADDoif//zn29z3O++8EwcddFDMnTs3jj766IiIWLVqVVRUVMTDDz8cZ5xxRkydOjXOO++8ePfdd+PAAw+MiIgf/vCHcdttt0V1dXVERHTr1i2++93vxjXXXBMREZs2bYr9998/jjzyyHjyySe3+7huueWWuPXWW7e5veKKadGiqN0urRkUwvuTRxd6BIBGV1tbGx06dIiampooKSmp1+cU9MXrp59+eqxYsSKefvrpGDlyZMyePTsGDBgQU6dOjd/97nfxySefRMeOHfNnt4qLi6OysjLee++9iIhYtGhRDBs2bLv3vWTJkmjZsmUMHjw4f1vHjh2jd+/esWTJkvxt7dq1y0dVRER5eXmsXLkyIiJqamqiqqqqzn20bNkyBg4c+IWPa8KECVFTU5O/LF++fOcXBwBocgr64vWIiDZt2sTxxx8fxx9/fNx0001xwQUXxMSJE+OSSy6J8vLymD179jafU1paGhERbdu23eWv36pVqzrXc7ncLr+GqqioqM5ZNgBgz/CV+z1WhxxySHz66acxYMCAqK6ujpYtW0bPnj3rXDp16hQREf369YtZs2Zt934OPvjg2LRpU7z66qv521atWhVLly6NQw45pF6zdOjQIcrLy+vcx6ZNm2LBggW78AgBgOaqYGesVq1aFWeccUacf/750a9fv2jfvn3Mnz8/pkyZEmPGjInhw4fHkCFD4pRTTokpU6bEQQcdFCtWrMi/YH3gwIExceLEGDZsWBx44IExduzY2LRpU8yYMSOuu+666NWrV4wZMybGjx8fDzzwQLRv3z6uv/76+NrXvhZjxoyp95yXX355TJ48OXr16hV9+vSJu+++O9asWbP7FgYAaLIKFlbFxcUxePDg+Jd/+Zd47733YuPGjVFRURHjx4+PG264IXK5XMyYMSNuvPHGOO+88+Kjjz6KsrKyGDp0aHTt2jUiIo499tiYPn163H777TF58uQoKSmJoUOH5r/GQw89FJdffnmcdNJJsWHDhhg6dGjMmDFjm6f/vshVV10VVVVVce6550aLFi3i/PPPj1NPPTVqamqSrwkA0LQV9F2Be4qt7yrwrkCaKu8KBPZETe5dgQAAzYmwAgBIRFgBACQirAAAEhFWAACJCCsAgESEFQBAIsIKACARYQUAkIiwAgBIRFgBACQirAAAEhFWAACJCCsAgESEFQBAIsIKACARYQUAkIiwAgBIRFgBACQirAAAEhFWAACJCCsAgESEFQBAIsIKACCRloUeYE/y5q0joqSkpNBjAAC7iTNWAACJCCsAgESEFQBAIsIKACARYQUAkIiwAgBIRFgBACQirAAAEhFWAACJCCsAgESEFQBAIsIKACARYQUAkIiwAgBIRFgBACQirAAAEhFWAACJCCsAgESEFQBAIsIKACARYQUAkIiwAgBIRFgBACQirAAAEhFWAACJCCsAgESEFQBAIsIKACARYQUAkIiwAgBIRFgBACQirAAAEhFWAACJCCsAgESEFQBAIsIKACARYQUAkIiwAgBIRFgBACQirAAAEhFWAACJCCsAgESEFQBAIsIKACARYQUAkIiwAgBIRFgBACQirAAAEhFWAACJCCsAgESEFQBAIsIKACARYQUAkIiwAgBIRFgBACQirAAAEhFWAACJCCsAgESEFQBAIsIKACARYQUAkEjLQg+wJ+k78VfRoqhdoceAPcL7k0cXegRgD+SMFQBAIsIKACARYQUAkIiwAgBIRFgBACQirAAAEhFWAACJCCsAgESEFQBAIsIKACARYQUAkIiwAgBIRFgBACQirAAAEhFWAACJNCisXn/99XjjjTfy15966qk45ZRT4oYbbogNGzYkGw4AoClpUFh95zvfibfffjsiIv74xz/G2LFjo127djF9+vS49tprkw4IANBUNCis3n777Tj88MMjImL69OkxdOjQ+I//+I+YOnVqPP744ynnAwBoMhoUVlmWxZYtWyIi4te//nWceOKJERFRUVERH3/8cbrpAACakAaF1cCBA+Of//mf42c/+1nMmTMnRo8eHRERlZWV0bVr16QDAgA0FQ0Kq3/913+N119/PS677LK48cYbo2fPnhER8dhjj8XRRx+ddEAAgKaiZUM+qV+/fnXeFbjV97///dhrr712eSgAgKaoQWesli9fHh988EH++muvvRZXXHFF/Pu//3u0atUq2XAAAE1Jg8Lq7LPPjhdeeCEiIqqrq+P444+P1157LW688ca47bbbkg4IANBUNCis3nzzzRg0aFBEREybNi369u0bL7/8cvziF7+IqVOnppwvqWOPPTauuOKKQo8BADRTDQqrjRs3RlFRUUT8+dctnHzyyRER0adPn6iqqko3XQONGzcucrncNpcpU6bE7bffvkv3ncvl4sknn0wzKADQrDQorA499NC4//774ze/+U3MnDkzRo4cGRERK1asiI4dOyYdsKFGjhwZVVVVdS5HHnlktG/ffoef48/xAAC7okFhdccdd8QDDzwQxx57bJx11lnRv3//iIh4+umn808RFlpRUVGUlZXVuQwbNqzOU4Ff//rX4/bbb49vf/vbUVJSEhdeeGFs2LAhLrvssigvL482bdpEjx49YtKkSfn9IyJOPfXUyOVy+esAABEN/HULxx57bHz88cdRW1sb++yzT/72Cy+8MNq1a5dsuMZw5513xs033xwTJ06MiIh77rknnn766Zg2bVp07949li9fHsuXL4+IiN/+9rfRpUuXeOihh2LkyJE7/NUS69evj/Xr1+ev19bW7v4HAgAUXIPCKiJir732qhNVEfGVOoPz7LPPRnFxcf76qFGjtrvfcccdF1dddVX++rJly6JXr17xN3/zN5HL5aJHjx75bZ07d46IiNLS0igrK9vh1540aVLceuutu/oQAIAmpsFh9dhjj8W0adNi2bJl27w26fXXX9/lwXbVN7/5zbjvvvvy1/fee+8466yzttlv4MCBda6PGzcujj/++Ojdu3eMHDkyTjrppDjhhBN26mtPmDAhrrzyyvz12traqKio2MlHAAA0NQ16jdU999wT5513XnTt2jUWLlwYgwYNio4dO8Yf//jHHZ4Zamx777139OzZM38pLy/f4X5/acCAAVFZWRm33357fP755/H3f//38Xd/93c79bWLioqipKSkzgUAaP4aFFY//OEP48EHH4wf/OAH0bp167j22mtj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TSIizj777OjRo0d069YtFi9eHNddd10sXbo0/vM//zMimu+avPHGGzFkyJBYt25dFBcXxxNPPBGHHHJILFq0aI89Tna0JhGNe5wIK3arUaNG5T/u169fDB48OHr06BHTpk2Ltm3bFnAyvsrGjh2b//iwww6Lfv36xYEHHhizZ8+OYcOGFXCyxnHppZfGm2++Wef1iHu6Ha3JX76u7rDDDovy8vIYNmxYvPfee3HggQc29piNpnfv3rFo0aKoqamJxx57LM4999yYM2dOoccqqB2tySGHHNKox4mnAnejTp06xV577bXNuzE+/PDDKCsrK9BUhVVaWhoHHXRQvPvuu1FWVhYbNmyINWvW1NlnT1qfrY/zi46RsrKybd7ssGnTpli9evUes04HHHBAdOrUKd59992IaN5rctlll8Wzzz4bL7zwQuy333752+vz/VJWVrbdY2nrtqZqR2uyPYMHD46IqHOsNMc1ad26dfTs2TOOPPLImDRpUvTv3z/+7d/+bY8+Tna0JtuzO48TYbUbtW7dOo488siYNWtW/rYtW7bErFmz6jzvuyf55JNP4r333ovy8vI48sgjo1WrVnXWZ+nSpbFs2bI9Zn3233//KCsrq7MGtbW18eqrr+bXYMiQIbFmzZpYsGBBfp/nn38+tmzZkv+PQ3P3wQcfxKpVq6K8vDwimueaZFkWl112WTzxxBPx/PPPx/77719ne32+X4YMGRJvvPFGneicOXNmlJSU5J8SaUq+bE22Z9GiRRERdY6V5rQmO7Jly5ZYv379Hnmc7MjWNdme3XqcNOCF9uyEX/7yl1lRUVE2derU7K233souvPDCrLS0tM47D5qzq666Kps9e3ZWWVmZzZ07Nxs+fHjWqVOnbOXKlVmWZdlFF12Ude/ePXv++eez+fPnZ0OGDMmGDBlS4KnTWrt2bbZw4cJs4cKFWURkd999d7Zw4cLsf//3f7Msy7LJkydnpaWl2VNPPZUtXrw4GzNmTLb//vtnn3/+ef4+Ro4cmR1xxBHZq6++mr300ktZr169srPOOqtQD2mXfdGarF27Nrv66quzefPmZZWVldmvf/3rbMCAAVmvXr2ydevW5e+jua3JxRdfnHXo0CGbPXt2VlVVlb989tln+X2+7Ptl06ZNWd++fbMTTjghW7RoUfbf//3fWefOnbMJEyYU4iHtsi9bk3fffTe77bbbsvnz52eVlZXZU089lR1wwAHZ0KFD8/fR3NYky7Ls+uuvz+bMmZNVVlZmixcvzq6//vosl8tl//M//5Nl2Z53nGTZF69JYx8nwqoR/OAHP8i6d++etW7dOhs0aFD2yiuvFHqkRnPmmWdm5eXlWevWrbOvfe1r2Zlnnpm9++67+e2ff/55dskll2T77LNP1q5du+zUU0/NqqqqCjhxei+88EIWEdtczj333CzL/vwrF2666aasa9euWVFRUTZs2LBs6dKlde5j1apV2VlnnZUVFxdnJSUl2XnnnZetXbu2AI8mjS9ak88++yw74YQTss6dO2etWrXKevTokY0fP36b/xlpbmuyvfWIiOyhhx7K71Of75f3338/GzVqVNa2bdusU6dO2VVXXZVt3LixkR9NGl+2JsuWLcuGDh2a7bvvvllRUVHWs2fP7Jprrslqamrq3E9zWpMsy7Lzzz8/69GjR9a6deusc+fO2bBhw/JRlWV73nGSZV+8Jo19nOSyLMt27hwXAADb4zVWAACJCCsAgESEFQBAIsIKACARYQUAkIiwAgBIRFgBACQirAAAEhFWAACJCCsAgESEFQBAIsIKACCR/wdgUzFR0mBX4QAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "dftrain['class'].value_counts().plot(kind='barh')" ] }, { "cell_type": "markdown", "metadata": { "id": "FXJhGGL85TLp" }, "source": [ "女性は男性よりも生存する確率がはるかに高く、これは明らかにモデルの予測特徴量です。" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:01.102868Z", "iopub.status.busy": "2024-01-11T21:54:01.102232Z", "iopub.status.idle": "2024-01-11T21:54:01.220936Z", "shell.execute_reply": "2024-01-11T21:54:01.220365Z" }, "id": "lSZYa7c45Ttt" }, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 0, '% survive')" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlEAAAGwCAYAAACJjDBkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAitElEQVR4nO3deXTV9Z3w8U/CElATQFE2MwIioINoKCLBDanaKqUqziiKVB2traJToZzjuGLFilsV69aKC+AgWG2n0ykKjlScSqmogBVwI4DYUfSgshkbIPyeP/qYp3lAyv2SFV+vc3KO+eV37/18uCxvb+69ycuyLAsAAHKSX98DAAA0RiIKACCBiAIASCCiAAASiCgAgAQiCgAggYgCAEjQtL4H2F1t3bo13n///SgsLIy8vLz6HgcA2AlZlsWGDRuiY8eOkZ+/48eaRFQtef/996O4uLi+xwAAErz33nux//777/AcEVVLCgsLI+Kvd0JRUVE9TwMA7Iz169dHcXFx1b/jOyKiaskX38IrKioSUQDQyOzMU3E8sRwAIIGIAgBIIKIAABKIKACABCIKACCBiAIASCCiAAASiCgAgAQiCgAggYgCAEggogAAEogoAIAEIgoAIIGIAgBIIKIAABKIKACABCIKACCBiAIASCCiAAASiCgAgAQiCgAggYgCAEggogAAEogoAIAEIgoAIIGIAgBIIKIAABKIKACABCIKACCBiAIASCCiAAASiCgAgAQiCgAggYgCAEggogAAEogoAIAEIgoAIIGIAgBIIKIAABKIKACABCIKACCBiAIASCCiAAASNK3vAXZ3vcbOivyCPep7DHKw8pbB9T0CAI2AR6IAABKIKACABCIKACCBiAIASCCiAAASiCgAgAQiCgAggYgCAEggogAAEogoAIAEIgoAIIGIAgBIIKIAABKIKACABCIKACCBiAIASCCiAAASiCgAgAQiCgAggYgCAEggogAAEogoAIAEIgoAIIGIAgBIIKIAABKIKACABCIKACCBiAIASCCiAAASiCgAgAQiCgAggYgCAEggogAAEogoAIAEIgoAIIGIAgBIIKIAABKIKACABCIKACCBiAIASCCiAAASiKiIOP/88+O0006r7zEAgEZERAEAJBBRAAAJGl1EDRw4MC6//PK44oorok2bNtGuXbuYOHFifPbZZ3HBBRdEYWFh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vPLKKzF79uzIz8+P008/PbZu3brd2dauXRuDBg2KkpKSeOWVV2LmzJnx4Ycfxplnnvml+4wfPz5atWpV9VFcXFwzv1AAQIOUl2VZVl83PmHChJgwYUKsXLkyKioqYu+9947nnnsuSktLq8656KKLory8PB5//PGYM2dOHH/88fHcc8/F17/+9YiIuOWWW+Kqq66KsrKy6Nq1a0REfP/734+VK1fGzJkzt3u7a9asiX333Tdef/316NWrV6xcuTK6dOkSCxcujMMPPzxuuumm+P3vfx+zZs2qusyf//znKC4ujrfeeiu6d+++zXVWVFRERUVF1efr16+P4uLiKL7iF5FfsEeN/HoBAH+18pbBtXK969evj1atWsW6deuiqKhoh+fW63Oi/tayZcuivLw8TjzxxGrHN23aFCUlJdWO9e7du+q/27VrF3vssUdVQH1xbP78+VWfv/POO3H99dfHSy+9FGvWrKl6BGrVqlXRq1evbWZ57bXX4vnnn4+99tprm6+VlZVtN6IKCgqioKBgJ7cFABq7BhNRGzdujIiIGTNmRKdOnap97f+Pk2bNmlX9d15eXrXPvzj2t9+qGzJkSBxwwAExceLE6NixY2zdujV69eoVmzZt+tJZhgwZErfeeus2X+vQoUNuiwEAu6UGE1GHHHJIFBQUxKpVq+K4446rsev9+OOP46233oqJEyfGMcccExERL7744g4v06dPn/jlL38ZnTt3jqZNG8wvEQDQgDSYdywvLCyMMWPGxKhRo2Ly5MlRVlYWCxYsiHvuuScmT56cfL1t2rSJffbZJx588MFYtmxZ/O53v4vRo0fv8DIjR46MTz75JM4+++x4+eWXo6ysLGbNmhUXXHBBVFZWJs8CAOw+GtTDLOPGjYt99903xo8fH8uXL4/WrVtHnz594uqrr06+zvz8/Jg+fXr867/+a/Tq1St69OgRP/3pT2PgwIFfepmOHTvG3Llz48orr4yTTjopKioq4oADDohvfvObkZ/fYLoTAKhH9frqvN3ZF8/u9+o8AKh5DeHVeR5WAQBIIKIAABKIKACABCIKACCBiAIASCCiAAASiCgAgAQiCgAggYgCAEggogAAEogoAIAEIgoAIIGIAgBIIKIAABKIKACABCIKACCBiAIASCCiAAASiCgAgAQiCgAggYgCAEggogAAEogoAIAEIgoAIIGIAgBIIKIAABKIKACABCIKACCBiAIASCCiAAASiCgAgAQiCgAggYgCAEggogAAEogoAIAEIgoAIIGIAgBIIKIAABKIKACABE3re4Dd3eIffSOKiorqewwAoIZ5JAoAIIGIAgBIIKIAABKIKACABCIKACCBiAIASCCiAAASiCgAgAQiCgAggYgCAEggogAAEogoAIAEIgoAIIGIAgBIIKIAABKIKACABCIKACCBiAIASCCiAAASiCgAgAQiCgAggYgCAEggogAAEogoAIAEIgoAIIGIAgBIIKIAABKIKACABCIKACCBiAIASCCiAAASiCgAgAQiCgAggYgCAEggogAAEogoAIAEIgoAIIGIAgBIIKIAABKIKACABCIKACCBiAIASCCiAAASiCgAgARN63uA3VWWZRERsX79+nqeBADYWV/8u/3Fv+M7IqJqyccffxwREcXFxfU8CQCQqw0bNkSrVq12eI6IqiV77713RESsWrXq794Ju4v169dHcXFxvPfee1FUVFTf49SJr9rOX7V9I+z8Vdj5q7ZvhJ13tHOWZbFhw4bo2LHj371OEVVL8vP/+nSzVq1afWV+g36hqKjIzru5r9q+EXb+Kviq7Rth5y+zsw9+eGI5AEACEQUAkEBE1ZKCgoIYO3ZsFBQU1PcodcbOu7+v2r4Rdv4q+KrtG2HnmpKX7cxr+AAAqMYjUQAACUQUAEACEQUAkEBEAQAkEFG74L777ovOnTtHixYt4sgjj4z58+fv8Pwnn3wyevbsGS1atIhDDz00nn766TqatObksvOSJUvijDPOiM6dO0deXl5MmDCh7gatQbnsPHHixDjmmGOiTZs20aZNmzjhhBP+7u+LhiaXfX/1q19F3759o3Xr1rHnnnvG4YcfHo899lgdTlszcv2z/IXp06dHXl5enHbaabU7YA3LZd9JkyZFXl5etY8WLVrU4bQ1I9f7eO3atTFy5Mjo0KFDFBQURPfu3Rvd39m57Dxw4MBt7ue8vLwYPHhwHU68a3K9jydMmBA9evSIli1bRnFxcYwaNSr+8pe/5HajGUmmT5+eNW/ePHvkkUeyJUuWZN/97nez1q1bZx9++OF2z587d27WpEmT7LbbbsuWLl2aXXvttVmzZs2y119/vY4nT5frzvPnz8/GjBmTTZs2LWvfvn1211131e3ANSDXnc8555zsvvvuyxYu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2nHHHZedd9551c7/xS9+kXXv3j1r3rx59o//+I/ZjBkz6njiXZfLzitWrMgiYpuP4447ru4H3wW57HzAAQdsd+exY8fW/eCJctn3mmuuybp165a1aNEia9OmTVZaWppNnz69HqbeNbn+Wf5bjS2isiy3fa+44oqqc9u1a5edcsop2YIFC+ph6l2T6338hz/8ITvyyCOzgoKCrGvXrtmPf/zjbMuWLXU89a7Jdec333wzi4js2WefreNJa0Yu+27evDm74YYbsgMPPDBr0aJFVlxcnF166aXZp59+mtNt5mVZLo9bAQAQ4TlRAABJRBQAQAIRBQCQQEQBACQQUQAACUQUAEACEQUAkEBEAQAkEFEAdWjSpEnRunXr+h4DqAEiCmh0pk6dGsXFxdGmTZsYPXp0ta+tXLkyunfvHuvXr6+n6XbsrLPOirfffru+xwBqgB/7AjQqa9asieLi4pg0aVJ07do1Bg8eHI888kh861vfioiIU045JS666KIYOnRonc5VWVkZeXl52/xkeGD35U870KgsX748WrVqFWeddVYcccQRcfzxx8cbb7wRERHTpk2LZs2a7VRAffrppzF8+PDYd999o2XLlnHQQQfFo48+GhERc+bMiby8vFi7dm3V+YsWLYq8vLxYuXJlRPy/b8v95je/iUMOOSQKCgrioYceihYtWlS7XETED37wgxg0aFC1y0VEvP3225GXlxdvvvlmtfPvuuuuOPDAA6s+X7x4cZx88smx1157Rbt27WLEiBGxZs2aXH7ZgFogooBG5aCDDory8vJYuHBhfPLJJ/Hyyy9H796949NPP43rrrsu7r333p26nuuuuy6WLl0azzzzTLzxxhvxwAMPRNu2bXOapby8PG699dZ46KGHYsmSJTF8+PBo3bp1/PKXv6w6p7KyMp544okYPnz4Npfv3r179O3bN6ZOnVrt+NSpU+Occ86JiIi1a9fGoEGDoqSkJF555ZWYOXNmfPjhh3HmmWfmNCtQ80QU0Ki0adMmJk+eHN/5zneiX79+8Z3vfCe+8Y1vxJgxY+Kyyy6LFStWRElJSfTq1SueeuqpL72eVatWRUlJSfTt2zc6d+4cJ5xwQgwZMiSnWTZv3hz3339/DBgwIHr06BF77rlnDBs2LB5//PGqc2bPnh1r166NM844Y7vXMXz48Jg2bVrV52+//Xa8+uqrVdF17733RklJSdx8883Rs2fPKCkpiUceeSSef/55z62Ceta0vgcAyNXpp58ep59+etXnL7zwQvzpT3+Ke+65J7p16xbTpk2L9u3bR79+/eLYY4+N/fbbb5vruOSSS+KMM86IBQsWxEknnRSnnXZaDBgwIKc5mjdvHr179652bPjw4dG/f/94//33o2PHjjF16tQYPHjwl74ib9iwYTFmzJj44x//GP3794+pU6dGnz59omfPnhER8dprr8Xzzz8fe+211zaXLSsri+7du+c0M1BzPBIFNGoVFRVx6aWXxs9//vNYtmxZbNmyJY477rjo0aNHdO/ePV566aXtXu7kk0+Od999N0aNGhXvv/9+fP3rX48xY8ZERFQ9OfxvX3ezefPmba6jZcuWkZeXV+3YEUccEQceeGBMnz49Pv/88/iP//iP7X4r7wvt27ePQYMGVT169fjjj1c7f+PGjTFkyJBYtGhRtY933nknjj322J38VQJqg4gCGrWbbropvvnNb0afPn2isrIytmzZUvW1zZs3R2Vl5Zdedt99943zzjsv/v3f/z0mTJgQDz74YNXxiIgPPvig6txFixbt9EzDhw+PqVOnxn/9139Ffn5+DB48+O+e/8QTT8S8efNi+fLlMWzYsKqv9enTJ5YsWRKdO3eObt26VfvYc889d3omoOaJKKDRWrp0aTzxxBNx4403RkREz549Iz8/Px5++OGYMWNGvPnmm3HEEUds97LXX399/Od//mcsW7YslixZEr/97W/j4IMPjoiIbt26RXFxcdxwww3xzjvvxIwZM+InP/nJTs81fPjwWLBgQfz4xz+Of/qnf4qCgoIdnj906NDYsGFDXHLJJXH88cdHx44dq742cuTI+OSTT+Lss8+Ol19+OcrKymLWrFlxwQUX7DAQgdonooBGKcuyuPjii+POO++sekSmZcuWMWnSpLjxxhvjwgsvjHvvvTc6deq03cs3b948rrrqqujdu3cce+yx0aRJk5g+fXpERDRr1iymTZsWb775ZvTu3TtuvfXWuOmmm3Z6tm7dukW/fv3iT3/60w6/lfeFwsLCGDJkSLz22mvbnN+xY8eYO3duVFZWxkknnRSHHnpoXHHFFdG6dWvvSQX1zJttAgAk8L8xAAAJRBQAQAIRBQCQQEQBACQQUQAACUQUAEACEQUAkEBEAQAkEFEAAAlEFABAAhEFAJDg/wC/H7j59XciQgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pd.concat([dftrain, y_train], axis=1).groupby('sex').survived.mean().plot(kind='barh').set_xlabel('% survive')" ] }, { "cell_type": "markdown", "metadata": { "id": "qCHvgeorEsHa" }, "source": [ "## モデルの特徴量エンジニアリング" ] }, { "cell_type": "markdown", "metadata": { "id": "Dhcq8Ds4mCtm" }, "source": [ "> 警告: このチュートリアルで説明されている tf.feature_columns モジュールは、新しいコードにはお勧めしません。Keras 前処理レイヤーがこの機能をカバーしています。移行手順については、[特徴量カラムの移行](https://www.tensorflow.org/guide/migrate/migrating_feature_columns)ガイドをご覧ください。tf.feature_columns モジュールは、TF1 Estimators で使用するために設計されました。[互換性保証](https://tensorflow.org/guide/versions)の対象となりますが、セキュリティの脆弱性以外の修正は行われません。" ] }, { "cell_type": "markdown", "metadata": { "id": "VqDKQLZn8L-B" }, "source": [ "Estimator は、モデルがどのように各行の入力特徴量を解釈すべきかを説明する[特徴量カラム](https://www.tensorflow.org/tutorials/structured_data/feature_columns)というシステムを使用しています。Estimator は数値入力のベクトルを期待しており、*特徴量カラム*にはモデルがどのように各特徴量を変換すべきかが記述されています。\n", "\n", "効率的なモデルを学習するには、適切な特徴カラムの選択と作成が鍵となります。特徴量カラムは、元の特徴量 `dict` の生の入力の 1 つ(*基本特徴量カラム*)または 1 つ以上の基本カラムに定義された変換を使って作成された新規カラム(*派生特徴量カラム*)のいずれかです。\n", "\n", "線形 Estimator は、数値特徴量とカテゴリカル特徴量の両方を利用します。特徴量カラムは TensorFlow Estimator と機能し、その目的はモデリングに使用される特徴量を定義することにあります。さらに、One-Hot エンコーディング、正規化、およびバケット化などのいくつかの特徴量エンジニアリング機能を提供します。" ] }, { "cell_type": "markdown", "metadata": { "id": "puZFOhTDkblt" }, "source": [ "### 基本特徴量カラム" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:01.224755Z", "iopub.status.busy": "2024-01-11T21:54:01.224137Z", "iopub.status.idle": "2024-01-11T21:54:01.231109Z", "shell.execute_reply": "2024-01-11T21:54:01.230549Z" }, "id": "GpveXYSsADS6" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/tmp/ipykernel_978618/567449645.py:8: categorical_column_with_vocabulary_list (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use Keras preprocessing layers instead, either directly or via the `tf.keras.utils.FeatureSpace` utility. Each of `tf.feature_column.*` has a functional equivalent in `tf.keras.layers` for feature preprocessing when training a Keras model.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/tmp/ipykernel_978618/567449645.py:11: numeric_column (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use Keras preprocessing layers instead, either directly or via the `tf.keras.utils.FeatureSpace` utility. Each of `tf.feature_column.*` has a functional equivalent in `tf.keras.layers` for feature preprocessing when training a Keras model.\n" ] } ], "source": [ "CATEGORICAL_COLUMNS = ['sex', 'n_siblings_spouses', 'parch', 'class', 'deck',\n", " 'embark_town', 'alone']\n", "NUMERIC_COLUMNS = ['age', 'fare']\n", "\n", "feature_columns = []\n", "for feature_name in CATEGORICAL_COLUMNS:\n", " vocabulary = dftrain[feature_name].unique()\n", " feature_columns.append(tf.feature_column.categorical_column_with_vocabulary_list(feature_name, vocabulary))\n", "\n", "for feature_name in NUMERIC_COLUMNS:\n", " feature_columns.append(tf.feature_column.numeric_column(feature_name, dtype=tf.float32))" ] }, { "cell_type": "markdown", "metadata": { "id": "Gt8HMtwOh9lJ" }, "source": [ "`input_function` は、入力パイプラインをストリーミングの手法でフィードする `tf.data.Dataset` にデータを変換する方法を指定します。`tf.data.Dataset` は、dataframe や csv 形式ファイルなど、複数のソースを取ることができます。" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:01.234094Z", "iopub.status.busy": "2024-01-11T21:54:01.233664Z", "iopub.status.idle": "2024-01-11T21:54:01.238237Z", "shell.execute_reply": "2024-01-11T21:54:01.237629Z" }, "id": "qVtrIHFnAe7w" }, "outputs": [], "source": [ "def make_input_fn(data_df, label_df, num_epochs=10, shuffle=True, batch_size=32):\n", " def input_function():\n", " ds = tf.data.Dataset.from_tensor_slices((dict(data_df), label_df))\n", " if shuffle:\n", " ds = ds.shuffle(1000)\n", " ds = ds.batch(batch_size).repeat(num_epochs)\n", " return ds\n", " return input_function\n", "\n", "train_input_fn = make_input_fn(dftrain, y_train)\n", "eval_input_fn = make_input_fn(dfeval, y_eval, num_epochs=1, shuffle=False)" ] }, { "cell_type": "markdown", "metadata": { "id": "P7UMVkQnkrgb" }, "source": [ "次のようにデータセットを検査できます。" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:01.241676Z", "iopub.status.busy": "2024-01-11T21:54:01.241074Z", "iopub.status.idle": "2024-01-11T21:54:03.529403Z", "shell.execute_reply": "2024-01-11T21:54:03.528563Z" }, "id": "8ZcG_3KiCb1M" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Some feature keys: ['sex', 'age', 'n_siblings_spouses', 'parch', 'fare', 'class', 'deck', 'embark_town', 'alone']\n", "\n", "A batch of class: [b'Second' b'Third' b'Third' b'Third' b'First' b'Third' b'Second' b'Third'\n", " b'Third' b'First']\n", "\n", "A batch of Labels: [1 0 0 0 1 1 0 0 0 1]\n" ] } ], "source": [ "ds = make_input_fn(dftrain, y_train, batch_size=10)()\n", "for feature_batch, label_batch in ds.take(1):\n", " print('Some feature keys:', list(feature_batch.keys()))\n", " print()\n", " print('A batch of class:', feature_batch['class'].numpy())\n", " print()\n", " print('A batch of Labels:', label_batch.numpy())" ] }, { "cell_type": "markdown", "metadata": { "id": "lMNBMyodjlW3" }, "source": [ "また、`tf.keras.layers.DenseFeatures` レイヤーを使用して、特定の特徴量カラムの結果を検査することもできます。" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:03.533142Z", "iopub.status.busy": "2024-01-11T21:54:03.532472Z", "iopub.status.idle": "2024-01-11T21:54:03.570649Z", "shell.execute_reply": "2024-01-11T21:54:03.570043Z" }, "id": "IMjlmbPlDmkB" }, "outputs": [ { "data": { "text/plain": [ "array([[ 3.],\n", " [21.],\n", " [32.],\n", " [59.],\n", " [44.],\n", " [ 4.],\n", " [24.],\n", " [10.],\n", " [28.],\n", " [28.]], dtype=float32)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "age_column = feature_columns[7]\n", "tf.keras.layers.DenseFeatures([age_column])(feature_batch).numpy()" ] }, { "cell_type": "markdown", "metadata": { "id": "f4zrAdCIjr3s" }, "source": [ "`DenseFeatures` は密なテンソルのみを受け入れ、それを最初にインジケータカラムに変換する必要のあるカテゴリカラムを検査します。" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:03.574161Z", "iopub.status.busy": "2024-01-11T21:54:03.573676Z", "iopub.status.idle": "2024-01-11T21:54:03.610497Z", "shell.execute_reply": "2024-01-11T21:54:03.609903Z" }, "id": "1VXmXFTSFEvv" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/tmp/ipykernel_978618/1523458592.py:2: indicator_column (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use Keras preprocessing layers instead, either directly or via the `tf.keras.utils.FeatureSpace` utility. Each of `tf.feature_column.*` has a functional equivalent in `tf.keras.layers` for feature preprocessing when training a Keras model.\n" ] }, { "data": { "text/plain": [ "array([[1., 0.],\n", " [1., 0.],\n", " [0., 1.],\n", " [1., 0.],\n", " [0., 1.],\n", " [0., 1.],\n", " [1., 0.],\n", " [1., 0.],\n", " [0., 1.],\n", " [0., 1.]], dtype=float32)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gender_column = feature_columns[0]\n", "tf.keras.layers.DenseFeatures([tf.feature_column.indicator_column(gender_column)])(feature_batch).numpy()" ] }, { "cell_type": "markdown", "metadata": { "id": "MEp59g5UkHYY" }, "source": [ "すべての基本特徴量をモデルに追加したら、モデルをトレーニングすることにしましょう。モデルのトレーニングは、 `tf.estimator` API を使ってコマンド 1 つで行います。" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:03.613898Z", "iopub.status.busy": "2024-01-11T21:54:03.613326Z", "iopub.status.idle": "2024-01-11T21:54:12.597772Z", "shell.execute_reply": "2024-01-11T21:54:12.597117Z" }, "id": "aGXjdnqqdgIs" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'accuracy': 0.7386364, 'accuracy_baseline': 0.625, 'auc': 0.8361494, 'auc_precision_recall': 0.78821784, 'average_loss': 0.47708422, 'label/mean': 0.375, 'loss': 0.47104964, 'precision': 0.64705884, 'prediction/mean': 0.3915048, 'recall': 0.6666667, 'global_step': 200}\n" ] } ], "source": [ "linear_est = tf.estimator.LinearClassifier(feature_columns=feature_columns)\n", "linear_est.train(train_input_fn)\n", "result = linear_est.evaluate(eval_input_fn)\n", "\n", "clear_output()\n", "print(result)" ] }, { "cell_type": "markdown", "metadata": { "id": "3tOan4hDsG6d" }, "source": [ "### 派生特徴量カラム" ] }, { "cell_type": "markdown", "metadata": { "id": "NOG2FSTHlAMu" }, "source": [ "精度が 75% に達しました。それぞれの基本特徴量カラムを個別に使用しても、データを説明するには不足している場合があります。たとえば、年齢とラベルの間の相関関係は、性別が変われば異なることがあります。そのため、`gender=\"Male\"` と `gender=\"Female\"` で単一モデルの重みのみを把握しただけでは、すべての年齢と性別の組み合わせをキャプチャすることはできません(`gender=\"Male\"` と `age=\"30\"` と `gender=\"Male\"` と `age=\"40\"` を区別するなど)。\n", "\n", "さまざまな特徴量の組み合わせの間の違いを把握するには、*相互特徴量カラム*をモデルに追加できます(また、相互カラムの前に年齢カラムをバケット化できます)。" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:12.600998Z", "iopub.status.busy": "2024-01-11T21:54:12.600757Z", "iopub.status.idle": "2024-01-11T21:54:12.604858Z", "shell.execute_reply": "2024-01-11T21:54:12.604270Z" }, "id": "AM-RsDzNfGlu" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/tmp/ipykernel_978618/476100734.py:1: crossed_column (from tensorflow.python.feature_column.feature_column_v2) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use `tf.keras.layers.experimental.preprocessing.HashedCrossing` instead for feature crossing when preprocessing data to train a Keras model.\n" ] } ], "source": [ "age_x_gender = tf.feature_column.crossed_column(['age', 'sex'], hash_bucket_size=100)" ] }, { "cell_type": "markdown", "metadata": { "id": "DqDFyPKQmGTN" }, "source": [ "組み合わせた特徴量をモデルに追加したら、モデルをもう一度トレーニングしましょう。" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:12.607958Z", "iopub.status.busy": "2024-01-11T21:54:12.607532Z", "iopub.status.idle": "2024-01-11T21:54:21.647807Z", "shell.execute_reply": "2024-01-11T21:54:21.647133Z" }, "id": "s8FV9oPQfS-g" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'accuracy': 0.7462121, 'accuracy_baseline': 0.625, 'auc': 0.8426691, 'auc_precision_recall': 0.79368746, 'average_loss': 0.47478184, 'label/mean': 0.375, 'loss': 0.46697915, 'precision': 0.6666667, 'prediction/mean': 0.40963757, 'recall': 0.64646465, 'global_step': 200}\n" ] } ], "source": [ "derived_feature_columns = [age_x_gender]\n", "linear_est = tf.estimator.LinearClassifier(feature_columns=feature_columns+derived_feature_columns)\n", "linear_est.train(train_input_fn)\n", "result = linear_est.evaluate(eval_input_fn)\n", "\n", "clear_output()\n", "print(result)" ] }, { "cell_type": "markdown", "metadata": { "id": "rwfdZj7ImLwb" }, "source": [ "これで、77.6% の精度に達しました。基本特徴量のみでトレーニングした場合よりわずかに改善されています。ほかの特徴量と変換を使用して、さらに改善されるか確認してみましょう!" ] }, { "cell_type": "markdown", "metadata": { "id": "8_eyb9d-ncjH" }, "source": [ "このトレーニングモデルを使用して、評価セットからある乗船者に予測を立てることができます。TensorFlow モデルは、バッチ、コレクション、または例に対してまとめて予測を立てられるように最適化されています。以前は、`eval_input_fn` は評価セット全体を使って定義されていました。" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:21.651282Z", "iopub.status.busy": "2024-01-11T21:54:21.650993Z", "iopub.status.idle": "2024-01-11T21:54:23.004845Z", "shell.execute_reply": "2024-01-11T21:54:23.004168Z" }, "id": "wiScyBcef6Dq" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Calling model_fn.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/head/base_head.py:786: ClassificationOutput.__init__ (from tensorflow.python.saved_model.model_utils.export_output) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/head/binary_class_head.py:561: RegressionOutput.__init__ (from tensorflow.python.saved_model.model_utils.export_output) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "WARNING:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.9/site-packages/tensorflow_estimator/python/estimator/head/binary_class_head.py:563: PredictOutput.__init__ (from tensorflow.python.saved_model.model_utils.export_output) is deprecated and will be removed in a future version.\n", "Instructions for updating:\n", "Use tf.keras instead.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Done calling model_fn.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Graph was finalized.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Restoring parameters from /tmpfs/tmp/tmpsa7vq6kw/model.ckpt-200\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Running local_init_op.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "INFO:tensorflow:Done running local_init_op.\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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SJJq164t6fev3rxZhA74GuEGqCTNmjXz2I+Li1NAQECJW3abNGnisX/gwAEdOXJEs2bNUoMGDTy2u+++W5K0f/9+SdLu3bvVtGnTEmHk8ssvP29927dvV3R0tOrWrVveX63KajzThbyfx48fL/X1WrZsKZfLpb17957ztUJCQhQVFeXxWps2bdJNN92ksLAwORwONWjQQHfeeackKT8/3+P66Oho1apVy6OtefPmklSlt3Bv3bpVmzZtKjFmp2s5PWYDBw5Uu3btdM899ygiIkK33XabFixYQNDBRYM1N0AVOdtsyJkzAJLcHyB33nmnkpOTS70mPj6+YosrJ3+osazvZ2U4cuSIOnXqJIfDoXHjxikuLk41atTQunXr9Nhjj/ltCHC5XLryyis1efLkUo/HxMRI+v09/OKLL7RixQp9/PHHWrx4sd5++2117dpVn332mapVq1aVZQPlRrgBKsnWrVs9ZhG2bdsml8t13qcEN2jQQKGhoTp16pS6det2znMbN26sH3/8UcYYjw/77Ozs89YXFxenJUuW6PDhw+ecvSktRFRVjWe6kPczODi41NfbvHmzAgIC3B/qZ75Wly5d3PvHjh1TTk6OevXqJen3pysfOnRI7733njp27Og+b+fOnaXWsG/fPhUWFnrM3mzZskWSLvip0ef7CvFMcXFx+v7775WUlHTe6wICApSUlKSkpCRNnjxZEyZM0JNPPqkVK1acd8wBX+NrKaCSTJ061WP/5ZdfliT17NnznNdVq1ZNAwYM0Lvvvqsff/yxxPEDBw64f+7Vq5f27dund955x912/PhxzZo167z1DRgwQMYYpaWllThmjHH/XKtWLR05csQnNZ7pQt7PG2+8UR988IHHV0B5eXmaN2+e2rdvL4fD4XHNrFmzVFxc7N6fPn26Tp486X6t0zMXZ75PRUVFmjZtWqk1nDx5UjNnzvQ4d+bMmWrQoIESEhLOWf/5nA5Mfxyj0tx666365ZdfNHv27BLHfvvtNxUWFkqSDh8+XOJ4mzZtJKnMt/ADvsTMDVBJdu7cqb59+6pHjx5avXq1/v3vf2vQoEG66qqrznvtxIkTtWLFCrVt21b33nuvrrjiCh0+fFjr1q3T0qVL3R8+9957r1555RUNHjxYWVlZioqK0htvvKHg4ODzvkaXLl1011136aWXXtLWrVvVo0cPuVwu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rV69+qz9OJ1OFRQUeGwAAODS4fNw88MPPygkJER2u13333+/Fi1apCuuuEK5ubkKCgpS7dq1Pc6PiIhQbm7uWftLT09XWFiYe4uJiank3wAAAPgTn4ebyy+/XBs2bNA333yjBx54QMnJyfrpp5+87m/06NHKz893b3v37q3AagEAgL/z+Z9fCAoKUtOmTSVJCQkJ+u677/Tiiy9q4MCBKioq0pEjRzxmb/Ly8hQZGXnW/ux2u+x2e2WXDQAA/JTPZ27+yOVyyel0KiEhQdWrV9eyZcvcx7Kzs7Vnzx4lJib6sEIAAODPfDpzM3r0aPXs2VONGjXS0aNHNW/ePK1cuVJLlixRWFiYhg4dqtTUVNWtW1cOh0MPPfSQEhMTy3ynFAAAuPT4NNzs379fgwcPVk5OjsLCwhQfH68lS5bohhtukCS98MILCggI0IABA+R0OtW9e3dNmzbNlyUDAAA/53fPualoPOemJJ5zAwDwd5Z4zg0AAEBF8PndUqh6lTXjxIwQAMAfMHMDAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAshXADAAAsxatws2PHjoquAwAAoEJ4FW6aNm2qLl266N///rdOnDhR0TUBAAB4zatws27dOsXHxys1NVWRkZG677779O2331Z0bQAAAOXmVbhp06aNXnzxRe3bt0+vvvqqcnJy1L59e7Vu3VqTJ0/WgQMHKrpOAACAMrmgBcWBgYG6+eabtXDhQj377LPatm2bHn30UcXExGjw4MHKyck55/Xp6en605/+pNDQUIWHh6t///7Kzs72OKdz586y2Wwe2/33338hZQMAAAu7oHCzdu1aPfjgg4qKitLkyZP16KOPavv27fr888+1b98+9evX75zXZ2ZmKiUlRWvWrNHnn3+u4uJi3XjjjSosLPQ4795771VOTo57mzRp0oWUDQAALCzQm4smT56suXPnKjs7W7169dLrr7+uXr16KSDg96zUpEkTZWRkKDY29pz9LF682GM/IyND4eHhysrKUseOHd3twcHBioyM9KZUAABwifFq5mb69OkaNGiQdu/erffff19//vOf3cHmtPDwcM2ZM6dc/ebn50uS6tat69H+5ptvqn79+mrdurVGjx6t48ePn7UPp9OpgoICjw0AAFw6vJq52bp163nPCQoKUnJycpn7dLlceuSRR9SuXTu1bt3a3T5o0CA1btxY0dHR2rhxox577DFlZ2frvffeK7Wf9PR0paWllfl1AQCAtdiMMaa8F82dO1chISH6y1/+4tG+cOFCHT9+vFyh5rQHHnhAn376qVatWqWGDRue9bzly5crKSlJ27ZtU1xcXInjTqdTTqfTvV9QUKCYmBjl5+fL4XCUu65ziX384wrt72K3a2JvX5cAALCIgoIChYWFefX57dXXUunp6apfv36J9vDwcE2YMKHc/Q0fPlwfffSRVqxYcc5gI0lt27aVJG3btq3U43a7XQ6Hw2MDAACXDq++ltqzZ4+aNGlSor1x48bas2dPmfsxxuihhx7SokWLtHLlylL7/KMNGzZIkqKiosr8OgAA4NLhVbgJDw/Xxo0bS9wN9f3336tevXpl7iclJUXz5s3TBx98oNDQUOXm5kqSwsLCVLNmTW3fvl3z5s1Tr169VK9ePW3cuFEjR45Ux44dFR8f703pAADA4rwKN7fffrsefvhhhYaGum/ZzszM1IgRI3TbbbeVuZ/p06dL+v1BfWeaO3euhgwZoqCgIC1dulRTpkxRYWGhYmJiNGDAAD311FPelA0AAC4BXoWb8ePHa9euXUpKSlJg4O9duFwuDR48uFxrbs63ljkmJkaZmZnelAgAAC5RXoWboKAgvf322xo/fry+//571axZU1deeaUaN25c0fUBAACUi1fh5rTmzZurefPmFVULAADABfMq3Jw6dUoZGRlatmyZ9u/fL5fL5XF8+fLlFVIcAABAeXkVbkaMGKGMjAz17t1brVu3ls1mq+i6AAAAvOJVuJk/f74WLFigXr16VXQ9AAAAF8SrJxQHBQWpadOmFV0LAADABfMq3Pztb3/Tiy++eN5buQEAAKqaV19LrVq1SitWrNCnn36qVq1aqXr16h7Hz/YXuwEAACqbV+Gmdu3auummmyq6FgAAgAvmVbiZO3duRdcBAABQIbxacyNJJ0+e1NKlSzVz5kwdPXpUkrRv3z4dO3aswooDAAAoL69mbnbv3q0ePXpoz549cjqduuGGGxQaGqpn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tnPnTvM///M/pkOHDqZfv35VU6zFlXcsnE6nueaaa0yvXr3MqlWrzM6dO83KlSvNhg0bqrhyayrveLz55pvGbrebN9980+zcudMsWbLEREVFmZEjR1Zx5dbzySefmCeffNK89957RpJZtGjROc/fsWOHCQ4ONqmpqeann34yL7/8sqlWrZpZvHhxuV6XcIMyu/baa01KSop7/9SpUyY6Otqkp6eX6fqTJ0+a0NBQ89prr1VWiZcUb8bj5MmT5vrrrzf/+te/THJyMuGmgpR3LKZPn24uu+wyU1RUVFUlXlLKOx4pKSmma9euHm2pqammXbt2lVrnpaYs4WbUqFGmVatWHm0DBw403bt3L9dr8bUUyqSoqEhZWVnq1q2buy0gIEDdunXT6tWry9TH8ePHVVxcrLp161ZWmZcMb8dj3LhxCg8P19ChQ6uizEuCN2Pxn//8R4mJiUpJSVFERIRat26tCRMm6NSpU1VVtmV5Mx7XX3+9srKy3F9d7dixQ5988ol69epVJTXj/61evdpj7CSpe/fuZf6cOc3v//wC/MPBgwd16tSpEn/2IiIiQps3by5TH4899piio6NL/IOL8vNmPFatWqU5c+Zow4YNVVDhpcObsdixY4eWL1+uO+64Q5988om2bdumBx98UMXFxRozZkxVlG1Z3ozHoEGDdPDgQbVv317GGJ08eVL333+/nnjiiaooGWfIzc0tdewKCgr022+/qWbNmmXqh5kbVImJEydq/vz5WrRokWrUqOHrci45R48e1V133aXZs2erfv36vi7nkudyuRQeHq5Zs2YpISFBAwcO1JNPPqkZM2b4urRL0sqVKzVhwgRNmzZN69at03vvvaePP/5Y48eP93Vp8BIzNyiT+vXrq1q1asrLy/Noz8vLU2Rk5Dmv/d///V9NnDhRS5cuVXx8fGWWecko73hs375du3btUp8+fdxtLpdLkhQYGKjs7GzFxcVVbtEW5c2/G1FRUapevbqqVavmbmvZsqVyc3NVVFSkoKCgSq3ZyrwZj3/84x+66667dM8990iSrrzyShUWFmrYsGF68sknFRDAPEBViYyMLHXsHA5HmWdtJGZuUEZBQUFKSEjQsmXL3G0ul0vLli1TYmLiWa+bNGmSxo8fr8WLF+uaa66pilIvCeUdjxYtWuiHH37Qhg0b3Fvfvn3VpUsXbdiwQTExMVVZvqV48+9Gu3bttG3bNnfAlKQtW7YoKiqKYHOBvBmP48ePlwgwp4On4W9LV6nExESPsZOkzz///JyfM6Uq31pnXMrmz59v7Ha7ycjIMD/99JMZNmyYqV27tsnNzTXGGHPXXXeZxx9/3H3+xIkTTVBQkHnnnXdMTk6Oezt69KivfgVLKe94/BF3S1Wc8o7Fnj17TGhoqBk+fLjJzs42H330kQkPDzfPPPOMr34FSynveIwZM8aEhoaat956y+zYscN89tlnJi4uztx6662++hUs4+jRo2b9+vVm/fr1RpKZPHmyWb9+vdm9e7cxxpjHH3/c3HXXXe7zT98K/ve//93897//NVOnTuVWcFS+l19+2TRq1MgEBQWZa6+91qxZs8Z9rFOnTiY5Odm937hxYyOpxDZmzJiqL9yiyjMef0S4qVjlHYuvv/7atG3b1tjtdnPZZZeZf/7zn+bkyZNVXLV1lWc8iouLzdixY01cXJypUaOGiYmJMQ8++KD59ddfq75wi1mxYkWpnwOn3//k5GTTqVOnEte0adPGBAUFmcsuu8zMnTu33K9rM4Y5NwAAYB2suQEAAJZCuAEAAJZCuAEAAJZCuAEAAJZCuAEAAJZCuAEAAJZCuAEAAJZCuAEAAJZCuAEAAJZCuAEAAJZCuAEAAJbyf9Liklkf+tjkAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pred_dicts = list(linear_est.predict(eval_input_fn))\n", "probs = pd.Series([pred['probabilities'][1] for pred in pred_dicts])\n", "\n", "probs.plot(kind='hist', bins=20, title='predicted probabilities')" ] }, { "cell_type": "markdown", "metadata": { "id": "UEHRCd4sqrLs" }, "source": [ "最後に、結果の受信者操作特性(ROC)を見てみましょう。真陽性率と偽陽性率間のトレードオフに関し、より明確な予想を得ることができます。" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "execution": { "iopub.execute_input": "2024-01-11T21:54:23.008201Z", "iopub.status.busy": "2024-01-11T21:54:23.007952Z", "iopub.status.idle": "2024-01-11T21:54:23.566207Z", "shell.execute_reply": "2024-01-11T21:54:23.565429Z" }, "id": "kqEjsezIokIe" }, "outputs": [ { "data": { "text/plain": [ "(0.0, 1.05)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAHHCAYAAABDUnkqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABDv0lEQVR4nO3deVhVdeLH8c8F5YKxaQhuKGqa+z7u2qi4lmVOaWqKTtlUWipjqaWSVlpZLqXlLyvJJlOzZRx1bMHMXXPNFXPFVFBE2VSQe8/vD8c7Q4ByEbhweL+eh6fu937PPZ97LPk8Z7UYhmEIAADAJNxcHQAAACA/UW4AAICpUG4AAICpUG4AAICpUG4AAICpUG4AAICpUG4AAICpUG4AAICpUG4AAICpUG4AAICpUG4A3FZkZKQsFovjp1SpUqpcubKGDh2qM2fOZLuMYRj67LPP1LFjR/n7+6tMmTJq2LChpk6dqtTU1BzX9c0336hnz54KCAiQh4eHKlWqpH79+mnt2rUF9fUAmIyFZ0sBuJ3IyEgNGzZMU6dOVfXq1XXt2jVt3bpVkZGRCgkJ0f79++Xp6emYb7PZNHDgQC1btkwdOnRQ3759VaZMGW3YsEGLFy9WvXr19OOPPyooKMixjGEY+utf/6rIyEg1bdpUjzzyiCpUqKBz587pm2++0c6dO7Vp0ya1bdvWFZsAQHFiAMBtLFy40JBk/PLLL5nGx40bZ0gyli5dmml82rRphiRj7NixWT5rxYoVhpubm9GjR49M4zNmzDAkGaNHjzbsdnuW5RYtWmRs27YtH75N3qWkpLh0/QByh8NSAPKsQ4cOkqRjx445xq5evaoZM2aodu3amj59epZlevfurbCwMK1Zs0Zbt251LDN9+nTVqVNHb7/9tiwWS5blBg8erJYtW94yj91u15w5c9SwYUN5enqqfPny6tGjh3bs2CFJOnnypCwWiyIjI7Msa7FY9Morrzhev/LKK7JYLDp48KAGDhyosmXLqn379o58p06dyvIZEyZMkIeHhy5duuQY27Ztm3r06CE/Pz+VKVNG9913nzZt2nTL7wHgzlBuAOTZyZMnJUlly5Z1jG3cuFGXLl3SwIEDVapUqWyXGzJkiCRp5cqVjmUSEhI0cOBAubu75znPE088odGjRys4OFhvvvmmxo8fL09PT0eJyotHH31UV65c0bRp0zR8+HD169dPFotFy5YtyzJ32bJl6tatm2N7rF27Vh07dlRSUpIiIiI0bdo0Xb58WZ07d9b27dvznAnArWX/Nw8AZCMxMVHx8fG6du2atm3bpilTpshqteqBBx5wzDl48KAkqXHjxjl+zs33Dh06lOmfDRs2zHO2n376SZGRkXr++ec1Z84cx/jf//53GXdwamHjxo21ePHiTGOtW7fW0qVL9cILLzjGfvnlFx0/ftyx98cwDD399NPq1KmT/v3vfzv2Rv3tb39T/fr1NXHiRH3//fd5zgUgZ+y5AZBroaGhKl++vIKDg/XII4/orrvu0ooVK1SlShXHnOTkZEmSj49Pjp9z872kpKRM/7zVMrfz1VdfyWKxKCIiIst72R3myq2nn346y1j//v21c+fOTIfjli5dKqvVqoceekiStGfPHv32228aOHCgLl68qPj4eMXHxys1NVVdunTR+vXrZbfb85wLQM4oNwBybd68efrhhx+0fPly9erVS/Hx8bJarZnm3CwoN0tOdv5YgHx9fW+7zO0cO3ZMlSpVUrly5fL8GdmpXr16lrFHH31Ubm5uWrp0qaQbe2m+/PJL9ezZ0/FdfvvtN0lSWFiYypcvn+nno48+UlpamhITE/M1K4AbOCwFINdatmypFi1aSJL69Omj9u3ba+DAgYqOjpa3t7ckqW7dupKkX3/9VX369Mn2c3799VdJUr169SRJderUkSTt27cvx2XyQ057cGw2W47LeHl5ZRmrVKmSOnTooGXLlumll17S1q1bFRMTozfffNMx5+ZemRkzZqhJkybZfvbNbQYgf7HnBkCeuLu7a/r06Tp79qzmzp3rGG/fvr38/f21ePHiHEvDokWLJMlxrk779u1VtmxZffHFF7csGrdSs2ZNnT17VgkJCTnOuXmi7+XLlzONZ3fl0+30799fe/fuVXR0tJYuXaoyZcqod+/emfJIN/ZKhYaGZvtTunRpp9cL4PYoNwDy7M9//rNatmyp2bNn69q1a5KkMmXKaOzYsYqOjtbLL7+cZZlVq1YpMjJS3bt3V+vWrR3LjBs3TocOHdK4ceOyPQH4H//4xy2vMPrLX/4iwzA0ZcqULO/d/DxfX18FBARo/fr1md5///33c/+l/2d97u7u+uKLL/Tll1/qgQce0F133eV4v3nz5qpZs6befvttpaSkZFn+woULTq8TQO5wWArAHXnhhRf06KOPKjIy0nHy7fjx47V79269+eab2rJli/7yl7/Iy8tLGzdu1D/+8Q/VrVtXn376aZbPOXDggN555x399NNPjjsUx8bG6ttvv9X27du1efPmHHN06tRJgwcP1rvvvqvffvtNPXr0kN1u14YNG9SpUyeNHDlSkvTkk0/qjTfe0JNPPqkWLVpo/fr1OnLkiNPfOzAwUJ06ddLMmTOVnJys/v37Z3rfzc1NH330kXr27Kn69etr2LBhqly5ss6cOaOffvpJvr6++te//uX0egHkgivvIAigeMjpDsWGYRg2m82oWbOmUbNmTSMjIyPT+MKFC4127doZvr6+hqenp1G/fn1jypQpt7zT7/Lly41u3boZ5cqVM0qVKmVUrFjR6N+/v7Fu3brb5szIyDBmzJhh1KlTx/Dw8DDKly9v9OzZ09i5c6djzpUrV4wnnnjC8PPzM3x8fIx+/foZ58+fNyQZERERjnkRERGGJOPChQs5rm/BggWGJMPHx8e4evVqtnN2795t9O3b17j77rsNq9VqVKtWzejXr58RFRV12+8DIG94thQAADAVzrkBAACmQrkBAACmQrkBAACmQrkBAACmQrkBAACmQrkBAACmUuJu4me323X27Fn5+Pjc0ZOCAQBA4TEMQ8nJyapUqZLc3G69b6bElZuzZ88qODjY1TEAAEAenD59WlWqVLnlnBJXbnx8fCTd2Di+vr4uTgMAAHIjKSlJwcHBjt/jt1Liys3NQ1G+vr6UGwAAipncnFLCCcUAAMBUKDcAAMBUKDcAAMBUKDcAAMBUKDcAAMBUKDcAAMBUKDcAAMBUKDcAAMBUKDcAAMBUKDcAAMBUXFpu1q9fr969e6tSpUqyWCz69ttvb7vMunXr1KxZM1mtVt1zzz2KjIws8JwAAKD4cGm5SU1NVePGjTVv3rxczT9x4oTuv/9+derUSXv27NHo0aP15JNP6rvvvivgpAAAoLhw6YMze/bsqZ49e+Z6/vz581W9enW98847kqS6detq48aNmjVrlrp3715QMQEAQDFSrJ4KvmXLFoWGhmYa6969u0aPHu2aQAAAlBCxide05/Sl284r72NV82rlCiFRzopVuYmNjVVQUFCmsaCgICUlJenq1avy8vLKskxaWprS0tIcr5OSkgo8JwAAZvPo/23W6YSrt53XpU6gPh5K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VOvWrbV///5M87766ivVr19fVqtVISEheueddzK9//7776tWrVry9PRUUFCQHnnkEcd7/3tY6s9//rNOnTqlMWPGyGKxyGKxSMp8WOrIkSOyWCw6fPhwpnXMmjVLNWvWdLzev3+/evbsKW9vbwUFBWnw4MGKj4/P8bveXMeKFStUr149Wa1WxcTE6JdfflHXrl0VEBAgPz8/3Xfffdq1a5djuZt/Vg8//HCmPztJ+uc//6lmzZrJ09NTNWrU0JQpU5SRkZFjBqAkotwAJjVnzhxNnTpVVapU0blz5/TLL79IklJTUxUeHq4dO3YoKipKbm5uevjhh2W327P9nEmTJungwYP697//rUOHDumDDz5QQECAJOn69evq3r27fHx8tGHDBm3atEne3t7q0aOH0tPTb5nvhRde0DvvvKNffvlF5cuXV+/evXX9+nVJ0s6dO9WvXz899thj2rdvn1555RVNmjRJkZGRkqQdO3bo+eef19SpUxUdHa01a9aoY8eO2a7n66+/VpUqVTR16lSdO3dO586dyzKndu3aatGihT7//PNM459//rkGDhwoSbp8+bI6d+6spk2baseOHVqzZo3i4uLUr1+/W37PK1eu6M0339RHH32kAwcOKDAwUMnJyQoLC9PGjRu1detW1apVS7169VJycrIkOf6sFi5cmOnPbsOGDRoyZIhGjRqlgwcP6v/+7/8UGRmp119//ZYZgBKnUB7PCcAlZs2aZVSrVu2Wcy5cuGBIMvbt22cYhmGcOHHCkGTs3r3bMAzD6N27tzFs2LBsl/3ss8+Me++917Db7Y6xtLQ0w8vLy/juu++yXebmk4WXLFniGLt48aLh5eVlLF261DAMwxg4cKDRtWvXTMu98MILRr169QzDMIyvvvrK8PX1NZKSkrJdx3333WeMGjXK8bpatWrGrFmzMs1ZuHCh4efn53g9a9Yso2bNmo7X0dHRhiTj0KFDhmEYxquvvmp069Yt02ecPn3akGRER0dnm2PhwoWGJGPPnj3Zvn+TzWYzfHx8jH/961+OMUnGN998k2lely5djGnTpmUa++yzz4yKFSve8vOBkoY9N0AJ89tvv2nAgAGqUaOGfH19HYc8YmJisp3/zDPPaMmSJWrSpIlefPFFbd682fHe3r17dfToUfn4+Mjb21ve3t4qV66crl27dstDXZLUpk0bx7+XK1dO9957rw4dOiRJOnTokNq1a5dpfrt27fTbb7/JZrOpa9euqlatmmrUqKHBgwfr888/15UrV/KyORwee+wxnTx5Ulu3bpV0Y69Ns2bNVKdOHcd3/emnnxzf09vb2/Herb6rh4eHGjVqlGksLi5Ow4cPV61ateTn5ydfX1+lpKTk+Gdw0969ezV16tRMGYYPH65z587d8fcHzIQTioESpnfv3qpWrZoWLFigSpUqyW63q0GDBjkeRurZs6dOnTql1atX64cfflCXLl00YsQIvf3220pJSVHz5s2zHM6RpPLlyxfYd/Dx8dGuXbu0bt06ff/995o8ebJeeeUV/fLLL3m+vLtChQrq3LmzFi9erNatW2vx4sV65plnHO+npKSod+/eevPNN7MsW7FixRw/18vLy3Gez01hYWG6ePGi5syZo2rVqslqtapNmza3PZSXkpKiKVOmqG/fvlne8/T0vN1XBEoMyg1Qgly8eFHR0dFasGCBOnToIEnauHHjbZcrX768wsLCFBYWpg4dOuiFF17Q22+/rWbNmmnp0qUKDAyUr6+vU1m2bt2qqlWrSrpx0vKRI0dUt25dSVLdunW1adOmTPM3bdqk2rVry93dXZJUqlQphYaGKjQ0VBEREfL399fatWuz/cXv4eEhm81220yDBg3Siy++qAEDBuj48eN67LHHHO81a9ZMX331lUJCQlSq1J391blp0ya9//776tWrl6QbJ2X/8cTk0qVLZ8ncrFkzRUdH65577rmj9QNmx2EpoAQpW7as7r77bn344Yc6evSo1q5dq/Dw8FsuM3nyZP3zn//U0aNHdeDAAa1cudJRQgYNGqSAgAA99NBD2rBhg06cOKF169bp+eef1++//37Lz506daqioqK0f/9+DR06VAEBAerTp48k6e9//7uioqL06quv6siRI/r00081d+5cjR07VpK0cuVKvfvuu9qzZ49OnTqlRYsWyW6369577812XSEhIVq/fr3OnDlzy6ub+vbtq+TkZD3zzDPq1KmTKlWq5HhvxIgRSkhI0IABA/TLL7/o2LFj+u677zRs2LBcFaf/VatWLX322Wc6dOiQtm3bpkGDBmW5LD0kJERRUVGKjY3VpUuXJN34s1i0aJGmTJmiAwcO6NChQ1qyZIkmTpzo1PoBs6PcACWIm5ublixZop07d6pBgwYaM2aMZsyYcctlPDw8NGHCBDVq1EgdO3aUu7u7lixZIkkqU6aM1q9fr6pVq6pv376qW7eunnjiCV27du22e3LeeOMNjRo1Ss2bN1dsbKz+9a9/ycPDQ9KNPRTLli3TkiVL1KBBA02ePFlTp07V0KFDJUn+/v76+uuv1blzZ9WtW1fz58/XF198ofr162e7rqlTp+rkyZOqWbPmLQ+X+fj4qHfv3tq7d68GDRqU6b1KlSpp06ZNstls6tatmxo2bKjRo0fL39/f6fvWfPzxx7p06ZKaNWumwYMH6/nnn1dgYGCmOe+8845++OEHBQcHq2nTppKk7t27a+XKlfr+++/1pz/9Sa1bt9asWbNUrVo1p9YPmJ3FMAzD1SEAlBzr1q1Tp06ddOnSJR5/AKBAsOcGAACYCuUGAACYCoelAACAqbDnBgAAmArlBgAAmArlBgAAmArlBgAAmArlBgAAmArlBgAAmArlBgAAmArlBgAAmArlBgAAmMr/A4f4yLDDPO/BAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.metrics import roc_curve\n", "from matplotlib import pyplot as plt\n", "\n", "fpr, tpr, _ = roc_curve(y_eval, probs)\n", "plt.plot(fpr, tpr)\n", "plt.title('ROC curve')\n", "plt.xlabel('false positive rate')\n", "plt.ylabel('true positive rate')\n", "plt.xlim(0,)\n", "plt.ylim(0,)" ] } ], "metadata": { "colab": { "collapsed_sections": [], "name": "linear.ipynb", "toc_visible": true }, "kernelspec": { "display_name": "Python 3", "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.9.18" } }, "nbformat": 4, "nbformat_minor": 0 }