Skip to content

Instantly share code, notes, and snippets.

@nozma
Created August 1, 2018 12:11
Show Gist options
  • Select an option

  • Save nozma/3d378ee937706b219f178c698b18c99c to your computer and use it in GitHub Desktop.

Select an option

Save nozma/3d378ee937706b219f178c698b18c99c to your computer and use it in GitHub Desktop.
4.4から4.5あたり
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "4.4から4.5あたり",
"version": "0.3.2",
"provenance": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"[View in Colaboratory](https://colab.research.google.com/gist/nozma/3d378ee937706b219f178c698b18c99c/4-4-4-5.ipynb)"
]
},
{
"metadata": {
"id": "zCipNa4m7Bij",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"## 4.4 単変量非線形変換\n",
"\n",
"- 特徴量を非線形な数学関数で変換するとうまくいく時があるよ。\n",
" - `log`や`exp`...**スケール変換**。正規分布してないデータも正規分布っぽくできるかも…?\n",
" - 大抵のモデルは特徴量が正規分布に従うときに一番うまく動く。\n",
" - `sin`や`cos`...データに**周期性**があるときにうまくいくかも…?\n",
" \n",
" 適当にテストデータを作成して試してみる。テストデータは以下の仕様で作成する。\n",
" \n",
" - 3つの特徴量と1つの出力を持つ。\n",
" - 特徴量は非負の整数しかとらない。\n",
" - 出力は実数。"
]
},
{
"metadata": {
"id": "brdIcVJL8fMm",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"import numpy as np\n",
"\n",
"## 適当にテストデータを作成する ----------------------------------------------\n",
"\n",
"# 乱数シード固定\n",
"rnd = np.random.RandomState(0)\n",
"\n",
"# 正規分布に従う3つの特徴量の素を1000セット作成\n",
"X_org = rnd.normal(size=(1000, 3))\n",
"\n",
"# 特徴量は特徴量の素を非線形変換した値を平均値としてもつポアソン分布からのサンプリングで生成する\n",
"X = rnd.poisson(10 * np.exp(X_org))\n",
"\n",
"# 3つの特徴量の素にバラバラの係数を掛けて合計したものを出力とする\n",
"w = rnd.normal(size=3)\n",
"y = np.dot(X_org, w)"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "fTeti8jjAhvf",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 187
},
"outputId": "3b966098-3505-4788-a88d-78f0e7a4831c"
},
"cell_type": "code",
"source": [
"## 中身の確認\n",
"X[:10]"
],
"execution_count": 8,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([[ 60, 23, 25],\n",
" [107, 72, 2],\n",
" [ 30, 5, 11],\n",
" [ 10, 16, 37],\n",
" [ 26, 9, 14],\n",
" [ 14, 52, 5],\n",
" [ 13, 4, 1],\n",
" [ 20, 17, 5],\n",
" [ 92, 1, 10],\n",
" [ 7, 46, 34]])"
]
},
"metadata": {
"tags": []
},
"execution_count": 8
}
]
},
{
"metadata": {
"id": "sbwwadJWAmRa",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 153
},
"outputId": "3b406cd2-8102-44bc-9377-951160827796"
},
"cell_type": "code",
"source": [
"## 中身を集計して確認\n",
"np.bincount(X[:, 0])"
],
"execution_count": 9,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"array([26, 40, 55, 51, 65, 58, 45, 62, 43, 35, 42, 33, 39, 27, 23, 24, 25,\n",
" 20, 21, 25, 22, 15, 11, 12, 10, 9, 7, 7, 8, 10, 6, 7, 4, 7,\n",
" 3, 6, 4, 5, 6, 4, 3, 3, 1, 3, 6, 1, 3, 3, 3, 2, 3,\n",
" 4, 2, 0, 3, 3, 0, 2, 0, 1, 1, 1, 0, 3, 2, 0, 1, 0,\n",
" 2, 0, 1, 0, 1, 3, 0, 1, 2, 0, 0, 0, 0, 0, 2, 1, 1,\n",
" 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
" 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1,\n",
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])"
]
},
"metadata": {
"tags": []
},
"execution_count": 9
}
]
},
{
"metadata": {
"id": "JyEWZV5AAvAf",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 349
},
"outputId": "6241fc96-e04d-45d2-d846-36e41286a5f5"
},
"cell_type": "code",
"source": [
"## 可視化\n",
"import matplotlib.pyplot as plt\n",
"\n",
"plt.figure(figsize=(10, 5))\n",
"\n",
"for i in range(3):\n",
" plt.subplot(1, 3, i+1) \n",
" plt.bar(range(len(bins)), np.bincount(X[:, 0]))\n",
" plt.title(\"Feature \" + str(i))\n",
" plt.ylabel(\"Number of appearances\")\n",
" plt.xlabel(\"Value\")"
],
"execution_count": 34,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAlwAAAFMCAYAAAAeImK2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3Xl0VPX9//HXmBBDIEKIE2pYhKoo\nFVxQ+QmWLwIaAakCIoYIqKiVg0H5Wg1LAYsigmwt1YoLm4hfIwERvoCJQOW4YARqERT1iy0WkYSA\nkSVkM9zfH9YplyU322fm3pnn4xzPydyZuff9SfI6vrh3MuOzLMsSAAAAjDkr1AMAAACEOwoXAACA\nYRQuAAAAwyhcAAAAhlG4AAAADKNwAQAAGBYd6gEgXXzxxWrZsqWioqIC25o1a6Z58+bVaH9lZWVa\ns2aN+vbtW1cjnmL16tV6/vnnVV5erjZt2mjKlCmKj483djxEFi9moqioSBMnTtTatWv1+eefGzsO\nIpMXM/HGG29o0aJFqqioULNmzfTUU0/pF7/4hbHjuR2FyyUWL15cZ7+In3/+uVasWGEsSN99952e\nfPJJLV++XMnJyZo6dapmz56tiRMnGjkeIpOXMiFJqamp6tatm7H9A17KxKeffqo5c+Zo+fLlSkpK\n0rRp0zR9+nTNnDnTyPG8gEuKLpeXl6fhw4frpptu0k033aSNGzcG7lu6dKl69eqllJQU3Xnnndq7\nd68OHDig9PR0/f3vf1daWpq+/fZb/epXvwo858Tby5cvV3p6uu666y4988wzkqTMzEz17NlT3bt3\n1yOPPKKSkpJTZlq/fr06deqk5ORkSdKAAQP09ttvm/w2AAFuzIQkPfHEExo4cKDBlQOn58ZMNGnS\nRLNnz1ZSUpIk6eqrr9auXbtMfhvcz0LItWnTxtq3b99p7xs6dKg1e/Zsy7Isa/fu3VbHjh2t77//\n3jpw4IDVrl27wPPGjBljjRs3zrIsy1q2bJl11113WZZlWXv27LHatm0b2N+Jt5ctW2ZdccUV1j//\n+U/Lsixr8+bNVqdOnay8vDzLsixrwoQJ1tSpU0+Z6YknnrBmzZoVuF1aWmq1adPG+uGHH2rxXQD+\nw2uZON2+gLrk1Uz8bOLEidaECROqv/AwwhkulxgyZIh69uwZ+G/8+PE6duyYcnNzdffdd0uSzj//\n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\nrkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a42eaf780>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "-g5z9wqmFNA5",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"上記のデータは実際のカウントデータでよくある**ポアソン分布**に従っている。\n",
"\n",
"次の操作がポアソン分布からのデータ生成に相当する。\n",
"\n",
"`rnd.poisson(10 * np.exp(X_org))`\n",
"\n",
"$10 \\times \\exp(X_{org})$を平均値に持つポアソン分布からランダムな自然数が生成される。\n",
"\n",
"$X_{org}$は正規分布から抽出しているので、もともと正規分布だったものを無理矢理正規分布ではない形に変換した、と見ることができる。\n",
"\n",
"まずはそのままリッジ回帰を適用してみる。"
]
},
{
"metadata": {
"id": "-B-BYE8EBEgm",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "3113b14d-5685-4ca3-f4b5-d027b1e89793"
},
"cell_type": "code",
"source": [
"from sklearn.linear_model import Ridge\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)\n",
"score = Ridge().fit(X_train, y_train).score(X_test, y_test)\n",
"print(\"スコアは {:.3f}やで\".format(score))"
],
"execution_count": 37,
"outputs": [
{
"output_type": "stream",
"text": [
"スコアは 0.632やで\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "cUqu2exrHU86",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"(目論見通り)イマイチだったので、`log`で非線形変換を行う。対数関数には0を入力できないので、`x+1`を入力する。"
]
},
{
"metadata": {
"id": "ZksH5Q7iHTl0",
"colab_type": "code",
"colab": {}
},
"cell_type": "code",
"source": [
"X_train_log = np.log(X_train + 1)\n",
"X_test_log = np.log(X_test + 1)"
],
"execution_count": 0,
"outputs": []
},
{
"metadata": {
"id": "87gytaa5HxAh",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 320
},
"outputId": "91c8ac0e-67d4-423a-e8a1-d52d285221d9"
},
"cell_type": "code",
"source": [
"## 可視化\n",
"\n",
"plt.figure(figsize=(10, 5))\n",
"\n",
"for i in range(3):\n",
" plt.subplot(1, 3, i+1)\n",
" plt.hist(X_train_log[:, i], bins=25)"
],
"execution_count": 45,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\nTgAAAIb+HyDgxulHQoyLAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a42837a90>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "pSaTcHHrIY3h",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"正規分布っぽい釣鐘型の分布になった(ということにする)。\n",
"\n",
"変換後のデータを使って再度リッジ回帰を行う。"
]
},
{
"metadata": {
"id": "SeNGncQYIO8p",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "fcf46acb-ba96-407e-f264-65a4f5ab3bfb"
},
"cell_type": "code",
"source": [
"score = Ridge().fit(X_train_log, y_train).score(X_test_log, y_test)\n",
"print(\"スコアは {:.3f}やで\".format(score))"
],
"execution_count": 47,
"outputs": [
{
"output_type": "stream",
"text": [
"スコアは 0.867やで\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "N0eJMjKaI_qP",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"このように、カウントデータは対数変換するとうまくいく場合がある。\n",
"\n",
"(理論的にはポアソン分布を直接使って解析した方が良い)"
]
},
{
"metadata": {
"id": "MSNXBILyJKPt",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"## 4.5 自動特徴量選択\n",
"\n",
"- 特徴量はいくらでも増やせてしまうが、あんまりたくさん使いたくない。\n",
" - 過剰適合の原因\n",
" - モデルがめっちゃ複雑に\n",
"- 良い特徴量 is どれ…\n",
"- 特徴量選択の戦略は3つある\n",
" 1. 単変量統計 (univariate statistics)\n",
" 2. モデルベース選択 (model-based selection)\n",
" 3. 反復選択 (iterative selection)"
]
},
{
"metadata": {
"id": "q4sK65BwJwRN",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### 4.5.1 単変量統計\n",
"\n",
"- 特徴量毎に目的変数との関係を調べて、関係のありそうなものを残す。\n",
"- クラス分類の場合は**分散分析**と呼ばれているものがこれ。\n",
"- 他の特徴量と組み合わせてはじめて意味のあるものは捨てられる。求められるのは単騎性能…\n",
"- 利点\n",
" - 計算早い\n",
" - モデル構築しなくていい\n",
"- 欠点\n",
" - 特徴量選択後に作成するモデルと独立\n",
" - どういうことか?→選択の結果モデルが良くなるかどうかは手法の中では確認されない\n",
"- 残す特徴量の選び方には2つの戦略がある。\n",
" 1. 残す特徴量の**個数**を決める...e.g.「上位から3個の特徴量を残す」\n",
" 2. 残す特徴量の**割合**を決める...e.g.「上位から30%の特徴量を残す」\n",
"- sklearnで使うには\n",
" - `from sklearn.feature_selection import SelectKBest`...数で残す\n",
" - `from sklearn.feature_selection import SelectPercentile`...割合で残す\n",
" \n",
" \n",
" 特徴量がたくさんあるcancerデータで試す。意味のない特徴量を加えて、これが除外されるかも確認する。"
]
},
{
"metadata": {
"id": "-V0mlL0jOHsf",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 51
},
"outputId": "5219e998-4ec2-4378-e423-b612ce0a1243"
},
"cell_type": "code",
"source": [
"from sklearn.datasets import load_breast_cancer\n",
"from sklearn.feature_selection import SelectPercentile\n",
"\n",
"cancer = load_breast_cancer()\n",
"\n",
"# 乱数シードの固定\n",
"rng = np.random.RandomState(42)\n",
"# ノイズ特徴量を50個作成する\n",
"noise = rng.normal(size=(len(cancer.data), 50))\n",
"# cancerにnoiseを加える\n",
"X_w_noise = np.hstack([cancer.data, noise])\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(X_w_noise, cancer.target, random_state=0, test_size=.5)\n",
"\n",
"# 特徴量選択\n",
"select = SelectPercentile(percentile=50) # 全体の50%を選択\n",
"select.fit(X_train, y_train) # 特徴量を選択\n",
"X_train_selected = select.transform(X_train) # 選択後のデータに変換\n",
"\n",
"print(\"X_train.shape: {}\".format(X_train.shape))\n",
"print(\"X_train_selected.shape: {}\".format(X_train_selected.shape))"
],
"execution_count": 56,
"outputs": [
{
"output_type": "stream",
"text": [
"X_train.shape: (284, 80)\n",
"X_train_selected.shape: (284, 40)\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "9yR6J0omP2c-",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"どの特徴量が使用されたかは、`get_support`で調べる。"
]
},
{
"metadata": {
"id": "cXNaJ62YP1oS",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 136
},
"outputId": "5566dfa5-08d3-4629-a688-5a649526e7e9"
},
"cell_type": "code",
"source": [
"mask = select.get_support()\n",
"print(mask)"
],
"execution_count": 58,
"outputs": [
{
"output_type": "stream",
"text": [
"[ True True True True True True True True True False True False\n",
" True True True True True True False False True True True True\n",
" True True True True True True False False False True False True\n",
" False False True False False False False True False False True False\n",
" False True False True False False False False False False True False\n",
" True False False False False True False True False False False False\n",
" True True False True False False False False]\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "M14s5c4GQDuA",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 81
},
"outputId": "0facf437-d728-446f-c418-5b75ebf169c9"
},
"cell_type": "code",
"source": [
"# 可視化\n",
"plt.matshow(mask.reshape(1, -1))"
],
"execution_count": 78,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f6a42dd86d8>"
]
},
"metadata": {
"tags": []
},
"execution_count": 78
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a43802898>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "kxMDZo1dSi4O",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"30より左がもとの特徴量なので、まあボチボチといったところ。\n",
"\n",
"特徴量選択前後でロジスティック回帰の結果がどうなるか確認する。"
]
},
{
"metadata": {
"id": "93388ywFSx4A",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 51
},
"outputId": "b98774eb-d1aa-4b93-bb61-e42bd9d91659"
},
"cell_type": "code",
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"\n",
"X_test_selected = select.transform(X_test)\n",
"\n",
"lr = LogisticRegression()\n",
"lr.fit(X_train, y_train)\n",
"print(\"すべての特徴量を使った場合のスコア: {:.3f}\".format(lr.score(X_test, y_test)))\n",
"\n",
"lr.fit(X_train_selected, y_train)\n",
"print(\"選択後の特徴量だけを使った場合のスコア: {:.3f}\".format(lr.score(X_test_selected, y_test)))"
],
"execution_count": 70,
"outputs": [
{
"output_type": "stream",
"text": [
"すべての特徴量を使った場合のスコア: 0.930\n",
"選択後の特徴量だけを使った場合のスコア: 0.940\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "K7BEzo7YTc-u",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"今回の場合は特徴量を減らしたにもかかわらずスコアが少し上がった。\n",
"\n",
"この手法は速度は早くそこそこ妥当な結果を返すので、次のような場合に有効。\n",
"\n",
"- 特徴量がめっちゃ多い\n",
"- 明らかに無駄な特徴量がある"
]
},
{
"metadata": {
"id": "6KCCLh0GTxHO",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### 4.5.2 モデルベース特徴量選択\n",
"\n",
"特徴量の重要度を返すようなモデルで一旦学習させて、その結果から使う特徴量を選別するやり方。\n",
"\n",
"次のようなモデルが使える。\n",
"\n",
"- 決定木や決定木ベースのモデル\n",
"- L1ペナルティを用いた線形モデル(重要度の低い特徴量の係数がほぼ0になる)\n",
"\n",
"モデルベース特徴量選択を使うには、`SelectFromModel`を使う。\n",
"\n",
"ランダムフォレストで半分の特徴量を選択する例を示す。"
]
},
{
"metadata": {
"id": "nmkhrHaVTwl3",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 51
},
"outputId": "fee40a79-5e39-4f12-ed4d-e7d6618352ca"
},
"cell_type": "code",
"source": [
"from sklearn.feature_selection import SelectFromModel\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"\n",
"select = SelectFromModel(\n",
" RandomForestClassifier(n_estimators=100, random_state=42),\n",
" threshold=\"median\" # 中央値をしきい値として半分の特徴量を選択\n",
")\n",
"\n",
"select.fit(X_train, y_train)\n",
"X_train_l1 = select.transform(X_train)\n",
"print(\"X_train.shape: {}\".format(X_train.shape))\n",
"print(\"X_train_l1.shape: {}\".format(X_train_l1.shape))"
],
"execution_count": 74,
"outputs": [
{
"output_type": "stream",
"text": [
"X_train.shape: (284, 80)\n",
"X_train_l1.shape: (284, 40)\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "rMD-qMSZVg62",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 81
},
"outputId": "cc502961-815d-4605-d901-c6b3ab89cf86"
},
"cell_type": "code",
"source": [
"mask = select.get_support()\n",
"\n",
"plt.matshow(mask.reshape(1, -1))"
],
"execution_count": 77,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f6a42d9e6a0>"
]
},
"metadata": {
"tags": []
},
"execution_count": 77
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6YAAAAvCAYAAADw1ddmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAC5JJREFUeJzt3X1MlfX/x/HX8RyOBsgyBaQmSjci\nS6zYymGkNaXSXMtulpk553IqY9pKCohFzpY3WWHUygBrVlMDuyGX09WkJSFKLLkpVlibcqOpE5Ob\nA4jn+0f7nX4uwS9H+V7X5/B8/Heu63DO+3xe13Wdvc/nczgOr9frFQAAAAAAFhlidQEAAAAAgMGN\nxhQAAAAAYCkaUwAAAACApWhMAQAAAACWojEFAAAAAFiKxhQAAAAAYCmX1QX05tVXX9WhQ4fkcDiU\nmZmpSZMmWV0SLuHXX39VSkqKFi5cqPnz56u5uVnPP/+8enp6FB4ertdee01ut9vqMtGL9evX68cf\nf9S5c+e0ZMkSxcfHk58BOjo6lJ6erlOnTqmzs1MpKSmaMGEC2RnG4/Fo9uzZSklJUWJiIvkZoLy8\nXCtWrNBNN90kSRo/fryefvppsjNIcXGx8vPz5XK5tHz5csXGxpKfIQoLC1VcXOy7XVNTo61bt+rl\nl1+WJMXGxmrVqlUWVQd/Oez4O6YHDhxQQUGBNm3apMOHDyszM1Pbt2+3uiz0ob29XUuWLNG4ceMU\nGxur+fPnKyMjQ1OnTtXMmTP1xhtvaPTo0Zo3b57VpeIi9u/fr4KCAuXl5en06dOaM2eOEhMTyc8A\nX3/9tRobG7V48WI1NjZq0aJFSkhIIDvDvPnmm9q3b5+efPJJHTx4kPwMUF5erk8++URvvfWWbxvv\ne+Y4ffq05s6dqx07dqi9vV25ubk6d+4c+RnowIED2rVrl+rr65WWlqZJkybpueee04MPPqhp06ZZ\nXR76wZZLecvKyjRjxgxJ0g033KAzZ86otbXV4qrQF7fbrby8PEVERPi2lZeXa/r06ZKke+65R2Vl\nZVaVh0u4/fbbtXHjRklSWFiYOjo6yM8Qs2bN0uLFiyVJzc3NioyMJDvDHD58WPX19br77rslce00\nGdmZo6ysTImJiQoNDVVERIRWr15NfoZ65513fB/O/t8KS/Izky0b05MnT2rEiBG+29dcc41OnDhh\nYUW4FJfLpWHDhl2wraOjw7cEZuTIkWRoY06nU8HBwZKkoqIiTZ06lfwMM3fuXK1cuVKZmZlkZ5h1\n69YpPT3dd5v8zFFfX6+lS5fqiSeeUGlpKdkZpKGhQR6PR0uXLtW8efNUVlZGfgaqqqpSVFSUnE6n\nwsLCfNvJz0y2/Y7p/2fD1cboJzI0wzfffKOioiJt3rxZ9957r287+dnftm3b9MsvvygtLe2CvMjO\n3r744gvdeuutGjNmzEX3k599jRs3TqmpqZo5c6aOHj2qBQsWqKenx7ef7OyvpaVFb7/9tpqamrRg\nwQKunQYqKirSnDlz/rWd/Mxky8Y0IiJCJ0+e9N3+888/FR4ebmFF8EdwcLA8Ho+GDRum48ePX7DM\nF/bz/fff67333lN+fr6GDx9OfoaoqanRyJEjFRUVpbi4OPX09CgkJITsDFFSUqKjR4+qpKREx44d\nk9vt5twzRGRkpGbNmiVJio6O1qhRo1RdXU12hhg5cqRuu+02uVwuRUdHKyQkRE6nk/wMU15erqys\nLDkcDrW0tPi2k5+ZbLmU984779Tu3bslSbW1tYqIiFBoaKjFVaG/pkyZ4stxz549uuuuuyyuCL05\ne/as1q9fr02bNunqq6+WRH6mqKio0ObNmyX9/TWI9vZ2sjNITk6OduzYoU8//VSPPfaYUlJSyM8Q\nxcXFKigokCSdOHFCp06d0sMPP0x2hkhKStL+/ft1/vx5nT59mmungY4fP66QkBC53W4FBQXp+uuv\nV0VFhSTyM5Ut/yuvJG3YsEEVFRVyOBzKzs7WhAkTrC4JfaipqdG6devU2Ngol8ulyMhIbdiwQenp\n6ers7NS1116rNWvWKCgoyOpScRHbt29Xbm6uYmJifNvWrl2rrKws8rM5j8ejF198Uc3NzfJ4PEpN\nTdXEiRP1wgsvkJ1hcnNzdd111ykpKYn8DNDa2qqVK1fqr7/+Und3t1JTUxUXF0d2Btm2bZuKiook\nScuWLVN8fDz5GaSmpkY5OTnKz8+X9Pd3vl966SWdP39et9xyizIyMiyuEP1l28YUAAAAADA42HIp\nLwAAAABg8KAxBQAAAABYisYUAAAAAGApGlMAAAAAgKVoTAEAAAAAlnL580fd3d1KT09XU1OTnE6n\n1qxZozFjxlz0vs8++6zcbrfWrl17WYUCAAAAAAKTXzOmO3fuVFhYmLZu3aqlS5fq9ddfv+j9SktL\ndeTIkcsqEAAAAAAQ2PxqTMvKypScnCxJmjJliiorK/91n66uLr377rtatmzZ5VUIAAAAAAhoDq/X\n6+3vHy1cuFBBQUFqbW2V0+nUH3/8ob1798rtdvvus3z5cv38889yu91yOp366quv+i7E4bjo9urq\nasXHx/e3RNhAb9n155Dr7bi4XHaowe4498wwUMeyH28NxtVhtf6+7w3UWAxUHgN57bTDcdGf/Oxy\nPvWHHcbYLrhmDTwTx9jEmu3ukt8xLSwsVGFh4QXbDh06pJkzZyovL0/79u1TSkrKBfvr6upUUlKi\nH374QTU1NXrmmWdUX1+vG2+8sdfnqa6u1sSJEy+6jzDNdbnZ2SF7O9RglcH82gORXfK0Sx1W62sc\n/pdjNFDPFeg5B3p++AdjPPBMHGMTa7Y7v2ZMZ8yYofDwcJ0/f15er1dVVVWqq6vz7c/Oztbnn38u\np9OpoUOH6uzZs3r00Ue1atWq3gvp5VMHr9c7aGesTNdbdnb4xN0ONdgd554ZmDE1V3/f95gx9a+O\ngdKf/OxyPvWHHcbYLrhmDTwTx9jEmu3Or//K6/V6deTIEZWWlmrLli2qqqpSV1eXbynvwYMHtXv3\nbkVGRur+++9XZ2ensrKy+nxMZkwDEzOmZhvMrz0Q2SVPu9RhtUCfcQv0nAM9P/yDMR54Jo6xiTXb\nnV9LeRsaGjRixAglJCTI4XDI4XCotbVVRUVFio6O1pAhQ7RixQp1d3erqalJY8eOVVBQUJ/P09t3\n2Zi1MRczpmbj3DMDM6bmYsbUf3Y4LpgxHTy4Zg08E8fYxJrtzq+lvNOmTdPQoUO1Z88e1dXV6aGH\nHtKuXbsUExOjyspKLVq0SFu2bFFGRoa8Xq/Gjx+vnJycPh+zpqam1xlTAAAAAEDg8mspr9PpVEtL\nix5//HGdOXNGktTW1ubbP3nyZG3cuFFxcXEqKSlRdHT0JR+TGdPAw4yp2Tj3zMCMqbmYMfWfHY4L\nZkwHD65ZA8/EMTaxZrvzqzF1uVzq6urSkCFDFBYWJunvcN5//32NHTtWx44d0++//66goCC1tbXp\nt99+07fffqvp06df0eIBAAAAAObzaynvfffdJ4/Ho++++061tbV65JFHVFRU5FuK+8ADDyg0NFQt\nLS1qbm7Wl19+qZiYmD4fk6W8AAAAADA4+TVjGhwcrKuuukpz586Vw+GQy+XS3r171dzcrOTkZCUl\nJenjjz9WVFSUIiIiLtmUSizlDUQs5TUb554ZWMprLpby+s8OxwVLeQcPrlkDz8QxNrFmu/OrMR09\nerSampq0bds21dbW6qmnntLs2bMVExOjlpYW7dy5U6tXr9Ydd9yhjIyM/+ox+bmYwMTPxZhtML/2\nQGSXPO1Sh9UC/edGAj3nQM8P/2CMB56JY2xizXbn11Le3Nxc/fTTT2pra5PD4VBjY6OWLVumUaNG\nqaOjQ2lpaQoJCZHX65XH49HkyZP14YcfDkD5AAAAAADT+dWYVlZWKjc3Vx988IFqa2v1yiuvaOvW\nrf+6X0NDgzIyMvTRRx9dkWIBAAAAAIHHr6W8CQkJuvnmm33fMc3OztZnn32m4cOHKzk5+UrXCAAA\nAAAIYH7NmAIAAAAAcKUMsboAAAAAAMDgRmMKAAAAALAUjSkAAAAAwFI0pgAAAAAAS9GYAgAAAAAs\nRWMKAAAAALAUjSkAAAAAwFI0pgAAAAAAS/0H5IbTJ2MUa4MAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a435e46d8>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "kyaJLlRVV5dd",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"単変量統計の場合にくらべて元の特徴量が多く残っている。"
]
},
{
"metadata": {
"id": "fH1sW6l9WApq",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "363f815d-683a-4900-de48-9c5e1e69b981"
},
"cell_type": "code",
"source": [
"X_test_l1 = select.transform(X_test)\n",
"score = LogisticRegression().fit(X_train_l1, y_train).score(X_test_l1, y_test)\n",
"print(\"テストスコア: {:.3f}\".format(score))"
],
"execution_count": 79,
"outputs": [
{
"output_type": "stream",
"text": [
"テストスコア: 0.951\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "h-OssuTEWPfe",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"スコアも向上している。"
]
},
{
"metadata": {
"id": "1fkLmrx8WSmQ",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"### 4.5.3 反復特徴量選択\n",
"\n",
"実際にいくつかの特徴量を使ってモデルを作成し、モデルの性能を見ながら特徴量選択を行っていくやり方。\n",
"\n",
"特徴量が多いと組み合わせが多くなるので、計算時間は最もかかる(指数時間)。\n",
"\n",
"代表的な戦略は2つある。\n",
"\n",
"1. 特徴量ゼロ個からはじめて重要そうなものをひとつずつ加えていく。\n",
"2. すべての特徴量を使用したモデルからはじめて重要ではないものをひとつずつ落としていく。\n",
"\n",
"後者の方法の例として**再帰的特徴量削減 (recursive feature elimination: RFE)** がある。\n",
"\n",
"以下に、ランダムフォレストでRFEを行う例を示す。"
]
},
{
"metadata": {
"id": "Qky-NODtWSHU",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 81
},
"outputId": "d7adab84-85af-4425-a0b3-8aca5a5dc5d7"
},
"cell_type": "code",
"source": [
"from sklearn.feature_selection import RFE\n",
"\n",
"select = RFE(\n",
" RandomForestClassifier(n_estimators=100, random_state=42),\n",
" n_features_to_select = 40\n",
")\n",
"\n",
"select.fit(X_train, y_train)\n",
"\n",
"mask = select.get_support()\n",
"plt.matshow(mask.reshape(1, -1))"
],
"execution_count": 81,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f6a42ece780>"
]
},
"metadata": {
"tags": []
},
"execution_count": 81
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6YAAAAvCAYAAADw1ddmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAC4JJREFUeJzt3X1MlfX/x/HX8RyOBsgyBKQmSjci\nS6zYymGkNaXCXMtuFpk553ICY9pKCohFzpY3WWHUygBrVgPj2A25nK4mLQlRYgmHYoW1KTeaOjC5\nOYB4fn+03/l+XYJfTh7PdcHz8d+5zvHwPp/XuQ6+z/tzOBa32+0WAAAAAAB+MsbfBQAAAAAARjca\nUwAAAACAX9GYAgAAAAD8isYUAAAAAOBXNKYAAAAAAL+iMQUAAAAA+JXN3wUM5tVXX9Xhw4dlsViU\nk5OjmTNn+rskXMKvv/6q9PR0LVu2TEuWLFFbW5uef/55DQwMKCwsTK+99prsdru/y8QgNm3apB9/\n/FHnzp3TypUrFRcXR34m0NPTo6ysLJ0+fVq9vb1KT0/X9OnTyc5kXC6XFi5cqPT0dCUkJJCfCVRX\nV2v16tW66aabJEnTpk3T008/TXYmUl5erqKiItlsNq1atUoxMTHkZxJlZWUqLy/3XHY6nSopKdHL\nL78sSYqJidHatWv9VB28ZTHi95gePHhQxcXF2rp1q44cOaKcnBzt2LHD32VhCN3d3Vq5cqWmTp2q\nmJgYLVmyRNnZ2ZozZ46Sk5P1xhtvaNKkSVq8eLG/S8VFHDhwQMXFxSosLFR7e7sWLVqkhIQE8jOB\nr7/+Wi0tLVqxYoVaWlq0fPlyxcfHk53JvPnmm9q/f7+efPJJHTp0iPxMoLq6Wp988oneeustzzF+\n75lHe3u7UlJStHPnTnV3d6ugoEDnzp0jPxM6ePCgdu/eraamJmVmZmrmzJl67rnn9OCDD2ru3Ln+\nLg/DYMitvFVVVZo/f74k6YYbbtCZM2fU2dnp56owFLvdrsLCQoWHh3uOVVdXa968eZKke+65R1VV\nVf4qD5dw++23a8uWLZKkkJAQ9fT0kJ9JLFiwQCtWrJAktbW1KSIiguxM5siRI2pqatLdd98tiddO\nMyM786iqqlJCQoKCg4MVHh6udevWkZ9JvfPOO543Z/9/hyX5mZMhG9NTp05pwoQJnsvXXHONTp48\n6ceKcCk2m03jxo274FhPT49nC0xoaCgZGpjValVgYKAkyeFwaM6cOeRnMikpKVqzZo1ycnLIzmQ2\nbtyorKwsz2XyM4+mpialpqbqiSeeUGVlJdmZSHNzs1wul1JTU7V48WJVVVWRnwnV1dUpMjJSVqtV\nISEhnuPkZ06G/YzpfzPgbmMMExmawzfffCOHw6Ft27bp3nvv9RwnP+MrLS3VL7/8oszMzAvyIjtj\n++KLL3Trrbdq8uTJF72e/Ixr6tSpysjIUHJyso4dO6alS5dqYGDAcz3ZGV9HR4fefvtttba2aunS\npbx2mpDD4dCiRYv+cZz8zMmQjWl4eLhOnTrlufznn38qLCzMjxXBG4GBgXK5XBo3bpxOnDhxwTZf\nGM/333+v9957T0VFRRo/fjz5mYTT6VRoaKgiIyMVGxurgYEBBQUFkZ1JVFRU6NixY6qoqNDx48dl\nt9s590wiIiJCCxYskCRFRUVp4sSJqq+vJzuTCA0N1W233SabzaaoqCgFBQXJarWSn8lUV1crNzdX\nFotFHR0dnuPkZ06G3Mp75513as+ePZKkhoYGhYeHKzg42M9VYbhmz57tyXHv3r266667/FwRBnP2\n7Flt2rRJW7du1dVXXy2J/MyipqZG27Ztk/T3xyC6u7vJzkTy8/O1c+dOffrpp3rssceUnp5OfiZR\nXl6u4uJiSdLJkyd1+vRpPfzww2RnEomJiTpw4IDOnz+v9vZ2XjtN6MSJEwoKCpLdbldAQICuv/56\n1dTUSCI/szLkX+WVpM2bN6umpkYWi0V5eXmaPn26v0vCEJxOpzZu3KiWlhbZbDZFRERo8+bNysrK\nUm9vr6699lqtX79eAQEB/i4VF7Fjxw4VFBQoOjrac2zDhg3Kzc0lP4NzuVx68cUX1dbWJpfLpYyM\nDM2YMUMvvPAC2ZlMQUGBrrvuOiUmJpKfCXR2dmrNmjX666+/1N/fr4yMDMXGxpKdiZSWlsrhcEiS\n0tLSFBcXR34m4nQ6lZ+fr6KiIkl/f+b7pZde0vnz53XLLbcoOzvbzxViuAzbmAIAAAAARgdDbuUF\nAAAAAIweNKYAAAAAAL+iMQUAAAAA+BWNKQAAAADAr2hMAQAAAAB+ZfPmH/X39ysrK0utra2yWq1a\nv369Jk+efNHbPvvss7Lb7dqwYcO/KhQAAAAAMDJ5NTHdtWuXQkJCVFJSotTUVL3++usXvV1lZaWO\nHj36rwoEAAAAAIxsXjWmVVVVSkpKkiTNnj1btbW1/7hNX1+f3n33XaWlpf27CgEAAAAAI5rF7Xa7\nh/uPli1bpoCAAHV2dspqteqPP/7Qvn37ZLfbPbdZtWqVfv75Z9ntdlmtVn311VdDF2KxXPR4fX29\n4uLihlsiDGC0ZjecU2qw570RjNb8zMZXzzcvfjUAV4yvXjsvx/l0sddOX55PRlgLXxnuYzNCzUbh\nq9d7fo/8h9nWwgzn0yU/Y1pWVqaysrILjh0+fFjJyckqLCzU/v37lZ6efsH1jY2Nqqio0A8//CCn\n06lnnnlGTU1NuvHGGwf9OfX19ZoxY8ZFrzNCmPAO2Q3N6Otj9PowPOSJkcIIz+WhariS9RlhLXxl\nJD82X/PV2pHJf5htLcxQr1cT0/nz5yssLEznz5+X2+1WXV2dGhsbPdfn5eXp888/l9Vq1dixY3X2\n7Fk9+uijWrt27eCFDNLFu91uQ0+VMLjRmt1ImZiO1vzMhne6MRoZYUo4nP+3MDH1jhkmPEbFxNT3\nzLYWZjifvPqrvG63W0ePHlVlZaW2b9+uuro69fX1ebbyHjp0SHv27FFERITuv/9+9fb2Kjc3d8j7\nZGI6MpHd0Iy+PkavD8NDnhgpjPBcZmLqeyP5sfkaE1PfM9tamKFer7byNjc3a8KECYqPj5fFYpHF\nYlFnZ6ccDoeioqI0ZswYrV69Wv39/WptbdWUKVMUEBAw5M8Z7LNsTG3Ma7Rmx8QUVxLvdGM0MsKU\nkImp75lhwmNUTEx9z2xrYYbzyautvHPnztXYsWO1d+9eNTY26qGHHtLu3bsVHR2t2tpaLV++XNu3\nb1d2drbcbremTZum/Pz8Ie/T6XQOOjEFAAAAAIxcXm3ltVqt6ujo0OOPP64zZ85Ikrq6ujzXz5o1\nS1u2bFFsbKwqKioUFRV1yftkYjryjNbsmJjiSuKdboxGRpgSMjH1PTNMeIyKianvmW0tzHA+edWY\n2mw29fX1acyYMQoJCZH094N9//33NWXKFB0/fly///67AgIC1NXVpd9++03ffvut5s2bd1mLBwAA\nAACYn1dbee+77z65XC599913amho0COPPCKHw+HZivvAAw8oODhYHR0damtr05dffqno6Ogh75Ot\nvAAAAAAwOnk1MQ0MDNRVV12llJQUWSwW2Ww27du3T21tbUpKSlJiYqI+/vhjRUZGKjw8/JJNqcRW\n3pFotGbHVl5cSWzBwmhkhO2rbOX1PTNsPTQqtvL6ntnWwgznk1eN6aRJk9Ta2qrS0lI1NDToqaee\n0sKFCxUdHa2Ojg7t2rVL69at0x133KHs7Oz/6T75upiRieyGZvT1MXp9GB7yxEhhhOcyXxfjeyP5\nsfkaXxfje2ZbCzPU69VW3oKCAv3000/q6uqSxWJRS0uL0tLSNHHiRPX09CgzM1NBQUFyu91yuVya\nNWuWPvzwQx+UDwAAAAAwO68a09raWhUUFOiDDz5QQ0ODXnnlFZWUlPzjds3NzcrOztZHH310WYoF\nAAAAAIw8Xm3ljY+P18033+z5jGleXp4+++wzjR8/XklJSZe7RgAAAADACObVxBQAAAAAgMtljL8L\nAAAAAACMbjSmAAAAAAC/ojEFAAAAAPgVjSkAAAAAwK9oTAEAAAAAfkVjCgAAAADwKxpTAAAAAIBf\n0ZgCAAAAAPzq/wDUBYtC5QLuhAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f6a42d79208>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"metadata": {
"id": "z0Rp5vHrX2ll",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"(結構時間がかかりました)\n",
"\n",
"元の特徴量からはわずかに1つが落とされている。性能を確認する。"
]
},
{
"metadata": {
"id": "BmqXuShFX_F_",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "2a121814-bc8d-484c-fdb8-b85d5f649c74"
},
"cell_type": "code",
"source": [
"X_train_rfe = select.transform(X_train)\n",
"X_test_rfe = select.transform(X_test)\n",
"score = LogisticRegression().fit(X_train_rfe, y_train).score(X_test_rfe, y_test)\n",
"print(\"RFEで特徴量選択した後のスコア: {:.3f}\".format(score))"
],
"execution_count": 84,
"outputs": [
{
"output_type": "stream",
"text": [
"RFEで特徴量選択した後のスコア: 0.951\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "px_NTuarYjvQ",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"RFEの過程で使用したモデルを使ってそのままスコアの計算もできる。このとき、使用される特徴量は自動的に選択されたもののみとなる。"
]
},
{
"metadata": {
"id": "zT9y6GyqYv3v",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "62adeb63-de99-4ab6-b7c6-8975bf15899e"
},
"cell_type": "code",
"source": [
"print(\"ランダムフォレストのスコア: {:.3f}\".format(select.score(X_test, y_test)))"
],
"execution_count": 85,
"outputs": [
{
"output_type": "stream",
"text": [
"ランダムフォレストのスコア: 0.951\n"
],
"name": "stdout"
}
]
},
{
"metadata": {
"id": "4GwG5al-ZK9F",
"colab_type": "text"
},
"cell_type": "markdown",
"source": [
"実世界のデータでは特徴量選択で大幅に性能が向上するようなことはあまりない…😌\n",
"\n",
"でも覚えておこうな。"
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment