{ "cells": [ { "cell_type": "markdown", "id": "a72605dd", "metadata": {}, "source": [ "# ARIM-Academy: 基礎編 Scikit-learn(予測モデル)" ] }, { "cell_type": "markdown", "id": "1c2e3870", "metadata": {}, "source": [ "## 本編の目標\n", "\n", "この演習では、鉄の大気腐食量を気象データから予測するための『**大気腐食データセット**』を活用し、予測モデルにかかる機械学習の基礎を習得します。\n", "\n", "### 本編における内容\n", "* **予測アルゴリズムの習得**: このデータセットは、6か所で月次に測定された腐食量データを含んでいます。これを用いて、線形回帰やランダムフォレストなどの予測アルゴリズムを学び、腐食量の予測を実践します。\n", "\n", "* **特徴選択と次元削減の理解**: 気象因子を特徴量とするこのデータセットを分析し、適切な特徴量の選択や次元削減を行うことで、モデルのパフォーマンスを向上させる方法を理解します。\n", "\n", "* **モデル評価とパフォーマンス指標の理解**: データセットを使用してトレーニングしたモデルを評価し、R²などのパフォーマンス指標を用いて予測精度を評価するスキルを習得します。\n", "\n", "* **データの可視化と解釈**: 特徴量の分布や相関関係を視覚化し、データの特性やパターンを把握する方法を学びます。これにより、モデルの解釈や予測結果の説明に役立つ洞察を得ることができます。\n", "\n", "---\n", "\n", "## データセット\n", "\n", "**大気腐食データセット**は、日本の6地点における月次の標準試験片の腐食量と、当時の気象庁の観測データを組み合わせたものです。このデータセットは、松波らによる『海塩輸送シミュレーションと気象情報を用いた機械学習に基づく大気腐食量評価モデル開発と高精細腐食環境地図の作成』[1] で使用されたデータの一部に基づいています。ただし、本データセットはPython講義用に作成されたもので、論文で使用されたデータセットとは異なるものです。\n", "\n", "[1] 松波 成行, 柳生 進二郎, 篠原 正, 片山 英樹, 須藤 仁, 服部 康男, 平口 博丸 \"海塩輸送シミュレーションと気象情報を用いた機械学習に基づく大気腐食量評価モデル開発と高精細腐食環境地図の作成\", 土木学会論文集A1(構造・地震工学) Vol.75, p141-160(2019) https://www.jstage.jst.go.jp/article/jscejseee/75/2/75_141/_article/-char/ja/\n", "\n", "\n", "### 腐食観測量\n", "1. **Corrosion**: 腐食速度 (g/m2/y)\n", "\n", "### 気象変数\n", "気象データは気象庁の観測値を基にしており、以下の16変数が含まれます。これらの変数は、説明変数として使用します。\n", "\n", "1. **AT** : 平均気温(℃) \n", "2. **HAT** : 日最高気温の平均(℃) \n", "3. **LAT** : 日最低気温の平均(℃) \n", "4. **HT** : 最高気温(℃) \n", "5. **LT** : 最低気温(℃) \n", "6. **Rain** : 降水量の合計(mm) \n", "7. **MRain** : 日降水量の最大(mm) \n", "8. **Sun** : 日照時間(時間) \n", "9. **MSnow** : 最深積雪(cm) \n", "10. **Snow** : 降雪量合計(cm) \n", "11. **AW** : 平均風速(m/s) \n", "12. **MW** : 最大風速(m/s) \n", "13. **PMW** : 最大瞬間風速(m/s) \n", "14. **Vap** : 平均蒸気圧(hPa) \n", "15. **Hum** : 平均湿度(%) \n", "16. **LHum** : 最小相対湿度(%)\n", "---\n" ] }, { "cell_type": "markdown", "id": "17d62284", "metadata": {}, "source": [ "### 教材への接続\n", "google colabにおけるオンラインの場合にこのラインを実行します。(Google colabに接続しない場合には不要)" ] }, { "cell_type": "code", "execution_count": null, "id": "84bf1a6d", "metadata": {}, "outputs": [], "source": [ "!git clone https://github.com/ARIM-Academy/Advanced_Tutorial_1.git\n", "%cd Advanced_Tutorial_1" ] }, { "cell_type": "markdown", "id": "e0d32787", "metadata": {}, "source": [ "# 1.データセットの読み込みと前処理" ] }, { "cell_type": "markdown", "id": "a0a7516d", "metadata": {}, "source": [ "### ライブラリのインポート\n", "この演習で使用するPythonライブラリをimportします。なお、機械学習に関連するscikit-learnライブラリは、後半で別途importします。" ] }, { "cell_type": "code", "execution_count": 1, "id": "878e2fd9", "metadata": {}, "outputs": [], "source": [ "#ライブラリ\n", "import pandas as pd\n", "import numpy as np \n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "import warnings\n", "warnings.filterwarnings('ignore')" ] }, { "cell_type": "markdown", "id": "7e2bdbea", "metadata": {}, "source": [ "\n", "\n", "### サンプルファイルの読み込み\n", "\n", "`pandas`ライブラリの`read_csv()`関数は、CSVファイルを読み込んで`pandas`の`DataFrame`形式に変換するための関数です。このセクションでは、[data]フォルダ内に保存されている`corrosion_data.csv`ファイルを`DataFrame`として読み込み、その結果を`df`という変数にうになっています。。" ] }, { "cell_type": "code", "execution_count": 3, "id": "48ba15f9", "metadata": {}, "outputs": [], "source": [ "#データセットの読み込み\n", "df = pd.read_csv('data/corrosin_data.csv', index_col=0)" ] }, { "cell_type": "code", "execution_count": 4, "id": "90b74b4e", "metadata": {}, "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", " \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", " \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", " \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", "
MonthATHATLATHTLTRainMrainSunMsnowSnowAWMWPMWVapHumLhumCorrosion
Place
Naha128.326.031.133.623.4178.079.0206.5006.014.520.928.57443674
Naha225.323.527.730.819.9200.0118.0129.7007.322.033.623.472402606
Naha321.319.123.828.513.9121.079.0120.0005.012.720.617.46634546
Naha417.315.019.623.610.3130.052.089.4005.414.521.512.76437704
Naha516.814.119.823.510.666.036.5145.4005.013.120.211.86132620
.........................................................
Choshi814.310.817.621.33.570.513.5232.2005.415.619.211.06722567
Choshi918.215.221.626.112.2151.056.5257.0005.721.126.816.67830541
Choshi1021.118.924.027.317.1177.556.0172.3004.514.319.422.38946830
Choshi1124.021.627.130.920.077.523.0214.9004.512.818.626.58953676
Choshi1224.922.628.233.118.9113.536.0212.7006.014.120.328.29055745
\n", "

71 rows × 18 columns

\n", "
" ], "text/plain": [ " Month AT HAT LAT HT LT Rain Mrain Sun Msnow Snow \\\n", "Place \n", "Naha 1 28.3 26.0 31.1 33.6 23.4 178.0 79.0 206.5 0 0 \n", "Naha 2 25.3 23.5 27.7 30.8 19.9 200.0 118.0 129.7 0 0 \n", "Naha 3 21.3 19.1 23.8 28.5 13.9 121.0 79.0 120.0 0 0 \n", "Naha 4 17.3 15.0 19.6 23.6 10.3 130.0 52.0 89.4 0 0 \n", "Naha 5 16.8 14.1 19.8 23.5 10.6 66.0 36.5 145.4 0 0 \n", "... ... ... ... ... ... ... ... ... ... ... ... \n", "Choshi 8 14.3 10.8 17.6 21.3 3.5 70.5 13.5 232.2 0 0 \n", "Choshi 9 18.2 15.2 21.6 26.1 12.2 151.0 56.5 257.0 0 0 \n", "Choshi 10 21.1 18.9 24.0 27.3 17.1 177.5 56.0 172.3 0 0 \n", "Choshi 11 24.0 21.6 27.1 30.9 20.0 77.5 23.0 214.9 0 0 \n", "Choshi 12 24.9 22.6 28.2 33.1 18.9 113.5 36.0 212.7 0 0 \n", "\n", " AW MW PMW Vap Hum Lhum Corrosion \n", "Place \n", "Naha 6.0 14.5 20.9 28.5 74 43 674 \n", "Naha 7.3 22.0 33.6 23.4 72 40 2606 \n", "Naha 5.0 12.7 20.6 17.4 66 34 546 \n", "Naha 5.4 14.5 21.5 12.7 64 37 704 \n", "Naha 5.0 13.1 20.2 11.8 61 32 620 \n", "... ... ... ... ... ... ... ... \n", "Choshi 5.4 15.6 19.2 11.0 67 22 567 \n", "Choshi 5.7 21.1 26.8 16.6 78 30 541 \n", "Choshi 4.5 14.3 19.4 22.3 89 46 830 \n", "Choshi 4.5 12.8 18.6 26.5 89 53 676 \n", "Choshi 6.0 14.1 20.3 28.2 90 55 745 \n", "\n", "[71 rows x 18 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#データセットの確認\n", "df" ] }, { "cell_type": "markdown", "id": "61115762-b772-4ea1-9722-8aad1519061d", "metadata": {}, "source": [ "### 不必要な特徴量の削除\n", "pandasライブラリではデータフレームから特定の行や列を削除する操作で`drop()`メソッドを使います。ここではデータフレームdfから観測月のインデックスである'Month'という名前の列を削除します。" ] }, { "cell_type": "code", "execution_count": 9, "id": "f76314c4-6a65-4b1c-8153-e16013af4d02", "metadata": {}, "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", " \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", " \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", " \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", "
ATHATLATHTLTRainMrainSunMsnowSnowAWMWPMWVapHumLhumCorrosion
Place
Naha28.326.031.133.623.4178.079.0206.5006.014.520.928.57443674
Naha25.323.527.730.819.9200.0118.0129.7007.322.033.623.472402606
Naha21.319.123.828.513.9121.079.0120.0005.012.720.617.46634546
Naha17.315.019.623.610.3130.052.089.4005.414.521.512.76437704
Naha16.814.119.823.510.666.036.5145.4005.013.120.211.86132620
......................................................
Choshi14.310.817.621.33.570.513.5232.2005.415.619.211.06722567
Choshi18.215.221.626.112.2151.056.5257.0005.721.126.816.67830541
Choshi21.118.924.027.317.1177.556.0172.3004.514.319.422.38946830
Choshi24.021.627.130.920.077.523.0214.9004.512.818.626.58953676
Choshi24.922.628.233.118.9113.536.0212.7006.014.120.328.29055745
\n", "

71 rows × 17 columns

\n", "
" ], "text/plain": [ " AT HAT LAT HT LT Rain Mrain Sun Msnow Snow AW \\\n", "Place \n", "Naha 28.3 26.0 31.1 33.6 23.4 178.0 79.0 206.5 0 0 6.0 \n", "Naha 25.3 23.5 27.7 30.8 19.9 200.0 118.0 129.7 0 0 7.3 \n", "Naha 21.3 19.1 23.8 28.5 13.9 121.0 79.0 120.0 0 0 5.0 \n", "Naha 17.3 15.0 19.6 23.6 10.3 130.0 52.0 89.4 0 0 5.4 \n", "Naha 16.8 14.1 19.8 23.5 10.6 66.0 36.5 145.4 0 0 5.0 \n", "... ... ... ... ... ... ... ... ... ... ... ... \n", "Choshi 14.3 10.8 17.6 21.3 3.5 70.5 13.5 232.2 0 0 5.4 \n", "Choshi 18.2 15.2 21.6 26.1 12.2 151.0 56.5 257.0 0 0 5.7 \n", "Choshi 21.1 18.9 24.0 27.3 17.1 177.5 56.0 172.3 0 0 4.5 \n", "Choshi 24.0 21.6 27.1 30.9 20.0 77.5 23.0 214.9 0 0 4.5 \n", "Choshi 24.9 22.6 28.2 33.1 18.9 113.5 36.0 212.7 0 0 6.0 \n", "\n", " MW PMW Vap Hum Lhum Corrosion \n", "Place \n", "Naha 14.5 20.9 28.5 74 43 674 \n", "Naha 22.0 33.6 23.4 72 40 2606 \n", "Naha 12.7 20.6 17.4 66 34 546 \n", "Naha 14.5 21.5 12.7 64 37 704 \n", "Naha 13.1 20.2 11.8 61 32 620 \n", "... ... ... ... ... ... ... \n", "Choshi 15.6 19.2 11.0 67 22 567 \n", "Choshi 21.1 26.8 16.6 78 30 541 \n", "Choshi 14.3 19.4 22.3 89 46 830 \n", "Choshi 12.8 18.6 26.5 89 53 676 \n", "Choshi 14.1 20.3 28.2 90 55 745 \n", "\n", "[71 rows x 17 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 記述子(特徴量)の選定および削除\n", "df = df.drop(['Month'],axis = 1)\n", "df" ] }, { "cell_type": "markdown", "id": "82b5fd91", "metadata": {}, "source": [ "# 2. 機械学習モデルの構築と比較" ] }, { "cell_type": "markdown", "id": "8fd1672d", "metadata": {}, "source": [ "### データセットの指定\n", "16の気象データを説明変数、腐食量を目的変数とします。" ] }, { "cell_type": "code", "execution_count": 13, "id": "b236ba69", "metadata": {}, "outputs": [], "source": [ "#腐食量(Corrosion)を目的変数として、それ以外を説明変数とする\n", "X = df.iloc[0:, 0:16] # 説明変数\n", "y = df.iloc[0:, -1] # 目的変数" ] }, { "cell_type": "markdown", "id": "8f619bf0-696c-4d81-b51e-de12f709ae0a", "metadata": {}, "source": [ "### 【解説】説明変数と目的変数\n", "\n", "Pythonの操作の観点から説明変数(特徴量)と目的変数(ターゲット変数)について説明します。\n", "\n", "機械学習や統計分析では、データセット内の変数を説明変数と目的変数に分けて扱います。\n", "\n", "**説明変数**(または特徴量)は、データセット内の独立変数であり、予測や解析のための情報を提供します。これらの変数は、目的変数に影響を与える可能性がある特徴や属性を表しています。説明変数は、予測モデルの入力として使用され、それぞれのデータポイントに関する情報を提供します。\n", "\n", "**目的変数**(またはターゲット変数)は、予測や分析の対象となる変数であり、説明変数に基づいて予測される値です。目的変数は、モデルが学習しようとする対象であり、予測の精度やモデルの評価に使用されます。\n", "\n", "Pythonにおいて、データセット内の説明変数と目的変数は、通常、NumPy配列、pandasのデータフレーム、またはSciPyのスパース行列の形式で表現されます。これらのデータ構造を操作して、説明変数と目的変数を適切に抽出し、モデルの学習や予測に使用します。\n" ] }, { "cell_type": "code", "execution_count": 16, "id": "14c42ca6-a69a-4baa-b4d6-3991a874039e", "metadata": {}, "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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ATHATLATHTLTRainMrainSunMsnowSnowAWMWPMWVapHumLhum
Place
Naha28.326.031.133.623.4178.079.0206.5006.014.520.928.57443
Naha25.323.527.730.819.9200.0118.0129.7007.322.033.623.47240
Naha21.319.123.828.513.9121.079.0120.0005.012.720.617.46634
Naha17.315.019.623.610.3130.052.089.4005.414.521.512.76437
Naha16.814.119.823.510.666.036.5145.4005.013.120.211.86132
...................................................
Choshi14.310.817.621.33.570.513.5232.2005.415.619.211.06722
Choshi18.215.221.626.112.2151.056.5257.0005.721.126.816.67830
Choshi21.118.924.027.317.1177.556.0172.3004.514.319.422.38946
Choshi24.021.627.130.920.077.523.0214.9004.512.818.626.58953
Choshi24.922.628.233.118.9113.536.0212.7006.014.120.328.29055
\n", "

71 rows × 16 columns

\n", "
" ], "text/plain": [ " AT HAT LAT HT LT Rain Mrain Sun Msnow Snow AW \\\n", "Place \n", "Naha 28.3 26.0 31.1 33.6 23.4 178.0 79.0 206.5 0 0 6.0 \n", "Naha 25.3 23.5 27.7 30.8 19.9 200.0 118.0 129.7 0 0 7.3 \n", "Naha 21.3 19.1 23.8 28.5 13.9 121.0 79.0 120.0 0 0 5.0 \n", "Naha 17.3 15.0 19.6 23.6 10.3 130.0 52.0 89.4 0 0 5.4 \n", "Naha 16.8 14.1 19.8 23.5 10.6 66.0 36.5 145.4 0 0 5.0 \n", "... ... ... ... ... ... ... ... ... ... ... ... \n", "Choshi 14.3 10.8 17.6 21.3 3.5 70.5 13.5 232.2 0 0 5.4 \n", "Choshi 18.2 15.2 21.6 26.1 12.2 151.0 56.5 257.0 0 0 5.7 \n", "Choshi 21.1 18.9 24.0 27.3 17.1 177.5 56.0 172.3 0 0 4.5 \n", "Choshi 24.0 21.6 27.1 30.9 20.0 77.5 23.0 214.9 0 0 4.5 \n", "Choshi 24.9 22.6 28.2 33.1 18.9 113.5 36.0 212.7 0 0 6.0 \n", "\n", " MW PMW Vap Hum Lhum \n", "Place \n", "Naha 14.5 20.9 28.5 74 43 \n", "Naha 22.0 33.6 23.4 72 40 \n", "Naha 12.7 20.6 17.4 66 34 \n", "Naha 14.5 21.5 12.7 64 37 \n", "Naha 13.1 20.2 11.8 61 32 \n", "... ... ... ... ... ... \n", "Choshi 15.6 19.2 11.0 67 22 \n", "Choshi 21.1 26.8 16.6 78 30 \n", "Choshi 14.3 19.4 22.3 89 46 \n", "Choshi 12.8 18.6 26.5 89 53 \n", "Choshi 14.1 20.3 28.2 90 55 \n", "\n", "[71 rows x 16 columns]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X" ] }, { "cell_type": "markdown", "id": "88747603-c219-4abe-87e4-4e1d015e89cc", "metadata": {}, "source": [ "\n", "\n", "### 標準化 \n", "モデルはデータのスケールに敏感であるため、次元削減を行う前にデータを標準化することが重要です。標準化とは、各特徴量を平均0、標準偏差1にスケーリングする手法で、異なるスケールを持つ特徴量を均等に扱えるようにします。これにより、モデルが特徴量のスケールに影響されず、データ全体の構造を正確に反映することが可能に\n", "\n", "標準化は、pythonではScikit-learnライブラリで提供されている`StandardScaler`クラスで、データの標準化を簡単に行うことができます。なります。" ] }, { "cell_type": "code", "execution_count": 19, "id": "2110ca4d-a888-43d9-b79e-48fe785bad50", "metadata": {}, "outputs": [], "source": [ "from sklearn.preprocessing import StandardScaler" ] }, { "cell_type": "code", "execution_count": 21, "id": "f12bdf8d-916a-4a60-9d4a-92e568a97b3d", "metadata": {}, "outputs": [], "source": [ "# データの標準化\n", "scaler = StandardScaler()\n", "X_std = scaler.fit_transform(X)" ] }, { "cell_type": "markdown", "id": "66c40790-2d6b-40ab-a1dd-1a19d4eee51d", "metadata": {}, "source": [ "### データセットの分割(Data set splitting)\n", "機械学習モデルの性能を正確に評価するためには、モデルを学習させる**訓練データ**と、学習済みのモデルの性能を評価するための**テストデータ**にデータを分割する必要があります。scikit-learnの`train_test_split()`関数を使用すると、この分割を簡単に実行できます。" ] }, { "cell_type": "code", "execution_count": 24, "id": "39820900", "metadata": {}, "outputs": [], "source": [ "#データセットの分割\n", "from sklearn.model_selection import train_test_split\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X_std, y, \n", " test_size = 0.1, # CV用データ分割\n", " random_state = 42\n", " ) " ] }, { "cell_type": "markdown", "id": "f3b64d37-8c60-4382-8a63-29021b69f5a9", "metadata": {}, "source": [ "\n", "\n", "#### 【解説】データセットの分割\n", "\n", "`train_test_split`関数は、PythonのScikit-learnライブラリで提供される便利なツールで、データセットをトレーニングデータとテストデータに分割するために使用されます。機械学習モデルを構築する際、データセットを適切に分割してモデルの学習と評価を行うことが重要です。\n", "\n", "**トレーニングデータ**を使ってモデルを学習し、**テストデータ**を使ってそのモデルのパフォーマンスを評価します。これにより、モデルが未知のデータに対してどの程度適切に予測できるかを確認できます。\n", "\n", "`train_test_split`関数の基本的な使い方は以下の通りです:\n", "\n", "```python\n", "from sklearn.model_selection import train_test_split\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", "```\n", "\n", "- **`X`** は説明変数(特徴量)のデータセットを表し、**`y`** は目的変数(ターゲット変数)のデータセットを表します。\n", "- **`test_size`**: テストデータの割合を指定します。例えば、`test_size=0.2`と指定すると、データセットの20%がテストデータに、残りの80%がトレーニングデータになります。\n", "- **`random_state`**: 乱数シードを指定することで、データの分割を再現可能にします。同じ`random_state`を指定すると、分割結果が毎回同じになります。\n", "\n", "このコードを実行すると、指定したデータセットがトレーニングデータ(`X_train`、`y_train`)とテストデータ(`X_test`、`y_test`)に分割されます。これにより、トレーニングデータを使ってモデルを訓練し、テストデータを用のワークフローにおいて非常に重要なステップです。" ] }, { "cell_type": "code", "execution_count": 27, "id": "06d54543", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1.03120003, 0.93245363, 1.14266015, ..., 1.01509118,\n", " 0.68645297, 0.85825371],\n", " [ 0.94916619, 1.04226526, 0.78741606, ..., 0.80161635,\n", " 0.23828597, 0.42912685],\n", " [ 0.58001391, 0.61522005, 0.66900136, ..., 0.49326382,\n", " 0.79849472, -0.64369028],\n", " ...,\n", " [ 0.23820624, 0.29798647, 0.06212602, ..., 0.24420986,\n", " 1.02257822, 0.21456343],\n", " [ 0.01944934, 0.21257743, -0.24871256, ..., -0.28947721,\n", " -0.43396452, 0.57216914],\n", " [-2.1271028 , -2.27648604, -1.84731101, ..., -1.53474704,\n", " -1.44234027, -1.43042284]])" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train" ] }, { "cell_type": "markdown", "id": "cb8793e0-a6e6-4b84-abaf-4fcd023a3880", "metadata": {}, "source": [ "### モデル選択\n", "scikit-learnは、機械学習モデルの実装や評価を支援するための豊富なツールセットを提供しています。予測タスクにおいて、scikit-learnではさまざまなアルゴリズムが利用可能です。モデルの選択は、データの特性やタスクの要件に基づいて行う必要があります。\n", "\n", "以下に、scikit-learnの予測モデルの一部とその特徴を紹介します。\n", "\n", "1. **サポートベクターマシン(Support Vector Machines, SVM)**\n", " - 線形または非線形の分類を行います。\n", " - マージン最大化を通じて境界を定義し、データを分類します。\n", " - データの分離が明確でない場合や、高次元のデータセットに適しています。\n", "\n", "2. **決定木(Decision Trees)**\n", " - 非線形な分類を行うためのモデルで、条件に基づいてデータを分割します。\n", " - データの特徴量の重要度を理解することができます。\n", "\n", "3. **ランダムフォレスト(Random Forests)**\n", " - 複数の決定木を組み合わせたアンサンブル学習法であり、分類の正確性と汎化能力を向上させます。\n", " - 高い精度が要求される場合や、特徴量の重要度を評価したい場合に使用されます。\n", "\n", "4. **ニューラルネットワーク(Neural Networks)**\n", " - 複数の層で構成されたネットワークを使用して、非線形な分類を行います。\n", " - 大規模なデータセットや高度なパターンの抽出が必要な場合に適しています。" ] }, { "cell_type": "markdown", "id": "dce9813d", "metadata": {}, "source": [ "## 1. 線形重回帰\n", "機械学習で最も汎用的なモデルの一つである線形重回帰モデルを作成してみましょう。 単回帰分析と同様に、複数の説明変数を用いて目的変数を予測するモデルです。" ] }, { "cell_type": "markdown", "id": "2c73c569-bcb0-41f6-9a2f-76cf5e63e613", "metadata": {}, "source": [ "### ① モデル構築\n", "LinearRegression クラスは、Scikit-learnライブラリから提供される線形回帰モデルのクラスです。線形重回帰では、複数の特徴量(独立変数)を使用して目的変数(従属変数)を予測するモデルを構築します。" ] }, { "cell_type": "code", "execution_count": 32, "id": "0eb44a57", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
LinearRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "LinearRegression()" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 線形回帰モデル\n", "from sklearn.linear_model import LinearRegression\n", "\n", "#予測器の作成\n", "model = LinearRegression()\n", "model.fit(X_train, y_train)" ] }, { "cell_type": "markdown", "id": "14850723-c56a-49f7-813d-8cc6b399de8e", "metadata": {}, "source": [ "### ② 特徴量の評価(重要度)\n", "線形回帰モデルの係数(重み)と切片を出力しましょう。また、線形回帰モデルの係数をPandasのSeries型に変換することで、各説明変数が目的変数に与える影響をより視覚的に捉えやすくなります。これにより、モデルの解釈が容易になり、より深い分析が可能になります。" ] }, { "cell_type": "code", "execution_count": 35, "id": "661aba25", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "係数: [-3952.58929155 2318.17620899 1699.55454249 -200.52949204\n", " 381.11598997 -45.73435848 -12.2553018 -49.25127598\n", " -2306.61305547 2302.42867058 251.53460863 -589.00126328\n", " 774.45398591 216.69309221 -175.64217431 -44.52189166]\n", "切片: 741.9109174228892\n" ] } ], "source": [ "#係数(重み)と切片\n", "print('係数:',model.coef_)\n", "print('切片:',model.intercept_)" ] }, { "cell_type": "code", "execution_count": 37, "id": "a4020771-930a-4335-8f4f-62aee97661c5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AT -3952.589292\n", "HAT 2318.176209\n", "LAT 1699.554542\n", "HT -200.529492\n", "LT 381.115990\n", "Rain -45.734358\n", "Mrain -12.255302\n", "Sun -49.251276\n", "Msnow -2306.613055\n", "Snow 2302.428671\n", "AW 251.534609\n", "MW -589.001263\n", "PMW 774.453986\n", "Vap 216.693092\n", "Hum -175.642174\n", "Lhum -44.521892\n", "dtype: float64" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#係数をPandasのSeries型に変換\n", "coef = pd.Series(model.coef_, index = X.columns)\n", "coef" ] }, { "cell_type": "markdown", "id": "22494466-6130-42d7-be33-709409d3942a", "metadata": {}, "source": [ "### 可視化\n", "線形回帰モデルの各説明変数の係数を棒グラフで可視化し、どの説明変数が目的変数に最も大きな影響を与えているかを視覚的に確認してみましょう。\n", "\n", "* **直感的な理解**: 棒グラフの長さによって、各説明変数の影響の大きさを一目瞭然にわかります。\n", "* **重要変数の特定**: 絶対値が大きい係数を持つ変数が、目的変数に大きな影響を与えていることがわかります。\n", "* **正負の判断**: 係数の符号から、説明変数と目的変数の関係が正の相関か負の相関かがわかります" ] }, { "cell_type": "code", "execution_count": 40, "id": "43b3f194-25b6-43d8-b126-99275515d218", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 回帰係数の可視化\n", "fig, ax = plt.subplots(figsize=(6,6))\n", "\n", "imp_coef = coef.sort_values()\n", "\n", "ax.barh(imp_coef.index,\n", " imp_coef,\n", " color ='blue')\n", "\n", "ax.grid()\n", "plt.title('Regression coefficient') \n", "\n", "plt.show() " ] }, { "cell_type": "markdown", "id": "c38c3170", "metadata": {}, "source": [ "### ③ モデルの評価:精度の計算\n", "モデルの汎化性能を評価するために、決定係数(R²スコア)を用いて訓練データとテストデータのスコアを比較します。\n", "\n", "**過学習**: モデルが訓練データに過度に適合し、新しいデータに対しては性能が低下する現象です。訓練データのR²スコアが高く、テストデータのR²スコアが低い場合、過学習が疑われます。 \n", "**汎化性能**: モデルが未知のデータに対しても高い予測精度を示す能力です。訓練データとテストデータのR²スコアが近い場合、モデルは汎化性能が高いと考えられます。 \n", "す。\n", "### 訓練データ" ] }, { "cell_type": "code", "execution_count": 43, "id": "5576534d", "metadata": {}, "outputs": [], "source": [ "#予測値\n", "y_pred_train = model.predict(X_train)" ] }, { "cell_type": "code", "execution_count": 45, "id": "d97bfc1f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "訓練データ決定係数:0.829\n" ] } ], "source": [ "# 訓練データの精度\n", "r2_score = model.score(X_train, y_train)\n", "print('訓練データ決定係数:{:.3f}'.format(r2_score))" ] }, { "cell_type": "markdown", "id": "25a84864", "metadata": {}, "source": [ "### テストデータ" ] }, { "cell_type": "code", "execution_count": 48, "id": "184382ee", "metadata": {}, "outputs": [], "source": [ "#テストデータの予測値\n", "y_pred_test = model.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 50, "id": "3b6bb3fb-53eb-4506-a272-342b4f688bde", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "テストデータ決定係数:0.764\n" ] } ], "source": [ "# テストデータの精度\n", "r2_score = model.score(X_test, y_test)\n", "print('テストデータ決定係数:{:.3f}'.format(r2_score))" ] }, { "cell_type": "markdown", "id": "204aef0d", "metadata": {}, "source": [ "### ④ 観測値-予測値プロット\n", "機械学習モデルの予測結果と実際の観測値を散布図で可視化したグラフです。このプロットは、モデルの予測精度を評価し、予測誤差の傾向を把握する上で非常に有効です。\n", "\n", "**理想的なプロット**: 予測値と観測値がほぼ一致する場合、データ点が対角線上に近接して分布します。これは、モデルがデータの傾向を正しく捉えていることを示します。 \n", "**誤差の傾向**: データ点が対角線から大きく外れている場合、モデルの予測に誤差が含まれていることを示します。また、誤差が特定の範囲で偏っている場合、モデルに改善の余地があることを示唆します。 " ] }, { "cell_type": "code", "execution_count": 53, "id": "831c9113-0ee1-4ab9-ad8f-f1dd220ca524", "metadata": {}, "outputs": [ { "data": { "image/png": "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v792CXhzzz//PJRKpfZxYWEh3nnnHcjlcsyYMQMAcP78eRw9erTVa6urq9HQ0ABPT0/ttSeeeAKAOlBVVVW1ek15eTlOnTpl9GdNSUmBEAJvv/020tPTMXjwYIwYMUKnTHBwMGbPno3c3Fz87W9/085Dau7IkSO4cuUKAKBv374YO3Ysvv3221ZL5letWoWamhqj60lEhuGcHCLq0CuvvILa2lq88847GDBgAO644w70798fdXV1+OKLL3D69GkMGDAAe/fubbXbcUhICGpqanDrrbfijjvuQG1tLXbs2IFr167hrbfe0q5aKi0tRXR0NG6++WYMGzYMvXv3RlVVFfbs2QOlUomnn35a+55TpkzB888/jxdffBE33ngjpkyZgvDwcFRVVeHHH3+EQqHASy+9hCFDhhj1OWfMmAEfHx/87W9/g1Kp1Jlw3Nzrr7+O77//Hk8//TTee+89xMbGQi6X49y5c8jPz8fp06dRVlamnUP02muvYfTo0XjggQfw0UcfYcCAATh27BiOHj2KuLg4ba8WEZmZpdesE5H92r9/v7jnnntEaGiocHNzE76+viI2NlasWbNGXLlypVX58PBwER4eLqqqqsTvfvc7ERgYKNzd3cWIESPEnj17dMpWV1eLtLQ0MXbsWBESEiK6desmQkNDxZQpU8Tnn3/eZn3uvPNO0atXL+Hm5iaCg4NFbGysePHFF7V79Qjx2z45mzdv7vAzPvjgg9o9dYqLi9ssd+XKFfHKK6+I4cOHCy8vL+Hp6SkiIiLEzJkzxbvvviuUSqVO+ePHj4tp06aJHj16CG9vbzF16lRx/PhxkZqayn1yiLqIJISevlYiIiIiO8c5OUREROSQGHKIiIjIITHkEBERkUNiyCEiIiKHxJBDREREDokhh4iIiBwSQw4RERE5JIYcIiIickgMOUREROSQGHKIiIjIITHkEBERkUNiyCEiIiKH9P83gIjv5yCeQgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(6,6))\n", "\n", "#データのプロット\n", "ax.plot(y_train, y_pred_train, 'o', c = 'blue', label ='train')\n", "ax.plot(y_test, y_pred_test, 'o', c = 'red', label ='test')\n", "\n", "# 対角線のプロット\n", "ax.plot([0, 3000], [0, 3000], \n", " linestyle='--', \n", " color ='gray') \n", "\n", "#グラフの修飾\n", "ax.axis('square')\n", "ax.set_xlabel('Observed',fontsize = 14)\n", "ax.set_ylabel('Predicted',fontsize = 14)\n", "\n", "ax.set_xlim(0,3000)\n", "ax.set_ylim(0,3000)\n", "ax.legend(fontsize = 14)\n", "ax.grid()\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "c4207e13", "metadata": {}, "source": [ "## 2.Lasso回帰\n", "\n", "Lasso回帰は、線形回帰モデルにL1正則化項を追加することで、特徴選択と過学習防止という二つの効果を実現する手法です。\n", "\n", "**【1】特徴選択** \n", "L1正則化項は、モデルの複雑さを抑える働きがあり、多くの場合、一部の回帰係数を厳密に0にします。これにより、目的変数にほとんど影響を与えない無関係な特徴量を自動的にモデルから除外することができます。この特徴選択機能は、高次元のデータにおいて、モデルの解釈性を高め、過学習を防ぐ上で非常に有効です。\n", "\n", "**【2】過学習防止** \n", "L1正則化は、モデルの複雑さを制限することで、過学習を抑制します。過学習とは、モデルが訓練データに過度に適合しすぎてしまい、新しいデータに対しては予測精度が低下する現象です。Lasso回帰は、この過学習問題に対処し、モデルの汎化性能を向上させることができます。 \n", "\n", "\n", "Lasso回帰は、特徴量が多く、モデルの解釈性や汎化性能を重視する場面で特に有効な手法です。特徴選択と過学習防止という二つの効果を同時に実現できるため、様々な分野で活用されています。" ] }, { "cell_type": "markdown", "id": "d812f3ec-8a4b-4132-a5d5-987dec0ac155", "metadata": {}, "source": [ "### ① モデル構築\n", "Lasso は、Scikit-learnライブラリから提供されるLasso回帰のクラスよりインスタンスを作成することができます。特徴量(説明変数)と目的変数の設定についても線形重回帰と同じ手続きで進められます。" ] }, { "cell_type": "code", "execution_count": 57, "id": "52ed3779", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Lasso()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "Lasso()" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Lasso回帰モデル\n", "from sklearn.linear_model import Lasso\n", "\n", "#予測器の作成\n", "model = Lasso()\n", "model.fit(X_train, y_train)" ] }, { "cell_type": "markdown", "id": "c0bc9b23-2105-4d46-85da-f103935162ef", "metadata": {}, "source": [ "### ② 特徴量の評価(重要度)" ] }, { "cell_type": "code", "execution_count": 60, "id": "1f4d47e3-a6db-4635-9849-cee0b7338ba4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "係数: [ -92.84523428 0. -0. -156.83813755 487.45353743\n", " -101.58514893 10.26075815 -86.28887154 -3.69068057 -3.22874175\n", " 202.48798271 -477.01146337 686.41788517 174.58523062 -124.88274183\n", " -53.85873523]\n", "切片: 737.2917977685635\n" ] } ], "source": [ "#係数(重み)と切片\n", "print('係数:',model.coef_)\n", "print('切片:',model.intercept_)" ] }, { "cell_type": "code", "execution_count": 62, "id": "50a81023-b36d-4d66-ad98-95767f0f6dfe", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AT -92.845234\n", "HAT 0.000000\n", "LAT -0.000000\n", "HT -156.838138\n", "LT 487.453537\n", "Rain -101.585149\n", "Mrain 10.260758\n", "Sun -86.288872\n", "Msnow -3.690681\n", "Snow -3.228742\n", "AW 202.487983\n", "MW -477.011463\n", "PMW 686.417885\n", "Vap 174.585231\n", "Hum -124.882742\n", "Lhum -53.858735\n", "dtype: float64" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "coef = pd.Series(model.coef_, index = X.columns)\n", "coef" ] }, { "cell_type": "code", "execution_count": 64, "id": "3054cc28-b058-404c-a604-3ef1a4c21e43", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh4AAAIOCAYAAAD3FQTRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABO90lEQVR4nO3deXhTZf7+8TvQEFpoyyYUaMoiyCIgoCMiI22EFhAd0UEFRK0FRkAQrDpaRWndqqjjwoh+R7qgyKIjg8ogUh2CLLWggKIy6o8RBAFxgQZpCSk9vz+YZoxd0kJ7kob367pyyXny5OTzfDjQ23NOgsUwDEMAAAAmaBDoAgAAwJmD4AEAAExD8AAAAKYheAAAANMQPAAAgGkIHgAAwDQEDwAAYBqCBwAAMA3BAwAAmIbgAQSp3NxcWSwWffTRR4Eupd6bO3euunTpokaNGslisejw4cOSpFmzZikuLk5hYWFq1qyZJCkhIUEJCQk1fo+OHTsqOTm51mquyMaNG5Wenu6tH6iPwgJdAADUpW3btum2227TxIkTddNNNyksLEyRkZF688039cgjj+i+++7TiBEjZLPZJEnz5s07pff5xz/+oaioqNosvZyNGzcqIyNDycnJ3qAE1DcEDwAh7fPPP5ckTZo0SRdeeKF3/LPPPpMk3XbbbWrdurV3vGfPnqf0Pv369TuNKoEzB5dagHrs2LFjuuOOO9S3b19FR0erRYsWGjhwoN58881yc19//XUNGDBA0dHRioiIUOfOnZWSkuJ9vrS0VA8//LC6deum8PBwNWvWTH369NGzzz7rs5/169dryJAhioyMVEREhC6++GL985//rFa9brdbDz74oHr06KHGjRurZcuWcjgc2rhxo8+a0tLS1KlTJzVq1Ejt27fXrbfeWuHlhaVLl2rgwIFq0qSJmjZtqmHDhmnr1q3e5xMSEjR+/HhJ0oABA2SxWJScnKyOHTtq1qxZkqQ2bdrIYrEoPT3d+5rfXmqpTt0VXWpxuVy68847fdYyc+ZMHT161GeexWLRtGnT9Morr6hHjx6KiIjQeeedpxUrVnjnpKen66677pIkderUSRaLRRaLRU6ns1q9B4IFZzyAesztduvnn3/WnXfeqfbt2+v48eN67733dPXVVysnJ0c33nijJCk/P1/XXXedrrvuOqWnp6tx48bavXu3/vWvf3n3NWfOHKWnp2vWrFkaPHiwPB6P/v3vf/v8wF+7dq0SExPVp08fZWVlyWazad68ebriiiu0ePFiXXfddZXWWlJSohEjRmjdunWaOXOmLr30UpWUlOjDDz/Ut99+q4svvliGYWjUqFF6//33lZaWpksuuUSffvqpZs+erfz8fOXn53sviTz66KOaNWuWbr75Zs2aNUvHjx/XE088oUsuuUSbNm1Sz549NW/ePC1evFgPP/ywcnJy1L17d5111lmaMWOGnn/+eWVlZWnVqlWKjo5WbGzsKdddkaKiIsXHx2vv3r2699571adPH33++ed64IEHtH37dr333nuyWCze+f/85z+1efNmPfjgg2ratKnmzJmjq666Sl9++aU6d+6siRMn6ueff9bcuXO1bNkytW3bVtKpn6EBAsYAEJRycnIMScbmzZur/ZqSkhLD4/EYEyZMMPr16+cdf/LJJw1JxuHDhyt97eWXX2707du3yv1fdNFFRuvWrY0jR474vGevXr2M2NhYo7S0tNLXvvzyy4Yk46WXXqp0zqpVqwxJxpw5c3zGly5dakgy/va3vxmGYRjffvutERYWZkyfPt1n3pEjR4yYmBjj2muv9Y5V1sfZs2cbkowffvjBZzw+Pt6Ij4+vUd2GYRgdOnQwbrrpJu92Zmam0aBBg3Lv+/e//92QZKxcudI7Jslo06aN4XK5vGMHDhwwGjRoYGRmZnrHnnjiCUOS8c0331RZCxDMuNQC1HOvv/66Bg0apKZNmyosLExWq1VZWVnasWOHd87vfvc7SdK1116r1157Td999125/Vx44YX65JNPNHXqVL377rtyuVw+zx89elQFBQUaPXq0mjZt6h1v2LChbrjhBu3du1dffvllpXW+8847aty4sc/lnd8qOwPz20sW11xzjZo0aaL3339fkvTuu++qpKREN954o0pKSryPxo0bKz4+vlYvP1Sn7oqsWLFCvXr1Ut++fX1qHDZsWIWXSBwOhyIjI73bbdq0UevWrbV79+7aWAYQNAgeQD22bNkyXXvttWrfvr0WLlyo/Px8bd68WSkpKTp27Jh33uDBg7V8+XLvD+vY2Fj16tVLixcv9s5JS0vTk08+qQ8//FAjRoxQy5YtNWTIEO/HeQ8dOiTDMLyn+H+tXbt2kqSffvqp0lp/+OEHtWvXTg0aVP7Xzk8//aSwsDCdddZZPuMWi0UxMTHe/X///feSTgYqq9Xq81i6dKl+/PFHf62rturUXZHvv/9en376abn6IiMjZRhGuRpbtmxZbh82m03FxcWnVT8QbLjHA6jHFi5cqE6dOmnp0qU+9wu43e5yc6+88kpdeeWVcrvd+vDDD5WZmalx48apY8eOGjhwoMLCwpSamqrU1FQdPnxY7733nu69914NGzZMe/bsUfPmzdWgQQPt37+/3L737dsnSWrVqlWltZ511llav369SktLK/0h3rJlS5WUlOiHH37wCR+GYejAgQPeMzdl7/P3v/9dHTp0qEanTl116q5Iq1atFB4eruzs7EqfB85EnPEA6jGLxeL9UqwyBw4cqPBTLWVsNpvi4+P1+OOPS5LPp0DKNGvWTKNHj9att96qn3/+Wbt27VKTJk00YMAALVu2zOf/wktLS7Vw4ULFxsbqnHPOqfR9R4wYoWPHjik3N7fSOUOGDJF0MlD92htvvKGjR496nx82bJjCwsK0c+dOXXDBBRU+akt16q7I5Zdfrp07d6ply5YV1texY8ca11J2Yy1nQVCfccYDCHL/+te/tGvXrnLjl112mS6//HItW7ZMU6dO1ejRo7Vnzx499NBDatu2rb7++mvv3AceeEB79+7VkCFDFBsbq8OHD+vZZ5+V1WpVfHy8JOmKK65Qr169dMEFF+iss87S7t279cwzz6hDhw7q2rWrJCkzM1OJiYlyOBy688471ahRI82bN0+fffaZFi9e7BOAfmvs2LHKycnR5MmT9eWXX8rhcKi0tFQFBQXq0aOHxowZo8TERA0bNkx33323XC6XBg0a5P1US79+/XTDDTdIOvnR1QcffFD33Xef/vOf/2j48OFq3ry5vv/+e23atElNmjRRRkZGrfS/OnVXZObMmXrjjTc0ePBg3X777erTp49KS0v17bffavXq1brjjjs0YMCAGtXSu3dvSdKzzz6rm266SVarVd26dfO5NwQIegG+uRVAJco+jVHZo+yTDY899pjRsWNHw2azGT169DBeeukl7yc2yqxYscIYMWKE0b59e6NRo0ZG69atjcsuu8xYt26dd85TTz1lXHzxxUarVq2MRo0aGXFxccaECROMXbt2+dS1bt0649JLLzWaNGlihIeHGxdddJHx9ttvV2tNxcXFxgMPPGB07drVaNSokdGyZUvj0ksvNTZu3Ogz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4uPjNXfuXEknL79ceumlVb5PWlqaUlNTvdsul0t2u11JSUl+mxbMPB6P8vLylJiYKKvVGuhygg798a+sRykpiSoupkcVCQ/3KDub46gy/DnzL9R6VHbVoDqCLnhkZWWppKRE7du3944ZhiGr1apDhw7J4XDo6NGj2rx5s9asWaO77rpL0sngceONN+rnn39Wfn6+brrppirfx2azyWazlRu3Wq0hcRCEyjrqCv3xr7jYSvDwg+OoavTHv1DpUU3WEFQ3l5aUlOjll1/WU089pW3btnkfn3zyiTp06KBXX31VZ599tux2u9566y1t27ZN8fHxkqS2bduqY8eOeuqpp3Ts2DFuLAUAIAgF1RmPFStW6NChQ5owYYKif/PvTo8ePVpZWVmaNm2aHA6H5s2bpy5duqhNmzbeOWWXWzp37qy4uDizywcAAH4E1RmPrKwsDR06tFzokKQ//vGP2rZtm7Zs2SKHw6EjR4547+8oEx8fryNHjnC2AwCAIBVUZzzefvvtSp/r37+/yj6A079/fyUnJ5ebM378eI0fP76uygMAAKcpqM54AACA0EbwAAAApiF4AAAA0xA8AACAaYLq5lIAwaOwUAqB7zWqEx6PtHJloKsA6ifOeAAAANMQPAAAgGkIHgAAwDQEDwAAYBpuLgVQoehoqbg40FWY779fkAygjnDGAwAAmIbgAQAATEPwAAAApiF4AAAA0xA8AACAaQIePK644goNHTq0wufy8/NlsVi0ZcsWk6sCAAB1IeDBY8KECfrXv/6l3bt3l3suOztbffv2Vf/+/QNQGQAAqG0BDx6XX365WrdurdzcXJ/xoqIiLV26VKNGjdLYsWMVGxuriIgI9e7dW4sXL/aZm5CQoGnTpmnatGlq1qyZWrZsqVmzZsngA/kAAASVgAePsLAw3XjjjcrNzfUJCq+//rqOHz+uiRMn6vzzz9eKFSv02Wef6U9/+pNuuOEGFRQU+OxnwYIFCgsLU0FBgZ577jk9/fTTmj9/vtnLAQAAVQiKby5NSUnRE088IafTKYfDIenkZZarr75a7du315133umdO336dK1atUqvv/66BgwY4B232+16+umnZbFY1K1bN23fvl1PP/20Jk2aVOF7ut1uud1u77bL5ZIkeTweeTyeulimKcpqr89rqEv0x7+y3oSHn5k9qs6hwXFUNfrjX6j1qCbr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RnXiyRmgtLRU+/btU2RkpCwWS6DLOWUul0t2u1179uxRVFRUoMsJOvTHP3rkHz2qGv3xL9R6ZBiGjhw5onbt2qlBg6rv4uCMx381aNBAsbGxgS6j1kRFRYXEwVxX6I9/9Mg/elQ1+uNfKPXI35mOMtxcCgAATEPwAAAApiF4hBibzabZs2fLZrMFupSgRH/8o0f+0aOq0R//zuQecXMpAAAwDWc8AACAaQgeAADANAQPAABgGoIHAAAwDcGjnnO73erbt68sFou2bdvm89y3336rK664Qk2aNFGrVq1022236fjx4z5ztm/frvj4eIWHh6t9+/Z68MEHq/Vd+8Fu165dmjBhgjp16qTw8HCdffbZmj17drn1n8k9qsi8efPUqVMnNW7cWOeff77WrVsX6JJMkZmZqd/97neKjIxU69atNWrUKH355Zc+cwzDUHp6utq1a6fw8HAlJCTo888/95njdrs1ffp0tWrVSk2aNNEf/vAH7d2718ylmCYzM1MWi0UzZ870jtEj6bvvvtP48ePVsmVLRUREqG/fvvr444+9z9MjSQbqtdtuu80YMWKEIcnYunWrd7ykpMTo1auX4XA4jC1bthh5eXlGu3btjGnTpnnnFBYWGm3atDHGjBljbN++3XjjjTeMyMhI48knnwzASmrXO++8YyQnJxvvvvuusXPnTuPNN980Wrdubdxxxx3eOWd6j35ryZIlhtVqNV566SXjiy++MGbMmGE0adLE2L17d6BLq3PDhg0zcnJyjM8++8zYtm2bMXLkSCMuLs745ZdfvHMee+wxIzIy0njjjTeM7du3G9ddd53Rtm1bw+VyeedMnjzZaN++vZGXl2ds2bLFcDgcxnnnnWeUlJQEYll1ZtOmTUbHjh2NPn36GDNmzPCOn+k9+vnnn40OHToYycnJRkFBgfHNN98Y7733nvH//t//884503tkGIZB8KjHVq5caXTv3t34/PPPywWPlStXGg0aNDC+++4779jixYsNm81mFBYWGoZhGPPmzTOio6ONY8eOeedkZmYa7dq1M0pLS01bh1nmzJljdOrUybtNj3xdeOGFxuTJk33Gunfvbtxzzz0BqihwDh48aEgy1q5daxiGYZSWlhoxMTHGY4895p1z7NgxIzo62njxxRcNwzCMw4cPG1ar1ViyZIl3znfffWc0aNDAWLVqlbkLqENHjhwxunbtauTl5Rnx8fHe4EGPDOPuu+82fv/731f6PD06iUst9dT333+vSZMm6ZVXXlFERES55/Pz89WrVy+1a9fOOzZs2DC53W7vab/8/HzFx8f7fIHNsGHDtG/fPu3atavO12C2wsJCtWjRwrtNj/7n+PHj+vjjj5WUlOQznpSUpI0bNwaoqsApLCyUJO/x8s033+jAgQM+/bHZbIqPj/f25+OPP5bH4/GZ065dO/Xq1Sukenjrrbdq5MiRGjp0qM84PZLeeustXXDBBbrmmmvUunVr9evXTy+99JL3eXp0EsGjHjIMQ8nJyZo8ebIuuOCCCuccOHBAbdq08Rlr3ry5GjVqpAMHDlQ6p2y7bE6o2Llzp+bOnavJkyd7x+jR//z44486ceJEhWsNpXVWh2EYSk1N1e9//3v16tVL0v9+r6vqz4EDB9SoUSM1b9680jn13ZIlS7RlyxZlZmaWe44eSf/5z3/0wgsvqGvXrnr33Xc1efJk3XbbbXr55Zcl0aMyBI8gkp6eLovFUuXjo48+0ty5c+VyuZSWllbl/iwWS7kxwzB8xn87x/jvTZMVvTYYVLdHv7Zv3z4NHz5c11xzjSZOnOjzXCj26HRUtNZQXGdVpk2bpk8//VSLFy8u99yp9CdUerhnzx7NmDFDCxcuVOPGjSuddyb3qLS0VP3799ejjz6qfv366ZZbbtGkSZP0wgsv+Mw7k3skSWGBLgD/M23aNI0ZM6bKOR07dtTDDz+sDz/8sNx3/F9wwQW6/vrrtWDBAsXExKigoMDn+UOHDsnj8XjTdkxMTLkEffDgQUnlE3mwqG6Pyuzbt08Oh0MDBw7U3/72N595odqjU9GqVSs1bNiwwrWG0jr9mT59ut566y198MEHio2N9Y7HxMRIOvl/o23btvWO/7o/MTExOn78uA4dOuTzf6sHDx7UxRdfbNIK6s7HH3+sgwcP6vzzz/eOnThxQh988IH++te/ej8FdCb3qG3bturZs6fPWI8ePfTGG29I4jjyCsidJTgtu3fvNrZv3+59vPvuu4Yk4+9//7uxZ88ewzD+d+Pkvn37vK9bsmRJuRsnmzVrZrjdbu+cxx57LGRunNy7d6/RtWtXY8yYMRXeDU6PfF144YXGlClTfMZ69OhxRtxcWlpaatx6661Gu3btjK+++qrC52NiYozHH3/cO+Z2uyu8KXDp0qXeOfv27QuZmwJdLpfP3zvbt283LrjgAmP8+PHG9u3b6ZFhGGPHji13c+nMmTONgQMHGobBcVSG4BECvvnmm0o/TjtkyBBjy5YtxnvvvWfExsb6fFT08OHDRps2bYyxY8ca27dvN5YtW2ZERUWFxEdFv/vuO6NLly7GpZdeauzdu9fYv3+/91HmTO/Rb5V9nDYrK8v44osvjJkzZxpNmjQxdu3aFejS6tyUKVOM6Ohow+l0+hwrRUVF3jmPPfaYER0dbSxbtszYvn27MXbs2Ao/BhkbG2u89957xpYtW4xLL700pD4G+Vu//lSLYdCjTZs2GWFhYcYjjzxifP3118arr75qREREGAsXLvTOOdN7ZBgEj5BQUfAwjJNnRkaOHGmEh4cbLVq0MKZNm+bzsVDDMIxPP/3UuOSSSwybzWbExMQY6enpIfF/8jk5OYakCh+/dib3qCLPP/+80aFDB6NRo0ZG//79vR8nDXWVHSs5OTneOaWlpcbs2bONmJgYw2azGYMHDza2b9/us5/i4mJj2rRpRosWLYzw8HDj8ssvN7799luTV2Oe3wYPemQYb7/9ttGrVy/DZrMZ3bt3N/72t7/5PE+PDMNiGCH6FYwAACDo8KkWAABgGoIHAAAwDcEDAACYhuABAABMQ/AAAACmIXgAAADTEDwAAIBpCB4AAMA0BA8AAGAaggcAADANwQMAAJiG4AEAAEzz/wE3Yu5jjm2FqwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 回帰係数の可視化\n", "fig, ax = plt.subplots(figsize=(6,6))\n", "\n", "imp_coef = coef.sort_values()\n", "\n", "ax.barh(imp_coef.index,\n", " imp_coef,\n", " color ='blue')\n", "\n", "ax.grid()\n", "plt.title('Lasso coefficient') \n", "\n", "plt.show() " ] }, { "cell_type": "markdown", "id": "61da773d", "metadata": {}, "source": [ "### ③ モデルの評価:精度の計算\n", "### 訓練データ" ] }, { "cell_type": "code", "execution_count": 67, "id": "f72c2d15", "metadata": {}, "outputs": [], "source": [ "#予測値\n", "y_pred_train = model.predict(X_train)" ] }, { "cell_type": "code", "execution_count": 69, "id": "13f445d7-89e8-46f5-9e6b-b8cb9aa942e2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "訓練データ決定係数:0.814\n" ] } ], "source": [ "# 訓練データの精度\n", "r2_score = model.score(X_train, y_train)\n", "print('訓練データ決定係数:{:.3f}'.format(r2_score))" ] }, { "cell_type": "markdown", "id": "6a11dd6a", "metadata": {}, "source": [ "### テストデータ" ] }, { "cell_type": "code", "execution_count": 72, "id": "674cc823", "metadata": {}, "outputs": [], "source": [ "#テストデータの予測値\n", "y_pred_test = model.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 74, "id": "9e26ad96-f53f-460b-8275-320f3a312d3d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "テストデータ決定係数:0.751\n" ] } ], "source": [ "# 訓練データの精度\n", "r2_score = model.score(X_test, y_test)\n", "print('テストデータ決定係数:{:.3f}'.format(r2_score))" ] }, { "cell_type": "markdown", "id": "21fd0a7a", "metadata": {}, "source": [ "### ④ 観測値-予測値プロット" ] }, { "cell_type": "code", "execution_count": 77, "id": "b7903a44", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(6,6))\n", "\n", "#データのプロット\n", "ax.plot(y_train, y_pred_train, 'o', c = 'blue', label ='train')\n", "ax.plot(y_test, y_pred_test, 'o', c = 'red', label ='test')\n", "\n", "# 対角線のプロット\n", "ax.plot([0, 3000], [0, 3000], \n", " linestyle='--', \n", " color ='gray') \n", "\n", "#グラフの修飾\n", "ax.axis('square')\n", "ax.set_xlabel('Observed',fontsize = 14)\n", "ax.set_ylabel('Predicted',fontsize = 14)\n", "\n", "ax.set_xlim(0,3000)\n", "ax.set_ylim(0,3000)\n", "ax.legend(fontsize = 14)\n", "ax.grid()\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "59414725", "metadata": {}, "source": [ "## 3. ランダムフォレスト\n", "\n", "ランダムフォレストは、複数の決定木をランダムに組み合わせることで、高い予測精度と安定性を両立させたアンサンブル学習モデルです。主な特徴は以下の通りです。\n", "\n", "**【1】アンサンブル学習による高精度化と過学習防止** \n", "複数の決定木を組み合わせることで、単一の決定木よりもより複雑なパターンを学習し、予測精度を高めることができます。また、各決定木は異なる特徴量を重視するため、特定の特徴量に過度に依存してしまうことを防ぎ、過学習のリスクを低減します。\n", "\n", "**【2】特徴量の重要度評価** \n", "ランダムフォレストは、各特徴量が予測にどれだけ貢献しているかを定量的に評価する機能を持っています。この機能を活用することで、重要な特徴量を特定し、モデルの解釈性を高めることができます。 \n", "\n", "ランダムフォレストは、高い予測精度と解釈性の両方を兼ね備えた強力な機械学習モデルです。様々な分野で活用されており、特に特徴量が多く、複雑なデータに対して有効です。" ] }, { "cell_type": "markdown", "id": "987d7166-179e-456f-91c6-efefa7efbb9f", "metadata": {}, "source": [ "### ① モデル構築\n", "`RandomForestRegressor()` は、Scikit-learnにおけるランダムフォレスト回帰のクラスです。RandomForestRegressor(n_estimators=10) で、10本の決定木を使用するランダムフォレスト回帰モデルを作成しています。なお、`n_estimators` は、ランダムフォレストに含まれる決定木の数を指定するパラメータです。" ] }, { "cell_type": "code", "execution_count": 81, "id": "2f072886", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
RandomForestRegressor(n_estimators=10)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "RandomForestRegressor(n_estimators=10)" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#ランダムフォレスト回帰\n", "from sklearn.ensemble import RandomForestRegressor\n", "\n", "#予測器の作成\n", "model = RandomForestRegressor(n_estimators=10)\n", "model.fit(X_train, y_train)" ] }, { "cell_type": "markdown", "id": "62b69be7-c42b-419d-96ad-4a9a5a532f46", "metadata": {}, "source": [ "### ② 特徴量の評価(重要度)" ] }, { "cell_type": "code", "execution_count": 84, "id": "d53c47a2-9e2a-4b4d-b614-4258e2af6da8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AT 1.718690e-02\n", "HAT 9.120968e-02\n", "LAT 1.107975e-02\n", "HT 4.170466e-03\n", "LT 4.855197e-02\n", "Rain 2.743546e-02\n", "Mrain 6.767113e-03\n", "Sun 5.826431e-03\n", "Msnow 0.000000e+00\n", "Snow 1.215263e-07\n", "AW 1.675484e-01\n", "MW 3.038722e-01\n", "PMW 1.088048e-01\n", "Vap 2.832872e-03\n", "Hum 9.253719e-03\n", "Lhum 1.954602e-01\n", "dtype: float64" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "coef = pd.Series(model.feature_importances_, index = X.columns)\n", "coef" ] }, { "cell_type": "code", "execution_count": 86, "id": "82ba1b1c-af95-4a07-909e-615ef2ecd418", "metadata": {}, "outputs": [ { "data": { "image/png": "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rsxRNaqoWbNm+NOf/tQg/5dRlxrVRGM5jxxVn4qa6jm0bt06TJ48GevXr8edd95p81pjOYcAx9WooqZ6HrVr1w4A0L17d5w5cwbJycly8HDWedQob7U0b94cvXv3Rk5Ojk17Tk4O7rjjjkq36d+/v13/7du34/bbb4dGo6m2T1VjujJH1agiIQSOHDmCkJCQ+pm4iupSo5poLOeRo+pTUVM8h7KzsxEfH4+srCzExcXZvd5YziHAcTWqqCmeRxUJIWCxWOR1p51HDn101YnK33qUlpYmjh49KubMmSO8vLzEyZMnhRBCzJs3T0yYMEHuX/5W0ccff1wcPXpUpKWl2b1VdM+ePcLNzU288MIL4tixY+KFF15oFG9hq88aJScni23btokTJ06Iw4cPi0mTJgl3d3exf/9+1Y+vPtS2RkIIcfjwYXH48GHRu3dvMW7cOHH48GHx7bffyq83pvPIEfVp6udQVlaWcHd3FytWrLB5G+jly5flPo3pHBLCMTVq6ufR66+/LjZv3iyOHz8ujh8/LtLT04Wvr6+YP3++3MdZ51GjDR5CCLFixQoRHh4umjdvLnr16iV27twpvzZx4kQRHR1t099oNIqePXuK5s2bi4iICLFq1Sq7MdevXy86d+4sNBqNiIyMFBs2bHD0YThUfddozpw5IiwsTDRv3ly0bNlSDBkyROzdu1eNQ3GY2tYIgN0SHh5u06cxnUf1XZ+mfg5FR0dXWqOJEyfajNmYziEh6r9GTf08eu2118Stt94qdDqd8PX1FT179hQrV64UpaWlNmM64zyShLj+dCARERGRgzXKZzyIiIjINTF4EBERkWoYPIiIiEg1DB5ERESkGgYPIiIiUg2DBxEREamGwYOIiIhUw+BBREREqmHwICIiItUweBAREZFqGDyIiIhINQweREREpJr/B08J/jv0MaWGAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 回帰係数の可視化\n", "fig, ax = plt.subplots(figsize=(6,6))\n", "\n", "imp_coef = coef.sort_values()\n", "\n", "ax.barh(imp_coef.index,\n", " imp_coef,\n", " color ='blue')\n", "\n", "ax.grid()\n", "plt.title('Random Forrest Feature Importance') \n", "plt.show()" ] }, { "cell_type": "markdown", "id": "4282c955", "metadata": {}, "source": [ "### ③ モデルの評価:精度の計算\n", "### 訓練データ" ] }, { "cell_type": "code", "execution_count": 89, "id": "ecda83bc", "metadata": {}, "outputs": [], "source": [ "#予測値\n", "y_pred_train = model.predict(X_train)" ] }, { "cell_type": "code", "execution_count": 91, "id": "fcb8e243-6feb-4d83-b8f7-1e8510182386", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "訓練データ決定係数:0.941\n" ] } ], "source": [ "# 訓練データの精度\n", "r2_score = model.score(X_train, y_train)\n", "print('訓練データ決定係数:{:.3f}'.format(r2_score))" ] }, { "cell_type": "markdown", "id": "c84b4cf5", "metadata": {}, "source": [ "### テストデータ" ] }, { "cell_type": "code", "execution_count": 94, "id": "021b029d", "metadata": {}, "outputs": [], "source": [ "#テストデータの予測値\n", "y_pred_test = model.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 96, "id": "340c851f-879f-424b-97e0-58fa2bc9cd63", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "テストデータ決定係数:0.853\n" ] } ], "source": [ "# 訓練データの精度\n", "r2_score = model.score(X_test, y_test)\n", "print('テストデータ決定係数:{:.3f}'.format(r2_score))" ] }, { "cell_type": "markdown", "id": "06d16720", "metadata": {}, "source": [ "### ④ 観測値-予測値プロット" ] }, { "cell_type": "code", "execution_count": 99, "id": "af9a407a", "metadata": {}, "outputs": [ { "data": { "image/png": "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BVQqlUuPqyIiajjI2NBOAPaCIccKrl27BgBwd2fHmaPTDj52pEHTRESWZI+zqJrDkGNFrjoOx5nwvyERuTJHCjgAQw4REREZwdECDsCQQ0REREbo2LEjAMcJOABnVxEREZER7rjjDoSGhiIoKMjWVTEae3LIqaSlpUGSJGRmZtq6KkREDu/gwYO4dOmS7rUjBRyAIYesIDMzU7exKhEROQalUomvvvoK69evd9hlM/i4yomo1YBSCZSUACEhQFwcIJPZulbW9fTTT2PSpEno2rWrratCROSwGg4y7t27t8Pu3ceQ4yTS04HZs4GiouvHwsKAFSuAlBTb1cvaAgICXH5VaSIiczjiLKrm8HGVE0hPByZO1A84AFBcrDmenm6begGaMTIJCQkAgIULF0Imk6FTp06QyWQoLCzE1KlTIUkSTp48iWXLluH222+HXC7H1KlTAQC///47Xn75ZcTExCAwMBByuRyRkZGYMWMGysvLDd6v8ZicwsJCSJKEqVOn4uTJk5g4cSI6deoELy8vDB8+HD/++KM1moKIyO45U8AB2JPj8NRqTQ+OoY3NhQAkCZgzBxg3zjaPruLj41FYWIj169dj2LBhGDZsGFQqFeRyOXx9fXXlZs2ahdzcXNx9991ITk7WDW7Lzs7GG2+8gaSkJERHR8PDwwOHDh3CO++8g2+++QY//PADFAqFUXUpLCxEdHQ0brvtNjz22GP47bff8PnnnyMhIQHHjh1zuAF1RESWtH//fqcKOABDjsNTKpv24DQkBHDmjKZcfLzVqqUT/8dN169fj/j4ePz973/HhQsX4OPjo7dB508//YRDhw41GUuTmJiI0tJS3foMWh988AGmTJmCVatWYcGCBUbVJSsrC6+99hqef/553bGXXnoJr776KtauXYu//vWvN/gpiYgc36233oq9e/eiX79+ThFwAD6ucnglJZYtZyvPPvuswcHCgYGBTQIOAKSmpsLHxwffffed0feIiorCs88+q3ds2rRpAIADBw6YWGMiIufi6+uLJ5980mkCDsCQ4/BCQixbzlYGDhzY7Ln09HSMGjUKnTt3hru7OyRJgpubGy5cuIDff//d6Hv06dNHr/cIAMLCwgAAVVVVN1RvIiJHplQqcezYMd1re95R/EbwcZWDi4vTzKIqLjY8LkeSNOftPZg3Nx7mjTfewPz589G5c2eM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/e8m16isrMT06dMRFBQET09PDBw4EF988UWTclevXsUbb7yBPn36QKFQoGPHjrj55pvx4IMP4vDhw03Kf/7550hKSkKnTp3Qvn179OrVC//+97+hVqv1yq1btw6SJGHdunXYunUr4uLi4O3tjcjISGRnZ0OSJEybNs3g5y8qKoJMJkNSUpLe8ZqaGrz88su4/fbb4enpCV9fX4wePRq7d+82eJ2ff/4ZycnJ8Pb2hkKhwF133YUjR44YLEtElsGQQ0QtWrduHerr6/H4448jKCio2XIvvfQSAOD999/XO15bW4vhw4djz549mDJlClJTU5Gfn4/x48fjo48+0is7ZcoUzJ8/HwDw6KOPYubMmRg4cCAyMjJw8OBBvbIvvvgixo8fj19++QX33nsvZsyYgfbt2+PZZ5/FpEmTDNbxf//7H8aPH4+AgADMmDEDd911F+Li4hAZGYlPP/3U4Liijz76CPX19UhNTdUdO3/+PGJjY/GPf/wD/v7+eOqpp3Dvvffi+++/R0JCAj777DO9axw5cgSDBg3C119/jdGjR2PmzJmora3F4MGDcfLkyWbblIjMJIiIWhAfHy8AiB07drRaNjQ0VAAQp0+fFkIIERERIQCIxMREUVtbqyt37Ngx4enpKXx9fcWFCxeEEEJUVVUJSZLEgAEDxLVr1/Sue+3aNVFZWal7/e233woAYsyYMeLSpUu64/X19eLJJ58UAMTmzZt1x9euXSsACEmSDH6OBQsWCADi//7v/5qc6927t/D09NTVUwghJk+eLACI999/X69saWmpCA8PF507dxZXrlzRHR82bJgAIDZs2KBX/oUXXhAABABRUFDQ5N5EZB725BBRi0pLSwEA4eHhrZbVlikpKdE7/sorr8DDw0P3ukePHnjsscdQVVWFzz//HAAgSRKEEJDL5ZDJZHrvl8lk8PX11b1etWoVAOC9995Dhw4ddMclScJrr70GSZKwcePGJvUbP348hg8f3uS4tpdmw4YNesd//PFHHD58GOPGjYO3tzcA4Ny5c/jkk0+QlJSERx99VK98UFAQnn32WZw9exbfffcdAOD06dPIysrCn/70Jzz00EN65V988UW9z0VElsWBx0RkMUIIAJqwoeXh4YGYmJgmZePi4vDWW28hLy8PDz/8MHx8fDB69Ghs374d/fr1w8SJExEXF4fo6Gi0a9dO7725ubnw8vLCmjVrDNbD09MT+fn5TY4PHDjQYPnu3btjwIAB+Prrr3H+/Hn4+fkBAD788EMA0HtUdeDAAajValy9ehVpaWlNrnXixAkAQH5+PpKTk/Hjjz8CAIYMGdKkbMeOHdG3b19kZmYarBcRmYchh4haFBwcjPz8fJw5cwbdu3dvsWxRUZHuPVr+/v5wc2vaaawd31NdXa07tnnzZixatAgbN27EggULAADe3t547LHHsGjRIl2vzfnz53Ht2jUsXLiw2bpcunSp2Xsakpqaiu+//x7/93//hyeffBL19fXYuHEjAgMDMXLkSF258+fPAwD27NmDPXv2tHp/7ecLDAw0WK6lOhGRefi4iohaNGjQIADAzp07WyyXn5+P33//HV26dNF7tFVRUYH6+vom5cvKygAACoVCd8zLywv//Oc/cfLkSZw8eRJr1qxBjx49sGLFCvzlL3/RlfPx8YG/vz+EEM3+KigoaHLPhj1MjU2aNAnu7u66R1a7du3C77//jgcffBDu7tf/PaidHj9v3rwW7//yyy/rfb7y8nKD99W2AxFZHkMOEbVoypQpcHNzw+rVq3H27Nlmy/3zn/8EADz22GN6x+vq6pCbm9ukvFKpBAD07dvX4PWioqLw2GOPISsrCx07dtSbch4dHY2KigrdoyFL0PbY5OTkoKCgQBd2Hn74Yb1yd955JyRJwt69e426bp8+fQDA4NTyixcvIi8vz7yKE1GzGHKIqEW33norZs+ejYqKCtxzzz1NBhXX19fjlVdewYYNG3DzzTfrpoA39NJLL6Gurk73Oj8/H++//z4UCgXGjRsHADh79iz279/f5L2VlZVQqVTw9PTUHXvmmWcAaAJVRUVFk/eUlpbi2LFjJn/W1NRUCCHw3//+F+np6ejRowcGDBigVyY4OBj3338/cnJy8Prrr+vGITW0b98+XL58GQDQtWtXDB06FD/99FOTKfOLFi1CVVWVyfUkIuNwTA4RtWrJkiWorq7G+++/j27duuHuu+/GzTffjAsXLuDbb7/FiRMn0K1bN2zbtq3JaschISGoqqpC3759cffdd6O6uhobN27E1atXsXr1at2speLiYkRHR+P2229Hv3790KVLF1RUVODzzz9HXV0dnnvuOd01R48ejZdeegmvvPIKbrnlFowePRoRERGoqKjAr7/+CqVSiVdffRU9e/Y06XOOGzcOPj4+eP3111FXV6c34Liht99+G8ePH8dzzz2HDz/8ELGxsVAoFDhz5gwOHjyIEydOoKSkRDeG6K233sLgwYPxyCOP4LPPPkO3bt1w4MAB7N+/H3FxcbpeLSKyMGvPWScix7Vjxw5x3333idDQUOHh4SF8fX1FbGyseOONN8Tly5eblI+IiBARERGioqJC/PnPfxaBgYFCLpeLAQMGiM8//1yvbGVlpUhLSxNDhw4VISEhol27diI0NFSMHj1afPPNN83W55577hGdO3cWHh4eIjg4WMTGxopXXnlFt1aPENfXyVm7dm2rn/HRRx/VralTWFjYbLnLly+LJUuWiP79+wsvLy/h6ekpoqKixPjx48UHH3wg6urq9MofPnxY3HXXXaJjx47C29tbjBkzRhw+fFhMmTKF6+QQtRFJCAN9rUREREQOjmNyiIiIyCkx5BAREZFTYsghIiIip8SQQ0RERE6JIYeIiIicEkMOEREROSWGHCIiInJKDDlERETklBhyiIiIyCkx5BAREZFTYsghIiIip8SQQ0RERE7p/wE44MOVgt7ZQgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(6,6))\n", "\n", "#データのプロット\n", "ax.plot(y_train, y_pred_train, 'o', c = 'blue', label ='train')\n", "ax.plot(y_test, y_pred_test, 'o', c = 'red', label ='test')\n", "\n", "# 対角線のプロット\n", "ax.plot([0, 3000], [0, 3000], \n", " linestyle='--', \n", " color ='gray') \n", "\n", "#グラフの修飾\n", "ax.axis('square')\n", "ax.set_xlabel('Observed',fontsize = 14)\n", "ax.set_ylabel('Predicted',fontsize = 14)\n", "\n", "ax.set_xlim(0,3000)\n", "ax.set_ylim(0,3000)\n", "ax.legend(fontsize = 14)\n", "ax.grid()\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "ee38d83a", "metadata": {}, "source": [ "## Closing:おわりに\n", "\n", "\n", "さらに機械学習モデルの精度をあげるために、**k-foldクロスバリデーション**や**ハイパーパラメータ調整**を行います。\n", "\n", "**k-foldクロスバリデーション(k-fold cross-validation)** \n", "\n", "機械学習モデルの性能を評価するための手法です。通常、データセットをトレーニングセットとテストセットに分割してモデルを評価しますが、クロスバリデーションでは、データセットを複数の部分集合に分割し、それぞれをトレーニングセットとテストセットとして使用します。\n", "\n", "具体的な手順は以下の通りです。\n", "\n", "1. データセットをk個の部分集合(フォールド)に分割します。通常、kは5または10がよく使用されます。\n", "\n", "1. k個の部分集合のうちの1つをテストセットとし、残りのk-1個の部分集合をトレーニングセットとします。\n", "\n", "1. モデルをトレーニングセットで学習させ、テストセットで評価します。\n", "\n", "1. ステップ2-3をk回繰り返し、k個のモデルを作成し、評価します。\n", "\n", "1. k回の評価結果を平均化し、モデルの性能を推定します。\n", "\n", "クロスバリデーションは、モデルの性能を正確に評価するために使用されます。各フォールドがテストセットとして使用されるため、全てのデータがモデルの評価に使用されるため、モデルの性能評価がより信頼性の高い結果を提供します。また、データの分割方法による結果のバイアスを軽減する効果もあります。\n", "\n", "クロスバリデーションは、ハイパーパラメータのチューニングや異なるモデルの比較など、機械学習のさまざまなタスクで広く使用されます。\n", "\n", "**ハイパーパラメータ(hyperparameter)** \n", "\n", "機械学習モデルのハイパーパラメータは、モデルの振る舞いやパフォーマンスに影響を与える設定値です。ハイパーパラメータの適切な調整は、モデルの性能を最適化するために非常に重要です。ハイパーパラメータ調整の一般的な手法には、グリッドサーチ、ランダムサーチ、ベイズ最適化などがあります。\n", "\n", "* **グリッドサーチ(Grid Search)**:\n", "グリッドサーチでは、事前に指定されたハイパーパラメータ値の組み合わせの中から最適な組み合わせを探索します。具体的には、調整したいハイパーパラメータの範囲を指定し、それらのパラメータの組み合わせをすべて試して最適な組み合わせを見つける手法です。ただし、組み合わせの数が非常に多い場合は計算コストが高くなる可能性があります。\n", "\n", "* **ランダムサーチ(Random Search)**:\n", "ランダムサーチでは、ハイパーパラメータの範囲内からランダムに組み合わせを選択し、それらの組み合わせでモデルを評価します。グリッドサーチと比較して効率的な探索が可能であり、特定の範囲内でのハイパーパラメータの重要度を把握するのに役立ちます。\n", "\n", "* **ベイズ最適化(Bayesian Optimization)**:\n", "ベイズ最適化は、事前の知識を利用して最適なハイパーパラメータを探索する手法です。モデルの評価結果を利用して、パラメータ空間内で最適な探索を行います。ベイズ最適化は、少ない評価回数で最適なハイパーパラメータを見つけることができる場合があります。\n", "\n", "これらの手法は、ハイパーパラメータの探索空間と目的関数の特性に合わせて選択する必要があります。また、クロスバリデーションなどを使用して、ハイパーパラメータの選択によるモデルの性能を適切に評価することも重要です。" ] }, { "cell_type": "code", "execution_count": null, "id": "d7a55d96-bcf7-451d-9d22-e288d7cd412e", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.13" }, "vscode": { "interpreter": { "hash": "087a983bda3552fb574eb9ac5e6f63c9db78ef2ef4359d2e860ab2c5fb23cb8c" } }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }