Skip to content

Instantly share code, notes, and snippets.

@canard0328
Last active August 22, 2018 09:16
Show Gist options
  • Save canard0328/81c827dadcd18df69d76533c93eaf7dc to your computer and use it in GitHub Desktop.
Save canard0328/81c827dadcd18df69d76533c93eaf7dc to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Jupyter notebook tips \n",
"- Tab: コード補完候補表示\n",
"- Shift + Tab: メソッドのドキュメント表示\n",
"- Shift + Tab + Tab: ドキュメント表示欄拡大\n",
"- スペース2個: マークダウン内での改行"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# データの取得"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Abalone datasetをUCI Machine Learning RepositoryからDLします. \n",
"dataはヘッダ行のないCSVファイルなので,あらかじめカラム名を用意しておきます."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import pandas as pd\n",
"if not os.path.exists('abalone.csv'):\n",
" col_names = ('sex', 'length', 'diameter', 'height', 'whole_weight',\n",
" 'shucked_weight', 'viscera_weight', 'shell_weight', 'rings')\n",
" data = pd.read_csv(('http://archive.ics.uci.edu/ml/machine-learning-databases'\n",
" '/abalone/abalone.data'), header=None, names=col_names)\n",
" data.to_csv('abalone.csv', index=False)\n",
"else:\n",
" data = pd.read_csv('abalone.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# データの確認・可視化"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"きちんとデータを取得できていることを,ざっと確認しましょう"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>sex</th>\n",
" <th>length</th>\n",
" <th>diameter</th>\n",
" <th>height</th>\n",
" <th>whole_weight</th>\n",
" <th>shucked_weight</th>\n",
" <th>viscera_weight</th>\n",
" <th>shell_weight</th>\n",
" <th>rings</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>M</td>\n",
" <td>0.455</td>\n",
" <td>0.365</td>\n",
" <td>0.095</td>\n",
" <td>0.5140</td>\n",
" <td>0.2245</td>\n",
" <td>0.1010</td>\n",
" <td>0.150</td>\n",
" <td>15</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>M</td>\n",
" <td>0.350</td>\n",
" <td>0.265</td>\n",
" <td>0.090</td>\n",
" <td>0.2255</td>\n",
" <td>0.0995</td>\n",
" <td>0.0485</td>\n",
" <td>0.070</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>F</td>\n",
" <td>0.530</td>\n",
" <td>0.420</td>\n",
" <td>0.135</td>\n",
" <td>0.6770</td>\n",
" <td>0.2565</td>\n",
" <td>0.1415</td>\n",
" <td>0.210</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>M</td>\n",
" <td>0.440</td>\n",
" <td>0.365</td>\n",
" <td>0.125</td>\n",
" <td>0.5160</td>\n",
" <td>0.2155</td>\n",
" <td>0.1140</td>\n",
" <td>0.155</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>I</td>\n",
" <td>0.330</td>\n",
" <td>0.255</td>\n",
" <td>0.080</td>\n",
" <td>0.2050</td>\n",
" <td>0.0895</td>\n",
" <td>0.0395</td>\n",
" <td>0.055</td>\n",
" <td>7</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" sex length diameter height whole_weight shucked_weight viscera_weight \\\n",
"0 M 0.455 0.365 0.095 0.5140 0.2245 0.1010 \n",
"1 M 0.350 0.265 0.090 0.2255 0.0995 0.0485 \n",
"2 F 0.530 0.420 0.135 0.6770 0.2565 0.1415 \n",
"3 M 0.440 0.365 0.125 0.5160 0.2155 0.1140 \n",
"4 I 0.330 0.255 0.080 0.2050 0.0895 0.0395 \n",
"\n",
" shell_weight rings \n",
"0 0.150 15 \n",
"1 0.070 7 \n",
"2 0.210 9 \n",
"3 0.155 10 \n",
"4 0.055 7 "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>length</th>\n",
" <th>diameter</th>\n",
" <th>height</th>\n",
" <th>whole_weight</th>\n",
" <th>shucked_weight</th>\n",
" <th>viscera_weight</th>\n",
" <th>shell_weight</th>\n",
" <th>rings</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>4177.000000</td>\n",
" <td>4177.000000</td>\n",
" <td>4177.000000</td>\n",
" <td>4177.000000</td>\n",
" <td>4177.000000</td>\n",
" <td>4177.000000</td>\n",
" <td>4177.000000</td>\n",
" <td>4177.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>0.523992</td>\n",
" <td>0.407881</td>\n",
" <td>0.139516</td>\n",
" <td>0.828742</td>\n",
" <td>0.359367</td>\n",
" <td>0.180594</td>\n",
" <td>0.238831</td>\n",
" <td>9.933684</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>0.120093</td>\n",
" <td>0.099240</td>\n",
" <td>0.041827</td>\n",
" <td>0.490389</td>\n",
" <td>0.221963</td>\n",
" <td>0.109614</td>\n",
" <td>0.139203</td>\n",
" <td>3.224169</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>0.075000</td>\n",
" <td>0.055000</td>\n",
" <td>0.000000</td>\n",
" <td>0.002000</td>\n",
" <td>0.001000</td>\n",
" <td>0.000500</td>\n",
" <td>0.001500</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>0.450000</td>\n",
" <td>0.350000</td>\n",
" <td>0.115000</td>\n",
" <td>0.441500</td>\n",
" <td>0.186000</td>\n",
" <td>0.093500</td>\n",
" <td>0.130000</td>\n",
" <td>8.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>0.545000</td>\n",
" <td>0.425000</td>\n",
" <td>0.140000</td>\n",
" <td>0.799500</td>\n",
" <td>0.336000</td>\n",
" <td>0.171000</td>\n",
" <td>0.234000</td>\n",
" <td>9.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>0.615000</td>\n",
" <td>0.480000</td>\n",
" <td>0.165000</td>\n",
" <td>1.153000</td>\n",
" <td>0.502000</td>\n",
" <td>0.253000</td>\n",
" <td>0.329000</td>\n",
" <td>11.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>0.815000</td>\n",
" <td>0.650000</td>\n",
" <td>1.130000</td>\n",
" <td>2.825500</td>\n",
" <td>1.488000</td>\n",
" <td>0.760000</td>\n",
" <td>1.005000</td>\n",
" <td>29.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" length diameter height whole_weight shucked_weight \\\n",
"count 4177.000000 4177.000000 4177.000000 4177.000000 4177.000000 \n",
"mean 0.523992 0.407881 0.139516 0.828742 0.359367 \n",
"std 0.120093 0.099240 0.041827 0.490389 0.221963 \n",
"min 0.075000 0.055000 0.000000 0.002000 0.001000 \n",
"25% 0.450000 0.350000 0.115000 0.441500 0.186000 \n",
"50% 0.545000 0.425000 0.140000 0.799500 0.336000 \n",
"75% 0.615000 0.480000 0.165000 1.153000 0.502000 \n",
"max 0.815000 0.650000 1.130000 2.825500 1.488000 \n",
"\n",
" viscera_weight shell_weight rings \n",
"count 4177.000000 4177.000000 4177.000000 \n",
"mean 0.180594 0.238831 9.933684 \n",
"std 0.109614 0.139203 3.224169 \n",
"min 0.000500 0.001500 1.000000 \n",
"25% 0.093500 0.130000 8.000000 \n",
"50% 0.171000 0.234000 9.000000 \n",
"75% 0.253000 0.329000 11.000000 \n",
"max 0.760000 1.005000 29.000000 "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<font color=\"red\">heightが0のデータがあることが分かります.</font>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"データを可視化してみます."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"変数'sex'は質的変数なので,頻度をカウントしてみます"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"M 1528\n",
"I 1342\n",
"F 1307\n",
"Name: sex, dtype: int64"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.value_counts(data['sex'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"その他の変数は量的変数なのでboxplotで分布をみてみます"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"# notebook内にグラフを出力する\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x130d11da7f0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ax = data.boxplot(rot=45)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ヒストグラムでもみてみます"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x130d128d588>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"axes = data.hist(bins=20, xlabelsize=7, ylabelsize=10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"変数同士の相関をみてみます"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>length</th>\n",
" <th>diameter</th>\n",
" <th>height</th>\n",
" <th>whole_weight</th>\n",
" <th>shucked_weight</th>\n",
" <th>viscera_weight</th>\n",
" <th>shell_weight</th>\n",
" <th>rings</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>length</th>\n",
" <td>1.000000</td>\n",
" <td>0.986812</td>\n",
" <td>0.827554</td>\n",
" <td>0.925261</td>\n",
" <td>0.897914</td>\n",
" <td>0.903018</td>\n",
" <td>0.897706</td>\n",
" <td>0.556720</td>\n",
" </tr>\n",
" <tr>\n",
" <th>diameter</th>\n",
" <td>0.986812</td>\n",
" <td>1.000000</td>\n",
" <td>0.833684</td>\n",
" <td>0.925452</td>\n",
" <td>0.893162</td>\n",
" <td>0.899724</td>\n",
" <td>0.905330</td>\n",
" <td>0.574660</td>\n",
" </tr>\n",
" <tr>\n",
" <th>height</th>\n",
" <td>0.827554</td>\n",
" <td>0.833684</td>\n",
" <td>1.000000</td>\n",
" <td>0.819221</td>\n",
" <td>0.774972</td>\n",
" <td>0.798319</td>\n",
" <td>0.817338</td>\n",
" <td>0.557467</td>\n",
" </tr>\n",
" <tr>\n",
" <th>whole_weight</th>\n",
" <td>0.925261</td>\n",
" <td>0.925452</td>\n",
" <td>0.819221</td>\n",
" <td>1.000000</td>\n",
" <td>0.969405</td>\n",
" <td>0.966375</td>\n",
" <td>0.955355</td>\n",
" <td>0.540390</td>\n",
" </tr>\n",
" <tr>\n",
" <th>shucked_weight</th>\n",
" <td>0.897914</td>\n",
" <td>0.893162</td>\n",
" <td>0.774972</td>\n",
" <td>0.969405</td>\n",
" <td>1.000000</td>\n",
" <td>0.931961</td>\n",
" <td>0.882617</td>\n",
" <td>0.420884</td>\n",
" </tr>\n",
" <tr>\n",
" <th>viscera_weight</th>\n",
" <td>0.903018</td>\n",
" <td>0.899724</td>\n",
" <td>0.798319</td>\n",
" <td>0.966375</td>\n",
" <td>0.931961</td>\n",
" <td>1.000000</td>\n",
" <td>0.907656</td>\n",
" <td>0.503819</td>\n",
" </tr>\n",
" <tr>\n",
" <th>shell_weight</th>\n",
" <td>0.897706</td>\n",
" <td>0.905330</td>\n",
" <td>0.817338</td>\n",
" <td>0.955355</td>\n",
" <td>0.882617</td>\n",
" <td>0.907656</td>\n",
" <td>1.000000</td>\n",
" <td>0.627574</td>\n",
" </tr>\n",
" <tr>\n",
" <th>rings</th>\n",
" <td>0.556720</td>\n",
" <td>0.574660</td>\n",
" <td>0.557467</td>\n",
" <td>0.540390</td>\n",
" <td>0.420884</td>\n",
" <td>0.503819</td>\n",
" <td>0.627574</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" length diameter height whole_weight shucked_weight \\\n",
"length 1.000000 0.986812 0.827554 0.925261 0.897914 \n",
"diameter 0.986812 1.000000 0.833684 0.925452 0.893162 \n",
"height 0.827554 0.833684 1.000000 0.819221 0.774972 \n",
"whole_weight 0.925261 0.925452 0.819221 1.000000 0.969405 \n",
"shucked_weight 0.897914 0.893162 0.774972 0.969405 1.000000 \n",
"viscera_weight 0.903018 0.899724 0.798319 0.966375 0.931961 \n",
"shell_weight 0.897706 0.905330 0.817338 0.955355 0.882617 \n",
"rings 0.556720 0.574660 0.557467 0.540390 0.420884 \n",
"\n",
" viscera_weight shell_weight rings \n",
"length 0.903018 0.897706 0.556720 \n",
"diameter 0.899724 0.905330 0.574660 \n",
"height 0.798319 0.817338 0.557467 \n",
"whole_weight 0.966375 0.955355 0.540390 \n",
"shucked_weight 0.931961 0.882617 0.420884 \n",
"viscera_weight 1.000000 0.907656 0.503819 \n",
"shell_weight 0.907656 1.000000 0.627574 \n",
"rings 0.503819 0.627574 1.000000 "
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.corr()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"このような形の可視化も見やすいかもしれません."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x130d120b6d8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"axes = data.drop('rings', axis=1).plot(kind='hist', bins=50, subplots=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# データの前処理"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"変数heightが0であるデータを削除しましょう."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>sex</th>\n",
" <th>length</th>\n",
" <th>diameter</th>\n",
" <th>height</th>\n",
" <th>whole_weight</th>\n",
" <th>shucked_weight</th>\n",
" <th>viscera_weight</th>\n",
" <th>shell_weight</th>\n",
" <th>rings</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1257</th>\n",
" <td>I</td>\n",
" <td>0.430</td>\n",
" <td>0.34</td>\n",
" <td>0.0</td>\n",
" <td>0.428</td>\n",
" <td>0.2065</td>\n",
" <td>0.0860</td>\n",
" <td>0.1150</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3996</th>\n",
" <td>I</td>\n",
" <td>0.315</td>\n",
" <td>0.23</td>\n",
" <td>0.0</td>\n",
" <td>0.134</td>\n",
" <td>0.0575</td>\n",
" <td>0.0285</td>\n",
" <td>0.3505</td>\n",
" <td>6</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" sex length diameter height whole_weight shucked_weight \\\n",
"1257 I 0.430 0.34 0.0 0.428 0.2065 \n",
"3996 I 0.315 0.23 0.0 0.134 0.0575 \n",
"\n",
" viscera_weight shell_weight rings \n",
"1257 0.0860 0.1150 8 \n",
"3996 0.0285 0.3505 6 "
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data[data.height==0]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"data_tidy = data[~(data.height==0)]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"sex 4175\n",
"length 4175\n",
"diameter 4175\n",
"height 4175\n",
"whole_weight 4175\n",
"shucked_weight 4175\n",
"viscera_weight 4175\n",
"shell_weight 4175\n",
"rings 4175\n",
"dtype: int64"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_tidy.count()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"質的変数sexをダミー変数を利用して量的変数に変換しましょう"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"data_tidy = pd.get_dummies(data_tidy, columns=['sex'], drop_first=True)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['length', 'diameter', 'height', 'whole_weight', 'shucked_weight',\n",
" 'viscera_weight', 'shell_weight', 'rings', 'sex_I', 'sex_M'],\n",
" dtype='object')"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_tidy.columns"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ここで,データを説明変数Xと目的変数yに分けます"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"X = data_tidy.drop('rings', axis=1)\n",
"y = data_tidy.loc[:, 'rings']"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['length', 'diameter', 'height', 'whole_weight', 'shucked_weight',\n",
" 'viscera_weight', 'shell_weight', 'sex_I', 'sex_M'],\n",
" dtype='object')"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X.columns"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'rings'"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y.name"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# モデルの学習と予測"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"手元のデータで学習をして,学習したモデルで予測をしてみましょう."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.linear_model import LinearRegression\n",
"regr = LinearRegression()\n",
"regr.fit(X, y)\n",
"y_pred = regr.predict(X)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 9.22143205, 7.8513656 , 11.09261694, ..., 10.94817007,\n",
" 9.73916518, 10.99364565])"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_pred"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0,0.5,'$\\\\hat{y}$')"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x130d3919b38>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"plt.figure(figsize=(5, 5))\n",
"plt.scatter(y, y_pred)\n",
"plt.xlim(-5, 30)\n",
"plt.ylim(-5, 30)\n",
"plt.xlabel('y')\n",
"plt.ylabel(r'$\\hat{y}$')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 性能の評価"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"予測値を平均絶対誤差で評価してみましょう."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"誤差: 1.577885656351277\n"
]
}
],
"source": [
"from sklearn.metrics import mean_absolute_error\n",
"print('誤差: ', mean_absolute_error(y, y_pred))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 過学習"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"データを,訓練データと評価データに分けましょう. \n",
"ここで,評価データは予測モデルを実環境で運用した際に得られる未知のデータを想定しており, \n",
"<font color='red'>評価データに対する性能が良くなるよう試行錯誤するのは適切ではない</font>ことに注意してください."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"X_train, X_test, y_train, y_test =\\\n",
" train_test_split(X, y, test_size=0.4, random_state=1,\n",
" shuffle=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"過学習についてみていきましょう. \n",
"適当な回帰アルゴリズムを選び,<font color=\"red\">訓練データに対する予測性能が最も良くなるように</font>ハイパーパラメータをチューニングしてみましょう. \n",
"そのあと,作成したモデルで評価データに対する予測性能をみてみましょう."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"線形回帰の例:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"訓練データに対する誤差: 1.5448696958937491\n",
"評価データに対する誤差: 1.6071922396127398\n"
]
}
],
"source": [
"from sklearn.linear_model import LinearRegression\n",
"from sklearn.metrics import mean_absolute_error\n",
"regr = LinearRegression()\n",
"regr.fit(X_train, y_train)\n",
"y_pred = regr.predict(X_train)\n",
"print('訓練データに対する誤差: ', mean_absolute_error(y_train, y_pred))\n",
"y_pred = regr.predict(X_test)\n",
"print('評価データに対する誤差: ', mean_absolute_error(y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"回帰木の例:"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"訓練データに対する誤差: 0.0\n",
"評価データに対する誤差: 2.065868263473054\n"
]
}
],
"source": [
"from sklearn.tree import DecisionTreeRegressor\n",
"from sklearn.metrics import mean_absolute_error\n",
"regr = DecisionTreeRegressor(max_depth=None, random_state=1)\n",
"regr.fit(X_train, y_train)\n",
"y_pred = regr.predict(X_train)\n",
"print('訓練データに対する誤差: ', mean_absolute_error(y_train, y_pred))\n",
"y_pred = regr.predict(X_test)\n",
"print('評価データに対する誤差: ', mean_absolute_error(y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"サポートベクターマシンの例:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"訓練データに対する誤差: 0.09793777638387188\n",
"評価データに対する誤差: 1.9349815512908115\n"
]
}
],
"source": [
"from sklearn.svm import SVR\n",
"from sklearn.metrics import mean_absolute_error\n",
"regr = SVR(kernel='rbf', C=1000, gamma=1000)\n",
"regr.fit(X_train, y_train)\n",
"y_pred = regr.predict(X_train)\n",
"print('訓練データに対する誤差: ', mean_absolute_error(y_train, y_pred))\n",
"y_pred = regr.predict(X_test)\n",
"print('評価データに対する誤差: ', mean_absolute_error(y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# グリッドサーチと交差検証"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Grid searchとcross validationをやってみましょう"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import GridSearchCV, KFold"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"GridSearchCV(cv=KFold(n_splits=5, random_state=1, shuffle=True),\n",
" error_score='raise',\n",
" estimator=SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma='auto',\n",
" kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False),\n",
" fit_params=None, iid=True, n_jobs=4,\n",
" param_grid={'C': [30, 100, 300], 'gamma': [0.1, 0.3, 1]},\n",
" pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
" scoring='neg_mean_absolute_error', verbose=0)"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.svm import SVR\n",
"p_grid = {'C': [30, 100, 300], 'gamma': [0.1, 0.3, 1]}\n",
"svr = SVR(kernel=\"rbf\")\n",
"cv = KFold(n_splits=5, shuffle=True, random_state=1)\n",
"regr = GridSearchCV(estimator=svr, param_grid=p_grid, cv=cv, n_jobs=4,\n",
" scoring='neg_mean_absolute_error')\n",
"regr.fit(X_train, y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"交差検証誤差と,スコアの最も良かったハイパーパラメータを確認します. \n",
"このとき,選ばれたパラメータがグリッドサーチの範囲の端の値だった場合, \n",
"グリッドサーチの範囲を変更して,再度交差検証をやり直しましょう."
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"交差検証誤差: 1.4613603393492052\n",
"最小誤差時のハイパーパラメータ: {'C': 100, 'gamma': 0.3}\n"
]
}
],
"source": [
"print('交差検証誤差: ', -regr.best_score_)\n",
"print('最小誤差時のハイパーパラメータ: ', regr.best_params_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最終的なモデルは,全データを使い,上記パラメータで学習を行います."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"regr = SVR(kernel=\"rbf\", gamma=0.3, C=100)\n",
"rtn = regr.fit(X_train, y_train)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"それでは,評価データに対する誤差をみてみましょう \n",
"しつこいようですが,この値は本来実運用を始めるまで知ることができない値です."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"評価データに対する誤差: 1.4961550762118891\n"
]
}
],
"source": [
"y_pred = regr.predict(X_test)\n",
"print('評価データに対する誤差: ', mean_absolute_error(y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 正規化"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"アルゴリズムによっては,説明変数のスケールが影響を与えること \n",
"(影響をほとんど受けないアルゴリズムもあること) \n",
"正規化によりその影響を抑えられることを見てみましょう.\n",
"- 影響を受けやすいアルゴリズムの例:K近傍法\n",
"- 影響を受けにくいアルゴリズムの例:決定木"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"最小誤差時のハイパーパラメータ: {'n_neighbors': 16}\n",
"元データでの誤差: 1.5114770459081837\n"
]
}
],
"source": [
"from sklearn.neighbors import KNeighborsRegressor\n",
"p_grid = {'n_neighbors': [15, 16, 17, 18, 19]}\n",
"knr = KNeighborsRegressor()\n",
"cv = KFold(n_splits=5, shuffle=True, random_state=1)\n",
"regr = GridSearchCV(estimator=knr, param_grid=p_grid, cv=cv, n_jobs=4,\n",
" scoring='neg_mean_absolute_error')\n",
"regr.fit(X_train, y_train)\n",
"print('最小誤差時のハイパーパラメータ: ', regr.best_params_)\n",
"print('元データでの誤差: ', -regr.best_score_)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"最小誤差時のハイパーパラメータ: {'n_neighbors': 20}\n",
"スケールを変更したときの誤差: 1.988622754491018\n"
]
}
],
"source": [
"X_train_tmp = X_train.copy(deep=True)\n",
"X_train_tmp['shucked_weight'] *= 1000\n",
"p_grid = {'n_neighbors': [19, 20, 21, 22, 23]}\n",
"cv = KFold(n_splits=5, shuffle=True, random_state=1)\n",
"regr = GridSearchCV(estimator=knr, param_grid=p_grid, cv=cv, n_jobs=4,\n",
" scoring='neg_mean_absolute_error')\n",
"regr.fit(X_train_tmp, y_train)\n",
"print('最小誤差時のハイパーパラメータ: ', regr.best_params_)\n",
"print('スケールを変更したときの誤差: ', -regr.best_score_)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"最小誤差時のハイパーパラメータ: {'n_neighbors': 15}\n",
"基準化を行ったときの誤差: 1.535249500998004\n"
]
}
],
"source": [
"from sklearn.preprocessing import StandardScaler\n",
"X_train_scale = StandardScaler().fit_transform(X_train_tmp)\n",
"p_grid = {'n_neighbors': [14, 15, 16, 17, 18]}\n",
"cv = KFold(n_splits=5, shuffle=True, random_state=1)\n",
"regr = GridSearchCV(estimator=knr, param_grid=p_grid, cv=cv, n_jobs=4,\n",
" scoring='neg_mean_absolute_error')\n",
"regr.fit(X_train_scale, y_train)\n",
"print('最小誤差時のハイパーパラメータ: ', regr.best_params_)\n",
"print('基準化を行ったときの誤差: ', -regr.best_score_)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"最小誤差時のハイパーパラメータ: {'max_depth': 6}\n",
"元データでの誤差: 1.6090607846224858\n"
]
}
],
"source": [
"from sklearn.tree import DecisionTreeRegressor\n",
"p_grid = {'max_depth': [3, 4, 5, 6, 7]}\n",
"dtr = DecisionTreeRegressor(random_state=1)\n",
"cv = KFold(n_splits=5, shuffle=True, random_state=1)\n",
"regr = GridSearchCV(estimator=dtr, param_grid=p_grid, cv=cv, n_jobs=4,\n",
" scoring='neg_mean_absolute_error')\n",
"regr.fit(X_train, y_train)\n",
"print('最小誤差時のハイパーパラメータ: ', regr.best_params_)\n",
"print('元データでの誤差: ', -regr.best_score_)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"最小誤差時のハイパーパラメータ: {'max_depth': 6}\n",
"スケールを変更したときの誤差: 1.6092798830866515\n"
]
}
],
"source": [
"X_train_tmp = X_train.copy(deep=True)\n",
"X_train_tmp['shucked_weight'] *= 1000\n",
"p_grid = {'max_depth': [3, 4, 5, 6, 7]}\n",
"cv = KFold(n_splits=5, shuffle=True, random_state=1)\n",
"regr = GridSearchCV(estimator=dtr, param_grid=p_grid, cv=cv, n_jobs=4,\n",
" scoring='neg_mean_absolute_error')\n",
"regr.fit(X_train_tmp, y_train)\n",
"print('最小誤差時のハイパーパラメータ: ', regr.best_params_)\n",
"print('スケールを変更したときの誤差: ', -regr.best_score_)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# バイアスとバリアンス"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"最後に,学習曲線を作成してみましょう."
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.model_selection import learning_curve\n",
"def plot_learning_curve(estimator, title, X, y, ylim=None, cv=None, n_jobs=1):\n",
" plt.figure()\n",
" plt.title(title)\n",
" if ylim is not None:\n",
" plt.ylim(*ylim)\n",
" plt.xlabel(\"Training examples\")\n",
" plt.ylabel(\"Score\")\n",
" train_sizes, train_scores, test_scores = learning_curve(\n",
" estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=np.linspace(.1, 1.0, 5),\n",
" scoring='neg_mean_absolute_error')\n",
" train_scores_mean = np.mean(train_scores, axis=1)\n",
" train_scores_std = np.std(train_scores, axis=1)\n",
" test_scores_mean = np.mean(test_scores, axis=1)\n",
" test_scores_std = np.std(test_scores, axis=1)\n",
"\n",
" plt.fill_between(train_sizes, train_scores_mean - train_scores_std,\n",
" train_scores_mean + train_scores_std, alpha=0.1, color=\"r\")\n",
" plt.fill_between(train_sizes, test_scores_mean - test_scores_std,\n",
" test_scores_mean + test_scores_std, alpha=0.1, color=\"g\")\n",
" plt.plot(train_sizes, train_scores_mean, 'o-', color=\"r\", label=\"Training score\")\n",
" plt.plot(train_sizes, test_scores_mean, 'o-', color=\"g\", label=\"Cross-validation score\")\n",
" plt.legend(loc=\"best\")"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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Pp+PBx54gKlTp3LFFVekXFvf/OY3GT9+PB988EGDYw4ePJhf/OIXXHbZZalU6X/913/luOOOy/o1GoaRO6Q1bo6uQkVFha5atarBtg0bNjBmzJg89aiwiEajRKNRAoEAmzZtYtasWWzatAmfr9uXfGsV9l0yuioislpVm5yEnsRGCiNFdXU1Z511FtFoFFVNWRuGYRitwUYLI0WfPn1YvXp1vrthGEYnpWCzvAzDMIzOhQmKYRiGkRVMUAzDMIysYIJiGIZhZAUTlDayZO0SRt47Es+/eBh570iWrD38kvDbt2/n8ssv55hjjmHs2LGcf/75vP/++1nobfYZOXIku3fvBkiVSmnMtddey2OPPdbscRYvXszWrVtTr7/+9a9nnEhpGEbnwbK82sCStUuY94d51EZcxeHNBzYz7w+ufP3c8e2b7KiqzJ49m2uuuSZVC6uyspIdOzjqB8EAABHVSURBVHYwevToVLtYLIbX6z3MK8guySrF7WHx4sWUl5czbNgwAB566KFsdSurRKNRS502jFZiFkoaN/7pRmYuntnk4/onr0+JSZLaSC3XP3l9k++58U/Nl69/4YUX8Pv9fOMb30htmzRpEqeffjorV67kzDPP5Ktf/Srjx48H4Cc/+UmqHHyyHH1NTQ0XXHABEydOpLy8nEceeQSA+fPnp8rMN15jBeDnP/85N998c+r14sWL+fa3vw24Qo4nnXQS48aNa7KuVo8ePQAnit/61rcYO3YsF1xwQapkPsCdd97JlClTKC8vZ968eagqjz32GKtWrWLu3LlMmjSJYDDIzJkzSU46Xbp0KePHj6e8vDxVrDJ5vttuu42JEydyyimnsGPHDhrz4osvphYoO/HEE6mqqgJcGf3x48czceJE5s93RasrKys55ZRTmDBhArNnz2bfvn0AzJw5kx/84AfMmDGD++67j127dnHxxRczZcoUpkyZwl//+tem/6GG0Y2xW682EIplLlPf1PbWsG7dOk466aQm97/xxhusW7eOUaNGsXr1ahYtWsTrr7+OqnLyySczY8YMPvroI4YNG8YzzzwDuPIoe/fuZfny5WzcuBERYf/+/Ycc+5JLLmHatGncfffdADzyyCPcdtttAPzyl7+kX79+BINBpkyZwsUXX0z//v0z9nH58uW89957rF27lh07djB27Fi+9rWvAfCtb32L22+/HYCrrrqKp59+mksuuYSf/vSn3HPPPVRUNJx8u3XrVm655RZWr15N3759mTVrFk888QQXXXQRNTU1nHLKKSxYsICbb76ZBx98kB/+8IcN3n/PPffws5/9jNNOO43q6moCgQB//OMfeeKJJ3j99dcpLS1l7969AFx99dXcf//9zJgxg9tvv51/+Zd/SYn0/v37efHFFwH46le/yne/+12mT5/Op59+yjnnnMOGDRswDKMhJihp3Htu8+XrR947ks0HDi1ff1Tvo1h57cqc9Gnq1KmMGjUKcOXlZ8+enarUO2fOHF5++WXOPfdcbrrpJm655RYuvPBCTj/99FQJla9//esNysynM3DgQI4++mhee+01jjvuON57771UjbD/+q//YvlyV27ts88+Y9OmTU0KyksvvcQVV1yB1+tl2LBhfOELX0jte+GFF7j77rupra1l7969jBs3ji996UtNXu+bb77JzJkzSa5dM3fuXF566SUuuugiioqKUtdx0kknsWLFikPef9ppp/G9732PuXPnMmfOHI444giee+45rrvuulQZ/X79+nHgwAH279/PjBkzALjmmmu49NJLU8e57LLLUs+fe+65BvGdgwcPUlVVRc+ePZu8DsPojpjLqw0sOGsBpf6G5etL/aUsOKv95evHjRvX7Oz0xmXeMzF69GhWr17N+PHjufXWW7nzzjvx+Xy88cYbXHzxxTzxxBOce+65xGKxlDsoaTVcdtllPProo/z+979n9uzZiAgrV67kueee49VXX2XNmjWceOKJGUvlp5NpOee6ujr+/u//nscee4y1a9dyww03tHic5mrL+f3+1HmaKs0/f/58HnroIYLBIKeccgobN25EVZtdbjoT6Z97PB7n1VdfTZXX//zzz01MDCMDJihtYO74uSz80kKO6n0UgnBU76NY+KWF7Q7IA3zhC18gFArx4IMPpra9+eabKXdLOmeccQZPPPEEtbW11NTUsHz5ck4//XS2bt1KaWkpV155JTfddBNvvfUW1dXVHDhwgPPPP597772XyspKvF5valBMrtI4Z84cnnjiCZYuXZq6Kz9w4AB9+/altLSUjRs38tprrzV7DWeccQbLli0jFouxbds2XnjhBYCUeAwYMIDq6uoGmV89e/ZMxTfSOfnkk3nxxRfZvXs3sViMpUuXpqyI1vDhhx8yfvx4brnlFioq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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x130d394a8d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"p_grid = {'C': [10, 22, 46, 100, 215, 464],\n",
" 'gamma': [0.1, 0.22, 0.46, 1, 2.15]}\n",
"svr = SVR(kernel=\"rbf\")\n",
"cv = KFold(n_splits=5, shuffle=True, random_state=1)\n",
"regr = GridSearchCV(estimator=svr, param_grid=p_grid, cv=cv,\n",
" scoring='neg_mean_absolute_error')\n",
"plot_learning_curve(regr, 'Learning Curves (SVM, RBF kernel)',\n",
" X_train, y_train, n_jobs=4, ylim=(-1.7,-1.35))"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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xlooFkt3IzybK4GzvOJlwoQJjBw5ktGjRzNs2DB++tOfJvwYF154Iaeffjpjx45lwoQJjB49mtzc3HplSktLmTFjBrW1tYRCIW655RYA7rzzTs455xzuu+8+PB4P9913H5MmTeKUU06JuLbOO+88xowZw3fffVevzn79+vHQQw9x0kknRaZK33DDDey2224JP8eOik0OabF0AVatWsWee+6Z6mZ0CAKBAIFAgIyMDL799luOOOIIvv32Wzwee/8cD7F+SzY5pMVi6ZZUVFRw6KGHEggEUNWItWFJPvYqWyyWLkVeXh4fffRRqpvRLbGD8haLxWJJCFZQLBaLxZIQrKBYLBaLJSFYQbFYLBZLQrCCYrFYEsKmTZs4+eSTGT58OCNHjmTatGl88803qW5WTAoLC9m2bRtgAhJjceaZZ/Lcc881Wc+jjz7Khg0bIu/PPvvsmIGU3QUrKBZLN2T+5/MpnFeI668uCucVMv/ztmUaVlWmT5/OlClT+P7771m5ciU33HADmzdvrlcuGAy26TjJIJyluDU0FJQHH3xwp0SXHYHGUtckGisoFks3Y/7n85n5r5kUlRahKEWlRcz818w2icqbb75JWloa5557bmTb+PHjOfDAA1myZAlTp07lV7/6FWPGjAHglltuiaSDD6ejr6ys5Oijj2bcuHGMHj2ap59+GoBZs2ZF0sw3XGMF4J577uGKK66IvH/00Ue58MILATj++OPZe++9GTVqFPfff3/Mtvfo0QMwonjBBRcwcuRIjj766EjKfIBrr72WffbZh9GjRzNz5kxUleeee47ly5dz6qmnMn78eKqrq5kyZQrh4Oknn3ySMWPGMHr06Eh6/PDxrr76asaNG8d+++23k+gCvPXWW5EFyvbaay/Ky8sBk0Z/zJgxjBs3LpJ9ecWKFey3336MHTuW6dOns2PHDgCmTJnCVVddxcEHH8xtt93G1q1bOeGEE9hnn33YZ599+N///tf4F9pawgvDtPcDOBH4EggBE5sp6wY+AV6J2jYU+AD4Fnga8DZ3zL333lstlq7IypUrI68veu0iPfiRgxt9pF+Xrsxmp0f6demN7nPRaxc1efzbbrtNL7744pifvfnmm5qVlaWrV69WVdXly5fr6NGjtaKiQsvLy3XkyJH68ccf63PPPadnn312ZL+SkhItLi7W3XffXUOhkKqq7tix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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x130d3a05a20>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"regr = LinearRegression()\n",
"plot_learning_curve(regr, 'Learning Curves (Linear regression)',\n",
" X_train, y_train, n_jobs=4, ylim=(-1.7,-1.35))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"サポートベクターマシンを使ったモデルはハイバリアンスな傾向がありそうです. \n",
"しかしデータを増やしても交差検証誤差の減少は望めなそうです. \n",
"そこで説明変数を削減してみます."
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"交差検証誤差: 1.4475913767431021\n",
"最小誤差時のハイパーパラメータ: {'C': 10, 'gamma': 3}\n"
]
}
],
"source": [
"X_train_sel = X_train.drop(['length', 'sex_M'], axis=1)\n",
"p_grid = {'C': [1, 3, 10, 30, 100], 'gamma': [0.3, 1, 3, 10, 30]}\n",
"svr = SVR(kernel=\"rbf\")\n",
"cv = KFold(n_splits=5, shuffle=True, random_state=1)\n",
"regr = GridSearchCV(estimator=svr, param_grid=p_grid, cv=cv, n_jobs=4,\n",
" scoring='neg_mean_absolute_error')\n",
"regr.fit(X_train_sel, y_train)\n",
"print('交差検証誤差: ', -regr.best_score_)\n",
"print('最小誤差時のハイパーパラメータ: ', regr.best_params_)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"評価データに対する誤差: 1.4836160865447574\n"
]
}
],
"source": [
"regr = SVR(kernel=\"rbf\", gamma=3, C=10)\n",
"rtn = regr.fit(X_train_sel, y_train)\n",
"X_test_sel = X_test.drop(['length', 'sex_M'], axis=1)\n",
"y_pred = regr.predict(X_test_sel)\n",
"print('評価データに対する誤差: ', mean_absolute_error(y_test, y_pred))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"特徴選択をするまえの交差検証誤差は1.461, \n",
"評価データに対する誤差は1.496でした."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.3"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment