Skip to content

Instantly share code, notes, and snippets.

@takahashi-r
Created October 17, 2022 06:31
Show Gist options
  • Save takahashi-r/a4a94f99332101fa1f67f8a4137afd7e to your computer and use it in GitHub Desktop.
Save takahashi-r/a4a94f99332101fa1f67f8a4137afd7e to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"id": "3b3a2ad8",
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"from sktime.datasets import load_arrow_head # ArrowHead 時系列分類問題\n",
"from tsfresh.examples.har_dataset import download_har_dataset, load_har_dataset\n",
" \n",
"from sktime.transformations.panel.rocket import (\n",
" MiniRocket,\n",
" MiniRocketMultivariate,\n",
" MultiRocket,\n",
" MultiRocketMultivariate,\n",
" Rocket,\n",
")\n",
"\n",
"from sklearn.metrics import accuracy_score\n",
"from sklearn.preprocessing import StandardScaler\n",
"\n",
"from sklearn.linear_model import RidgeClassifierCV\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.svm import SVC\n",
"from sklearn.tree import DecisionTreeClassifier\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.neighbors import KNeighborsClassifier"
]
},
{
"cell_type": "markdown",
"id": "9aeea1b2",
"metadata": {},
"source": [
"# ROCKET ( RandOm Convolutional KErnel Transform )"
]
},
{
"cell_type": "markdown",
"id": "73eda0b0",
"metadata": {},
"source": [
"- rocketは特徴量変換アルゴリズムのこと\n",
" - CNNで使われる畳み込みカーネルを利用して、時系列データの特徴量を変換する\n",
" - RocketClassifierは内部でrocket * ridgeを計算している\n",
" - 使用する分類モデルは何でもよい\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "1e45c26f",
"metadata": {},
"outputs": [],
"source": [
"arrow_train_X, arrow_train_y = load_arrow_head(split=\"train\", return_type=\"numpy3d\")\n",
"arrow_test_X, arrow_test_y = load_arrow_head(split=\"test\", return_type=\"numpy3d\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "70033d8a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(データ数, カラム数, 系列の長さ) = (36, 1, 251)\n"
]
}
],
"source": [
"print('(データ数, カラム数, 系列の長さ) =', arrow_train_X.shape)"
]
},
{
"cell_type": "markdown",
"id": "f87c7c01",
"metadata": {},
"source": [
"ランダム畳み込みカーネル適用後のデータ"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "60b5f365",
"metadata": {
"scrolled": false
},
"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>0</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" <th>3</th>\n",
" <th>4</th>\n",
" <th>5</th>\n",
" <th>6</th>\n",
" <th>7</th>\n",
" <th>8</th>\n",
" <th>9</th>\n",
" <th>...</th>\n",
" <th>19990</th>\n",
" <th>19991</th>\n",
" <th>19992</th>\n",
" <th>19993</th>\n",
" <th>19994</th>\n",
" <th>19995</th>\n",
" <th>19996</th>\n",
" <th>19997</th>\n",
" <th>19998</th>\n",
" <th>19999</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.0</td>\n",
" <td>-0.662585</td>\n",
" <td>0.533865</td>\n",
" <td>4.506416</td>\n",
" <td>0.350598</td>\n",
" <td>2.280469</td>\n",
" <td>0.310757</td>\n",
" <td>2.310049</td>\n",
" <td>0.402878</td>\n",
" <td>3.297966</td>\n",
" <td>...</td>\n",
" <td>0.594142</td>\n",
" <td>1.422508</td>\n",
" <td>0.334802</td>\n",
" <td>1.895313</td>\n",
" <td>0.840637</td>\n",
" <td>1.231761</td>\n",
" <td>0.480687</td>\n",
" <td>2.977145</td>\n",
" <td>0.585657</td>\n",
" <td>6.873190</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.0</td>\n",
" <td>-0.834983</td>\n",
" <td>0.474104</td>\n",
" <td>3.905051</td>\n",
" <td>0.446215</td>\n",
" <td>1.465727</td>\n",
" <td>0.334661</td>\n",
" <td>2.005869</td>\n",
" <td>0.453237</td>\n",
" <td>2.566730</td>\n",
" <td>...</td>\n",
" <td>0.615063</td>\n",
" <td>1.143880</td>\n",
" <td>0.343612</td>\n",
" <td>1.261247</td>\n",
" <td>0.880478</td>\n",
" <td>0.898411</td>\n",
" <td>0.459227</td>\n",
" <td>2.407316</td>\n",
" <td>0.501992</td>\n",
" <td>5.984628</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.0</td>\n",
" <td>-0.813595</td>\n",
" <td>0.470120</td>\n",
" <td>3.868289</td>\n",
" <td>0.394422</td>\n",
" <td>1.918380</td>\n",
" <td>0.322709</td>\n",
" <td>2.060907</td>\n",
" <td>0.438849</td>\n",
" <td>2.937553</td>\n",
" <td>...</td>\n",
" <td>0.577406</td>\n",
" <td>1.151614</td>\n",
" <td>0.348018</td>\n",
" <td>1.371079</td>\n",
" <td>0.908367</td>\n",
" <td>1.057661</td>\n",
" <td>0.497854</td>\n",
" <td>2.623211</td>\n",
" <td>0.581673</td>\n",
" <td>6.077527</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.0</td>\n",
" <td>-0.616116</td>\n",
" <td>0.470120</td>\n",
" <td>3.746451</td>\n",
" <td>0.406375</td>\n",
" <td>2.772573</td>\n",
" <td>0.358566</td>\n",
" <td>2.320571</td>\n",
" <td>0.431655</td>\n",
" <td>4.492511</td>\n",
" <td>...</td>\n",
" <td>0.560669</td>\n",
" <td>1.487112</td>\n",
" <td>0.356828</td>\n",
" <td>1.727759</td>\n",
" <td>0.760956</td>\n",
" <td>1.630243</td>\n",
" <td>0.484979</td>\n",
" <td>2.533137</td>\n",
" <td>0.533865</td>\n",
" <td>6.414188</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0.0</td>\n",
" <td>-0.820120</td>\n",
" <td>0.505976</td>\n",
" <td>3.713560</td>\n",
" <td>0.422311</td>\n",
" <td>1.642876</td>\n",
" <td>0.374502</td>\n",
" <td>1.967128</td>\n",
" <td>0.460432</td>\n",
" <td>2.569098</td>\n",
" <td>...</td>\n",
" <td>0.556485</td>\n",
" <td>1.084194</td>\n",
" <td>0.361233</td>\n",
" <td>1.148842</td>\n",
" <td>0.900398</td>\n",
" <td>0.931728</td>\n",
" <td>0.506438</td>\n",
" <td>2.193146</td>\n",
" <td>0.573705</td>\n",
" <td>5.996089</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>0.0</td>\n",
" <td>-0.748740</td>\n",
" <td>0.454183</td>\n",
" <td>4.622028</td>\n",
" <td>0.442231</td>\n",
" <td>1.760631</td>\n",
" <td>0.266932</td>\n",
" <td>2.202698</td>\n",
" <td>0.431655</td>\n",
" <td>3.519801</td>\n",
" <td>...</td>\n",
" <td>0.581590</td>\n",
" <td>1.262858</td>\n",
" <td>0.295154</td>\n",
" <td>1.464865</td>\n",
" <td>0.796813</td>\n",
" <td>1.494757</td>\n",
" <td>0.502146</td>\n",
" <td>2.616175</td>\n",
" <td>0.454183</td>\n",
" <td>6.144483</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>0.0</td>\n",
" <td>-0.558466</td>\n",
" <td>0.434263</td>\n",
" <td>4.321628</td>\n",
" <td>0.426295</td>\n",
" <td>3.035904</td>\n",
" <td>0.414343</td>\n",
" <td>2.377295</td>\n",
" <td>0.489209</td>\n",
" <td>5.273605</td>\n",
" <td>...</td>\n",
" <td>0.548117</td>\n",
" <td>1.966048</td>\n",
" <td>0.400881</td>\n",
" <td>1.496356</td>\n",
" <td>0.693227</td>\n",
" <td>1.831129</td>\n",
" <td>0.515021</td>\n",
" <td>2.858087</td>\n",
" <td>0.557769</td>\n",
" <td>6.162225</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>0.0</td>\n",
" <td>-0.796453</td>\n",
" <td>0.474104</td>\n",
" <td>3.676568</td>\n",
" <td>0.466135</td>\n",
" <td>1.781578</td>\n",
" <td>0.358566</td>\n",
" <td>1.811635</td>\n",
" <td>0.467626</td>\n",
" <td>1.964182</td>\n",
" <td>...</td>\n",
" <td>0.606695</td>\n",
" <td>1.134304</td>\n",
" <td>0.365639</td>\n",
" <td>1.130087</td>\n",
" <td>0.864542</td>\n",
" <td>1.079545</td>\n",
" <td>0.497854</td>\n",
" <td>2.204010</td>\n",
" <td>0.557769</td>\n",
" <td>5.588720</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>0.0</td>\n",
" <td>-0.820684</td>\n",
" <td>0.466135</td>\n",
" <td>3.947555</td>\n",
" <td>0.442231</td>\n",
" <td>1.609111</td>\n",
" <td>0.310757</td>\n",
" <td>1.931943</td>\n",
" <td>0.431655</td>\n",
" <td>2.578725</td>\n",
" <td>...</td>\n",
" <td>0.589958</td>\n",
" <td>1.234510</td>\n",
" <td>0.325991</td>\n",
" <td>1.465524</td>\n",
" <td>0.904382</td>\n",
" <td>1.010743</td>\n",
" <td>0.493562</td>\n",
" <td>2.620455</td>\n",
" <td>0.517928</td>\n",
" <td>5.860975</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>0.0</td>\n",
" <td>-0.661786</td>\n",
" <td>0.494024</td>\n",
" <td>4.292712</td>\n",
" <td>0.418327</td>\n",
" <td>2.737910</td>\n",
" <td>0.374502</td>\n",
" <td>2.506648</td>\n",
" <td>0.446043</td>\n",
" <td>4.923174</td>\n",
" <td>...</td>\n",
" <td>0.569038</td>\n",
" <td>1.685331</td>\n",
" <td>0.356828</td>\n",
" <td>2.024033</td>\n",
" <td>0.705179</td>\n",
" <td>1.715242</td>\n",
" <td>0.484979</td>\n",
" <td>3.078876</td>\n",
" <td>0.521912</td>\n",
" <td>6.767816</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>0.0</td>\n",
" <td>-0.815107</td>\n",
" <td>0.458167</td>\n",
" <td>4.029395</td>\n",
" <td>0.478088</td>\n",
" <td>1.351843</td>\n",
" <td>0.310757</td>\n",
" <td>2.050373</td>\n",
" <td>0.438849</td>\n",
" <td>2.575331</td>\n",
" <td>...</td>\n",
" <td>0.656904</td>\n",
" <td>1.294321</td>\n",
" <td>0.321586</td>\n",
" <td>1.529864</td>\n",
" <td>0.848606</td>\n",
" <td>1.063852</td>\n",
" <td>0.484979</td>\n",
" <td>2.627045</td>\n",
" <td>0.458167</td>\n",
" <td>5.934666</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>0.0</td>\n",
" <td>-0.808278</td>\n",
" <td>0.474104</td>\n",
" <td>4.014507</td>\n",
" <td>0.374502</td>\n",
" <td>1.963756</td>\n",
" <td>0.330677</td>\n",
" <td>2.054807</td>\n",
" <td>0.431655</td>\n",
" <td>3.010676</td>\n",
" <td>...</td>\n",
" <td>0.569038</td>\n",
" <td>1.424237</td>\n",
" <td>0.339207</td>\n",
" <td>1.697885</td>\n",
" <td>0.900398</td>\n",
" <td>1.216403</td>\n",
" <td>0.510730</td>\n",
" <td>2.908560</td>\n",
" <td>0.553785</td>\n",
" <td>6.299387</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>0.0</td>\n",
" <td>-0.556346</td>\n",
" <td>0.418327</td>\n",
" <td>4.390847</td>\n",
" <td>0.390438</td>\n",
" <td>2.777158</td>\n",
" <td>0.398406</td>\n",
" <td>2.348132</td>\n",
" <td>0.417266</td>\n",
" <td>4.579191</td>\n",
" <td>...</td>\n",
" <td>0.539749</td>\n",
" <td>1.814791</td>\n",
" <td>0.343612</td>\n",
" <td>2.332455</td>\n",
" <td>0.661355</td>\n",
" <td>1.998068</td>\n",
" <td>0.497854</td>\n",
" <td>2.757892</td>\n",
" <td>0.541833</td>\n",
" <td>6.147580</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>0.0</td>\n",
" <td>-0.816895</td>\n",
" <td>0.470120</td>\n",
" <td>4.052507</td>\n",
" <td>0.430279</td>\n",
" <td>1.424464</td>\n",
" <td>0.318725</td>\n",
" <td>2.144803</td>\n",
" <td>0.417266</td>\n",
" <td>2.755383</td>\n",
" <td>...</td>\n",
" <td>0.610879</td>\n",
" <td>1.143937</td>\n",
" <td>0.325991</td>\n",
" <td>1.347726</td>\n",
" <td>0.852590</td>\n",
" <td>0.970086</td>\n",
" <td>0.489270</td>\n",
" <td>2.442560</td>\n",
" <td>0.525896</td>\n",
" <td>6.132132</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>0.0</td>\n",
" <td>-0.556978</td>\n",
" <td>0.466135</td>\n",
" <td>5.312715</td>\n",
" <td>0.478088</td>\n",
" <td>2.341451</td>\n",
" <td>0.274900</td>\n",
" <td>2.434659</td>\n",
" <td>0.395683</td>\n",
" <td>4.150170</td>\n",
" <td>...</td>\n",
" <td>0.619247</td>\n",
" <td>1.363750</td>\n",
" <td>0.299559</td>\n",
" <td>1.712904</td>\n",
" <td>0.741036</td>\n",
" <td>1.914472</td>\n",
" <td>0.502146</td>\n",
" <td>3.026250</td>\n",
" <td>0.458167</td>\n",
" <td>6.890395</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>0.0</td>\n",
" <td>-0.490627</td>\n",
" <td>0.474104</td>\n",
" <td>5.388538</td>\n",
" <td>0.418327</td>\n",
" <td>3.127623</td>\n",
" <td>0.402390</td>\n",
" <td>2.399798</td>\n",
" <td>0.489209</td>\n",
" <td>5.310913</td>\n",
" <td>...</td>\n",
" <td>0.569038</td>\n",
" <td>2.082817</td>\n",
" <td>0.361233</td>\n",
" <td>2.583106</td>\n",
" <td>0.625498</td>\n",
" <td>2.376214</td>\n",
" <td>0.484979</td>\n",
" <td>3.028562</td>\n",
" <td>0.501992</td>\n",
" <td>6.197819</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>0.0</td>\n",
" <td>-0.809063</td>\n",
" <td>0.430279</td>\n",
" <td>4.406628</td>\n",
" <td>0.482072</td>\n",
" <td>1.479293</td>\n",
" <td>0.258964</td>\n",
" <td>2.194906</td>\n",
" <td>0.402878</td>\n",
" <td>2.888736</td>\n",
" <td>...</td>\n",
" <td>0.690377</td>\n",
" <td>1.377562</td>\n",
" <td>0.268722</td>\n",
" <td>1.716758</td>\n",
" <td>0.860558</td>\n",
" <td>1.148379</td>\n",
" <td>0.446352</td>\n",
" <td>2.964938</td>\n",
" <td>0.390438</td>\n",
" <td>6.076684</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>0.0</td>\n",
" <td>-0.813561</td>\n",
" <td>0.458167</td>\n",
" <td>3.604482</td>\n",
" <td>0.565737</td>\n",
" <td>1.488724</td>\n",
" <td>0.314741</td>\n",
" <td>1.851064</td>\n",
" <td>0.424460</td>\n",
" <td>2.566276</td>\n",
" <td>...</td>\n",
" <td>0.623431</td>\n",
" <td>1.057368</td>\n",
" <td>0.299559</td>\n",
" <td>1.132862</td>\n",
" <td>0.904382</td>\n",
" <td>0.902726</td>\n",
" <td>0.489270</td>\n",
" <td>2.216163</td>\n",
" <td>0.446215</td>\n",
" <td>5.442565</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>0.0</td>\n",
" <td>-0.633165</td>\n",
" <td>0.462151</td>\n",
" <td>4.095305</td>\n",
" <td>0.390438</td>\n",
" <td>2.608575</td>\n",
" <td>0.386454</td>\n",
" <td>2.347420</td>\n",
" <td>0.417266</td>\n",
" <td>4.750743</td>\n",
" <td>...</td>\n",
" <td>0.552301</td>\n",
" <td>1.881249</td>\n",
" <td>0.339207</td>\n",
" <td>2.065252</td>\n",
" <td>0.689243</td>\n",
" <td>1.890104</td>\n",
" <td>0.515021</td>\n",
" <td>2.710280</td>\n",
" <td>0.509960</td>\n",
" <td>6.434172</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>0.0</td>\n",
" <td>-0.825945</td>\n",
" <td>0.462151</td>\n",
" <td>4.043223</td>\n",
" <td>0.458167</td>\n",
" <td>1.391013</td>\n",
" <td>0.310757</td>\n",
" <td>2.094754</td>\n",
" <td>0.446043</td>\n",
" <td>2.557230</td>\n",
" <td>...</td>\n",
" <td>0.635983</td>\n",
" <td>1.121247</td>\n",
" <td>0.321586</td>\n",
" <td>1.381301</td>\n",
" <td>0.860558</td>\n",
" <td>0.967202</td>\n",
" <td>0.463519</td>\n",
" <td>2.473658</td>\n",
" <td>0.482072</td>\n",
" <td>5.942113</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>0.0</td>\n",
" <td>-0.765453</td>\n",
" <td>0.490040</td>\n",
" <td>4.168394</td>\n",
" <td>0.350598</td>\n",
" <td>2.477957</td>\n",
" <td>0.274900</td>\n",
" <td>2.169855</td>\n",
" <td>0.431655</td>\n",
" <td>3.251412</td>\n",
" <td>...</td>\n",
" <td>0.648536</td>\n",
" <td>1.668354</td>\n",
" <td>0.295154</td>\n",
" <td>2.171757</td>\n",
" <td>0.896414</td>\n",
" <td>1.458781</td>\n",
" <td>0.484979</td>\n",
" <td>3.340949</td>\n",
" <td>0.609562</td>\n",
" <td>6.611230</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>0.0</td>\n",
" <td>-0.694736</td>\n",
" <td>0.430279</td>\n",
" <td>4.729824</td>\n",
" <td>0.410359</td>\n",
" <td>2.224378</td>\n",
" <td>0.346614</td>\n",
" <td>2.220469</td>\n",
" <td>0.374101</td>\n",
" <td>4.358470</td>\n",
" <td>...</td>\n",
" <td>0.543933</td>\n",
" <td>1.723572</td>\n",
" <td>0.312775</td>\n",
" <td>1.996152</td>\n",
" <td>0.721116</td>\n",
" <td>2.013384</td>\n",
" <td>0.506438</td>\n",
" <td>2.891830</td>\n",
" <td>0.549801</td>\n",
" <td>5.991789</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>0.0</td>\n",
" <td>-0.796486</td>\n",
" <td>0.470120</td>\n",
" <td>3.691524</td>\n",
" <td>0.422311</td>\n",
" <td>1.825893</td>\n",
" <td>0.346614</td>\n",
" <td>2.002063</td>\n",
" <td>0.460432</td>\n",
" <td>2.502087</td>\n",
" <td>...</td>\n",
" <td>0.573222</td>\n",
" <td>1.098202</td>\n",
" <td>0.339207</td>\n",
" <td>1.274703</td>\n",
" <td>0.880478</td>\n",
" <td>1.087231</td>\n",
" <td>0.484979</td>\n",
" <td>2.366961</td>\n",
" <td>0.549801</td>\n",
" <td>6.221677</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>0.0</td>\n",
" <td>-0.563612</td>\n",
" <td>0.442231</td>\n",
" <td>6.239928</td>\n",
" <td>0.366534</td>\n",
" <td>3.805351</td>\n",
" <td>0.322709</td>\n",
" <td>2.562287</td>\n",
" <td>0.338129</td>\n",
" <td>3.864677</td>\n",
" <td>...</td>\n",
" <td>0.598326</td>\n",
" <td>1.964620</td>\n",
" <td>0.356828</td>\n",
" <td>2.599439</td>\n",
" <td>0.637450</td>\n",
" <td>3.154437</td>\n",
" <td>0.446352</td>\n",
" <td>3.687547</td>\n",
" <td>0.521912</td>\n",
" <td>5.717197</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>0.0</td>\n",
" <td>-0.595284</td>\n",
" <td>0.462151</td>\n",
" <td>3.486662</td>\n",
" <td>0.402390</td>\n",
" <td>3.091421</td>\n",
" <td>0.378486</td>\n",
" <td>2.454833</td>\n",
" <td>0.410072</td>\n",
" <td>4.574527</td>\n",
" <td>...</td>\n",
" <td>0.560669</td>\n",
" <td>1.761695</td>\n",
" <td>0.361233</td>\n",
" <td>1.839096</td>\n",
" <td>0.725100</td>\n",
" <td>1.599152</td>\n",
" <td>0.515021</td>\n",
" <td>2.575544</td>\n",
" <td>0.541833</td>\n",
" <td>6.343386</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>0.0</td>\n",
" <td>-0.830101</td>\n",
" <td>0.482072</td>\n",
" <td>3.641274</td>\n",
" <td>0.462151</td>\n",
" <td>1.672260</td>\n",
" <td>0.346614</td>\n",
" <td>1.838456</td>\n",
" <td>0.446043</td>\n",
" <td>2.300420</td>\n",
" <td>...</td>\n",
" <td>0.589958</td>\n",
" <td>1.015749</td>\n",
" <td>0.339207</td>\n",
" <td>1.109085</td>\n",
" <td>0.908367</td>\n",
" <td>0.995837</td>\n",
" <td>0.497854</td>\n",
" <td>2.120533</td>\n",
" <td>0.533865</td>\n",
" <td>5.815267</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>0.0</td>\n",
" <td>-0.633581</td>\n",
" <td>0.454183</td>\n",
" <td>6.084268</td>\n",
" <td>0.370518</td>\n",
" <td>3.521887</td>\n",
" <td>0.306773</td>\n",
" <td>2.525744</td>\n",
" <td>0.402878</td>\n",
" <td>4.694393</td>\n",
" <td>...</td>\n",
" <td>0.598326</td>\n",
" <td>1.638425</td>\n",
" <td>0.277533</td>\n",
" <td>2.251855</td>\n",
" <td>0.681275</td>\n",
" <td>2.098960</td>\n",
" <td>0.476395</td>\n",
" <td>3.739922</td>\n",
" <td>0.597610</td>\n",
" <td>7.771857</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>0.0</td>\n",
" <td>-0.728178</td>\n",
" <td>0.517928</td>\n",
" <td>4.606803</td>\n",
" <td>0.438247</td>\n",
" <td>1.530739</td>\n",
" <td>0.346614</td>\n",
" <td>2.086427</td>\n",
" <td>0.417266</td>\n",
" <td>3.006987</td>\n",
" <td>...</td>\n",
" <td>0.615063</td>\n",
" <td>1.351451</td>\n",
" <td>0.317181</td>\n",
" <td>1.484712</td>\n",
" <td>0.820717</td>\n",
" <td>1.490530</td>\n",
" <td>0.510730</td>\n",
" <td>2.648191</td>\n",
" <td>0.521912</td>\n",
" <td>6.403069</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>0.0</td>\n",
" <td>-0.754357</td>\n",
" <td>0.470120</td>\n",
" <td>4.370421</td>\n",
" <td>0.410359</td>\n",
" <td>1.496645</td>\n",
" <td>0.306773</td>\n",
" <td>2.238231</td>\n",
" <td>0.446043</td>\n",
" <td>2.737090</td>\n",
" <td>...</td>\n",
" <td>0.648536</td>\n",
" <td>1.323769</td>\n",
" <td>0.308370</td>\n",
" <td>1.510992</td>\n",
" <td>0.792829</td>\n",
" <td>1.328082</td>\n",
" <td>0.476395</td>\n",
" <td>2.770926</td>\n",
" <td>0.525896</td>\n",
" <td>6.208611</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>0.0</td>\n",
" <td>-0.804667</td>\n",
" <td>0.513944</td>\n",
" <td>4.156592</td>\n",
" <td>0.382470</td>\n",
" <td>1.887749</td>\n",
" <td>0.290837</td>\n",
" <td>2.125731</td>\n",
" <td>0.424460</td>\n",
" <td>2.785066</td>\n",
" <td>...</td>\n",
" <td>0.635983</td>\n",
" <td>1.336101</td>\n",
" <td>0.321586</td>\n",
" <td>1.658069</td>\n",
" <td>0.884462</td>\n",
" <td>1.161961</td>\n",
" <td>0.450644</td>\n",
" <td>2.904789</td>\n",
" <td>0.561753</td>\n",
" <td>6.662769</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>0.0</td>\n",
" <td>-0.606511</td>\n",
" <td>0.474104</td>\n",
" <td>4.477191</td>\n",
" <td>0.346614</td>\n",
" <td>2.381834</td>\n",
" <td>0.342629</td>\n",
" <td>2.423413</td>\n",
" <td>0.410072</td>\n",
" <td>3.390977</td>\n",
" <td>...</td>\n",
" <td>0.581590</td>\n",
" <td>1.428208</td>\n",
" <td>0.281938</td>\n",
" <td>1.790007</td>\n",
" <td>0.776892</td>\n",
" <td>1.540799</td>\n",
" <td>0.476395</td>\n",
" <td>3.001516</td>\n",
" <td>0.581673</td>\n",
" <td>6.805725</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>0.0</td>\n",
" <td>-0.789298</td>\n",
" <td>0.462151</td>\n",
" <td>4.138176</td>\n",
" <td>0.454183</td>\n",
" <td>1.384584</td>\n",
" <td>0.306773</td>\n",
" <td>2.140102</td>\n",
" <td>0.446043</td>\n",
" <td>2.624067</td>\n",
" <td>...</td>\n",
" <td>0.610879</td>\n",
" <td>1.116832</td>\n",
" <td>0.321586</td>\n",
" <td>1.366513</td>\n",
" <td>0.824701</td>\n",
" <td>1.023881</td>\n",
" <td>0.484979</td>\n",
" <td>2.474837</td>\n",
" <td>0.490040</td>\n",
" <td>5.975032</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>0.0</td>\n",
" <td>-0.810367</td>\n",
" <td>0.466135</td>\n",
" <td>3.631020</td>\n",
" <td>0.501992</td>\n",
" <td>1.207386</td>\n",
" <td>0.298805</td>\n",
" <td>1.905873</td>\n",
" <td>0.417266</td>\n",
" <td>2.769899</td>\n",
" <td>...</td>\n",
" <td>0.631799</td>\n",
" <td>1.264538</td>\n",
" <td>0.303965</td>\n",
" <td>1.377810</td>\n",
" <td>0.900398</td>\n",
" <td>1.116163</td>\n",
" <td>0.454936</td>\n",
" <td>2.499903</td>\n",
" <td>0.430279</td>\n",
" <td>5.815993</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>0.0</td>\n",
" <td>-0.666556</td>\n",
" <td>0.482072</td>\n",
" <td>3.243634</td>\n",
" <td>0.406375</td>\n",
" <td>3.022889</td>\n",
" <td>0.390438</td>\n",
" <td>2.374978</td>\n",
" <td>0.438849</td>\n",
" <td>4.765417</td>\n",
" <td>...</td>\n",
" <td>0.535565</td>\n",
" <td>1.449803</td>\n",
" <td>0.343612</td>\n",
" <td>1.829778</td>\n",
" <td>0.709163</td>\n",
" <td>1.651844</td>\n",
" <td>0.493562</td>\n",
" <td>2.730994</td>\n",
" <td>0.541833</td>\n",
" <td>6.370669</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>0.0</td>\n",
" <td>-0.804509</td>\n",
" <td>0.509960</td>\n",
" <td>4.142696</td>\n",
" <td>0.418327</td>\n",
" <td>1.678219</td>\n",
" <td>0.326693</td>\n",
" <td>2.154145</td>\n",
" <td>0.438849</td>\n",
" <td>2.877320</td>\n",
" <td>...</td>\n",
" <td>0.602510</td>\n",
" <td>1.159750</td>\n",
" <td>0.317181</td>\n",
" <td>1.342715</td>\n",
" <td>0.816733</td>\n",
" <td>1.106455</td>\n",
" <td>0.502146</td>\n",
" <td>2.570838</td>\n",
" <td>0.573705</td>\n",
" <td>6.208446</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>0.0</td>\n",
" <td>-0.809079</td>\n",
" <td>0.458167</td>\n",
" <td>4.017876</td>\n",
" <td>0.450199</td>\n",
" <td>1.709186</td>\n",
" <td>0.310757</td>\n",
" <td>2.010873</td>\n",
" <td>0.446043</td>\n",
" <td>2.451942</td>\n",
" <td>...</td>\n",
" <td>0.598326</td>\n",
" <td>1.201916</td>\n",
" <td>0.321586</td>\n",
" <td>1.413701</td>\n",
" <td>0.912351</td>\n",
" <td>1.082832</td>\n",
" <td>0.476395</td>\n",
" <td>2.618871</td>\n",
" <td>0.525896</td>\n",
" <td>5.953091</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>36 rows × 20000 columns</p>\n",
"</div>"
],
"text/plain": [
" 0 1 2 3 4 5 6 \\\n",
"0 0.0 -0.662585 0.533865 4.506416 0.350598 2.280469 0.310757 \n",
"1 0.0 -0.834983 0.474104 3.905051 0.446215 1.465727 0.334661 \n",
"2 0.0 -0.813595 0.470120 3.868289 0.394422 1.918380 0.322709 \n",
"3 0.0 -0.616116 0.470120 3.746451 0.406375 2.772573 0.358566 \n",
"4 0.0 -0.820120 0.505976 3.713560 0.422311 1.642876 0.374502 \n",
"5 0.0 -0.748740 0.454183 4.622028 0.442231 1.760631 0.266932 \n",
"6 0.0 -0.558466 0.434263 4.321628 0.426295 3.035904 0.414343 \n",
"7 0.0 -0.796453 0.474104 3.676568 0.466135 1.781578 0.358566 \n",
"8 0.0 -0.820684 0.466135 3.947555 0.442231 1.609111 0.310757 \n",
"9 0.0 -0.661786 0.494024 4.292712 0.418327 2.737910 0.374502 \n",
"10 0.0 -0.815107 0.458167 4.029395 0.478088 1.351843 0.310757 \n",
"11 0.0 -0.808278 0.474104 4.014507 0.374502 1.963756 0.330677 \n",
"12 0.0 -0.556346 0.418327 4.390847 0.390438 2.777158 0.398406 \n",
"13 0.0 -0.816895 0.470120 4.052507 0.430279 1.424464 0.318725 \n",
"14 0.0 -0.556978 0.466135 5.312715 0.478088 2.341451 0.274900 \n",
"15 0.0 -0.490627 0.474104 5.388538 0.418327 3.127623 0.402390 \n",
"16 0.0 -0.809063 0.430279 4.406628 0.482072 1.479293 0.258964 \n",
"17 0.0 -0.813561 0.458167 3.604482 0.565737 1.488724 0.314741 \n",
"18 0.0 -0.633165 0.462151 4.095305 0.390438 2.608575 0.386454 \n",
"19 0.0 -0.825945 0.462151 4.043223 0.458167 1.391013 0.310757 \n",
"20 0.0 -0.765453 0.490040 4.168394 0.350598 2.477957 0.274900 \n",
"21 0.0 -0.694736 0.430279 4.729824 0.410359 2.224378 0.346614 \n",
"22 0.0 -0.796486 0.470120 3.691524 0.422311 1.825893 0.346614 \n",
"23 0.0 -0.563612 0.442231 6.239928 0.366534 3.805351 0.322709 \n",
"24 0.0 -0.595284 0.462151 3.486662 0.402390 3.091421 0.378486 \n",
"25 0.0 -0.830101 0.482072 3.641274 0.462151 1.672260 0.346614 \n",
"26 0.0 -0.633581 0.454183 6.084268 0.370518 3.521887 0.306773 \n",
"27 0.0 -0.728178 0.517928 4.606803 0.438247 1.530739 0.346614 \n",
"28 0.0 -0.754357 0.470120 4.370421 0.410359 1.496645 0.306773 \n",
"29 0.0 -0.804667 0.513944 4.156592 0.382470 1.887749 0.290837 \n",
"30 0.0 -0.606511 0.474104 4.477191 0.346614 2.381834 0.342629 \n",
"31 0.0 -0.789298 0.462151 4.138176 0.454183 1.384584 0.306773 \n",
"32 0.0 -0.810367 0.466135 3.631020 0.501992 1.207386 0.298805 \n",
"33 0.0 -0.666556 0.482072 3.243634 0.406375 3.022889 0.390438 \n",
"34 0.0 -0.804509 0.509960 4.142696 0.418327 1.678219 0.326693 \n",
"35 0.0 -0.809079 0.458167 4.017876 0.450199 1.709186 0.310757 \n",
"\n",
" 7 8 9 ... 19990 19991 19992 19993 \\\n",
"0 2.310049 0.402878 3.297966 ... 0.594142 1.422508 0.334802 1.895313 \n",
"1 2.005869 0.453237 2.566730 ... 0.615063 1.143880 0.343612 1.261247 \n",
"2 2.060907 0.438849 2.937553 ... 0.577406 1.151614 0.348018 1.371079 \n",
"3 2.320571 0.431655 4.492511 ... 0.560669 1.487112 0.356828 1.727759 \n",
"4 1.967128 0.460432 2.569098 ... 0.556485 1.084194 0.361233 1.148842 \n",
"5 2.202698 0.431655 3.519801 ... 0.581590 1.262858 0.295154 1.464865 \n",
"6 2.377295 0.489209 5.273605 ... 0.548117 1.966048 0.400881 1.496356 \n",
"7 1.811635 0.467626 1.964182 ... 0.606695 1.134304 0.365639 1.130087 \n",
"8 1.931943 0.431655 2.578725 ... 0.589958 1.234510 0.325991 1.465524 \n",
"9 2.506648 0.446043 4.923174 ... 0.569038 1.685331 0.356828 2.024033 \n",
"10 2.050373 0.438849 2.575331 ... 0.656904 1.294321 0.321586 1.529864 \n",
"11 2.054807 0.431655 3.010676 ... 0.569038 1.424237 0.339207 1.697885 \n",
"12 2.348132 0.417266 4.579191 ... 0.539749 1.814791 0.343612 2.332455 \n",
"13 2.144803 0.417266 2.755383 ... 0.610879 1.143937 0.325991 1.347726 \n",
"14 2.434659 0.395683 4.150170 ... 0.619247 1.363750 0.299559 1.712904 \n",
"15 2.399798 0.489209 5.310913 ... 0.569038 2.082817 0.361233 2.583106 \n",
"16 2.194906 0.402878 2.888736 ... 0.690377 1.377562 0.268722 1.716758 \n",
"17 1.851064 0.424460 2.566276 ... 0.623431 1.057368 0.299559 1.132862 \n",
"18 2.347420 0.417266 4.750743 ... 0.552301 1.881249 0.339207 2.065252 \n",
"19 2.094754 0.446043 2.557230 ... 0.635983 1.121247 0.321586 1.381301 \n",
"20 2.169855 0.431655 3.251412 ... 0.648536 1.668354 0.295154 2.171757 \n",
"21 2.220469 0.374101 4.358470 ... 0.543933 1.723572 0.312775 1.996152 \n",
"22 2.002063 0.460432 2.502087 ... 0.573222 1.098202 0.339207 1.274703 \n",
"23 2.562287 0.338129 3.864677 ... 0.598326 1.964620 0.356828 2.599439 \n",
"24 2.454833 0.410072 4.574527 ... 0.560669 1.761695 0.361233 1.839096 \n",
"25 1.838456 0.446043 2.300420 ... 0.589958 1.015749 0.339207 1.109085 \n",
"26 2.525744 0.402878 4.694393 ... 0.598326 1.638425 0.277533 2.251855 \n",
"27 2.086427 0.417266 3.006987 ... 0.615063 1.351451 0.317181 1.484712 \n",
"28 2.238231 0.446043 2.737090 ... 0.648536 1.323769 0.308370 1.510992 \n",
"29 2.125731 0.424460 2.785066 ... 0.635983 1.336101 0.321586 1.658069 \n",
"30 2.423413 0.410072 3.390977 ... 0.581590 1.428208 0.281938 1.790007 \n",
"31 2.140102 0.446043 2.624067 ... 0.610879 1.116832 0.321586 1.366513 \n",
"32 1.905873 0.417266 2.769899 ... 0.631799 1.264538 0.303965 1.377810 \n",
"33 2.374978 0.438849 4.765417 ... 0.535565 1.449803 0.343612 1.829778 \n",
"34 2.154145 0.438849 2.877320 ... 0.602510 1.159750 0.317181 1.342715 \n",
"35 2.010873 0.446043 2.451942 ... 0.598326 1.201916 0.321586 1.413701 \n",
"\n",
" 19994 19995 19996 19997 19998 19999 \n",
"0 0.840637 1.231761 0.480687 2.977145 0.585657 6.873190 \n",
"1 0.880478 0.898411 0.459227 2.407316 0.501992 5.984628 \n",
"2 0.908367 1.057661 0.497854 2.623211 0.581673 6.077527 \n",
"3 0.760956 1.630243 0.484979 2.533137 0.533865 6.414188 \n",
"4 0.900398 0.931728 0.506438 2.193146 0.573705 5.996089 \n",
"5 0.796813 1.494757 0.502146 2.616175 0.454183 6.144483 \n",
"6 0.693227 1.831129 0.515021 2.858087 0.557769 6.162225 \n",
"7 0.864542 1.079545 0.497854 2.204010 0.557769 5.588720 \n",
"8 0.904382 1.010743 0.493562 2.620455 0.517928 5.860975 \n",
"9 0.705179 1.715242 0.484979 3.078876 0.521912 6.767816 \n",
"10 0.848606 1.063852 0.484979 2.627045 0.458167 5.934666 \n",
"11 0.900398 1.216403 0.510730 2.908560 0.553785 6.299387 \n",
"12 0.661355 1.998068 0.497854 2.757892 0.541833 6.147580 \n",
"13 0.852590 0.970086 0.489270 2.442560 0.525896 6.132132 \n",
"14 0.741036 1.914472 0.502146 3.026250 0.458167 6.890395 \n",
"15 0.625498 2.376214 0.484979 3.028562 0.501992 6.197819 \n",
"16 0.860558 1.148379 0.446352 2.964938 0.390438 6.076684 \n",
"17 0.904382 0.902726 0.489270 2.216163 0.446215 5.442565 \n",
"18 0.689243 1.890104 0.515021 2.710280 0.509960 6.434172 \n",
"19 0.860558 0.967202 0.463519 2.473658 0.482072 5.942113 \n",
"20 0.896414 1.458781 0.484979 3.340949 0.609562 6.611230 \n",
"21 0.721116 2.013384 0.506438 2.891830 0.549801 5.991789 \n",
"22 0.880478 1.087231 0.484979 2.366961 0.549801 6.221677 \n",
"23 0.637450 3.154437 0.446352 3.687547 0.521912 5.717197 \n",
"24 0.725100 1.599152 0.515021 2.575544 0.541833 6.343386 \n",
"25 0.908367 0.995837 0.497854 2.120533 0.533865 5.815267 \n",
"26 0.681275 2.098960 0.476395 3.739922 0.597610 7.771857 \n",
"27 0.820717 1.490530 0.510730 2.648191 0.521912 6.403069 \n",
"28 0.792829 1.328082 0.476395 2.770926 0.525896 6.208611 \n",
"29 0.884462 1.161961 0.450644 2.904789 0.561753 6.662769 \n",
"30 0.776892 1.540799 0.476395 3.001516 0.581673 6.805725 \n",
"31 0.824701 1.023881 0.484979 2.474837 0.490040 5.975032 \n",
"32 0.900398 1.116163 0.454936 2.499903 0.430279 5.815993 \n",
"33 0.709163 1.651844 0.493562 2.730994 0.541833 6.370669 \n",
"34 0.816733 1.106455 0.502146 2.570838 0.573705 6.208446 \n",
"35 0.912351 1.082832 0.476395 2.618871 0.525896 5.953091 \n",
"\n",
"[36 rows x 20000 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rocket = Rocket(random_state=1)\n",
"trans = rocket.fit(arrow_train_X, arrow_train_y)\n",
"res = trans.transform(arrow_train_X, arrow_train_y)\n",
"res"
]
},
{
"cell_type": "markdown",
"id": "714eb9a8",
"metadata": {},
"source": [
"## カーネルの作り方"
]
},
{
"cell_type": "markdown",
"id": "d11e1136",
"metadata": {},
"source": [
"- kernels生成部分\n",
"https://github.com/sktime/sktime/blob/v0.13.4/sktime/transformations/panel/rocket/_rocket.py#L116-L189"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "8b0f6492",
"metadata": {},
"outputs": [],
"source": [
"from sktime.datasets import load_basic_motions\n",
"motions_train_X, motions_train_y = load_basic_motions(\n",
" split=\"train\", return_type=\"numpy3d\"\n",
")\n",
"motions_test_X, motions_test_y = load_basic_motions(split=\"test\", return_type=\"numpy3d\")"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "7b43b2e9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(データ数, カラム数, 系列の長さ) = (40, 6, 100)\n"
]
}
],
"source": [
"print('(データ数, カラム数, 系列の長さ) =', motions_train_X.shape)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "022a16f3",
"metadata": {},
"outputs": [],
"source": [
"random_kernels = Rocket(random_state=1).fit(motions_train_X, motions_test_X)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "6b264eb1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([ 0.34453043, -0.43206528, -0.11612161, ..., 1.0983984 ,\n",
" -0.40460908, 0.59056276], dtype=float32),\n",
" array([ 9, 7, 7, ..., 9, 7, 11]),\n",
" array([-0.06980679, -0.28761828, -0.1628849 , ..., -0.513513 ,\n",
" 0.616098 , 0.34124586], dtype=float32),\n",
" array([ 2, 9, 2, ..., 1, 11, 2]),\n",
" array([ 8, 0, 6, ..., 4, 33, 10]),\n",
" array([2, 2, 2, ..., 6, 4, 6]),\n",
" array([4, 5, 0, ..., 1, 5, 2]))"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# ランダム生成したカーネル\n",
"random_kernels.kernels"
]
},
{
"cell_type": "markdown",
"id": "a1b9043e",
"metadata": {},
"source": [
"```.py\n",
"def _generate_kernels(n_timepoints, num_kernels, n_columns, seed):\n",
"\n",
" #= 略 =#\n",
" \n",
" return (\n",
" weights, # 標準正規分布からサンプリング\n",
" lengths, # { 7, 9, 11 } から等確率でサンプリング\n",
" biases, # (-1, 1)の一様分布からサンプリング\n",
" dilations, # 指数分布からサンプリング\n",
" paddings, # ((kernel_length - 1) * dilation) // 2 if np.random.randint(2) == 1 else 0\n",
" num_channel_indices, # 特徴量が複数の場合、各カーネル毎に特徴量をいくつ使うのかを制御. 指数関数からのサンプリングなので特徴量は多くても15程度に収まるはず\n",
" channel_indices, # どの特徴量を使うかを制御。 カラム数からnum_channel_indices分を等確率でサンプリング\n",
" )\n",
"```\n",
"\n",
"特徴マップ作成後にCNNでいうプーリング層がはいる。rocketではグローバルマックスプーリングと正の割合(ppv)を使用する。\n",
"\n",
"```.py\n",
"def _apply_kernel_univariate\n",
"def _apply_kernel_multivariate\n",
"\n",
"return np.float32(_ppv / output_length), np.float32(_max)\n",
"```\n",
"\n",
"特徴変換の順番\n",
"1. 畳み込みカーネルをランダムに生成\n",
"1. 入力にカーネルを畳み込む\n",
"1. 特徴マップからgapとppvを計算する\n",
"1. 各カーネル毎にgapとppvが特徴量として出力される( defaultでnum_kernels=10_000なので, 出力は20_000 )"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "d71bb9f7",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"(array([3552., 0., 2091., 0., 1459., 0., 1172., 0., 936.,\n",
" 790.]),\n",
" array([1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5, 6. ]),\n",
" <BarContainer object of 10 artists>)"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# 各カーネルで使用する特徴量のカラム数\n",
"plt.hist(random_kernels.kernels[-2])"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "e4cb4a29",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([4356., 4388., 4366., 4395., 4337., 4377.]),\n",
" array([0. , 0.83333333, 1.66666667, 2.5 , 3.33333333,\n",
" 4.16666667, 5. ]),\n",
" <BarContainer object of 6 artists>)"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAD4CAYAAAAAczaOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAANkElEQVR4nO3db4hdd53H8ffHpP5BV1vtUEoSdgoGl7qwVULt0mVZWmxjFdMHKpVdDZIlTypUdsFt90nxT0GfWFdYhWLDRlesRV1aVLaGtiLC2jqxf7TNdjvrH5pQTTRttYguqd99ML/IqJPOTDK5t9Pv+wXDnPM75975HZK853DuuTepKiRJPbxg2hOQJE2O0ZekRoy+JDVi9CWpEaMvSY1snPYEns3ZZ59ds7Oz056GJK0r+/fv/1lVzSy17Tkd/dnZWebm5qY9DUlaV5L8+ETbvLwjSY0YfUlqxOhLUiNGX5IaMfqS1IjRl6RGjL4kNWL0JakRoy9JjTyn35Gr3zd77VenPYUV+dFH3jztKUyNf0Z6rjP6mhoDqWno/vfueR397n+40qny39Dzj9f0JakRoy9JjRh9SWrE6EtSI0Zfkhox+pLUiNGXpEaMviQ1YvQlqRGjL0mNGH1JasToS1IjK45+kg1J7kvylbF+XpJ7kswn+UKSF47xF431+bF9dtFzXDfGH0ly+ZofjSTpWa3mTP8a4MCi9Y8CN1bVq4EngF1jfBfwxBi/cexHkvOBq4DXAtuBTybZcGrTlyStxoqin2Qz8Gbg02M9wCXAF8cue4Erx/KOsc7YfunYfwdwS1X9pqp+CMwDF67BMUiSVmilZ/ofB94P/Hasvwp4sqqOjfWDwKaxvAl4DGBsf2rs/7vxJR7zO0l2J5lLMnfkyJGVH4kkaVnLRj/JW4DDVbV/AvOhqm6qqm1VtW1mZmYSP1KS2ljJ/5x1MfDWJFcALwZeDvwLcGaSjeNsfjNwaOx/CNgCHEyyEXgF8PNF48ctfowkaQKWPdOvquuqanNVzbLwQuxdVfW3wN3A28ZuO4HbxvLtY52x/a6qqjF+1bi75zxgK3Dvmh2JJGlZp/J/5P4TcEuSDwP3ATeP8ZuBzyaZB46y8IuCqnooya3Aw8Ax4OqqeuYUfr4kaZVWFf2q+gbwjbH8A5a4+6aqfg28/QSPvwG4YbWTlCStDd+RK0mNGH1JasToS1IjRl+SGjH6ktSI0ZekRoy+JDVi9CWpEaMvSY0YfUlqxOhLUiNGX5IaMfqS1IjRl6RGjL4kNWL0JakRoy9JjRh9SWrE6EtSI0Zfkhox+pLUiNGXpEaMviQ1YvQlqRGjL0mNGH1JasToS1IjRl+SGjH6ktSI0ZekRoy+JDVi9CWpEaMvSY0YfUlqxOhLUiNGX5IaMfqS1IjRl6RGlo1+khcnuTfJA0keSvKBMX5eknuSzCf5QpIXjvEXjfX5sX120XNdN8YfSXL5aTsqSdKSVnKm/xvgkqr6C+ACYHuSi4CPAjdW1auBJ4BdY/9dwBNj/MaxH0nOB64CXgtsBz6ZZMMaHoskaRnLRr8WPD1WzxhfBVwCfHGM7wWuHMs7xjpj+6VJMsZvqarfVNUPgXngwrU4CEnSyqzomn6SDUnuBw4D+4D/BZ6sqmNjl4PAprG8CXgMYGx/CnjV4vElHrP4Z+1OMpdk7siRI6s+IEnSia0o+lX1TFVdAGxm4ez8z07XhKrqpqraVlXbZmZmTtePkaSWVnX3TlU9CdwN/CVwZpKNY9Nm4NBYPgRsARjbXwH8fPH4Eo+RJE3ASu7emUly5lh+CfBG4AAL8X/b2G0ncNtYvn2sM7bfVVU1xq8ad/ecB2wF7l2j45AkrcDG5XfhXGDvuNPmBcCtVfWVJA8DtyT5MHAfcPPY/2bgs0nmgaMs3LFDVT2U5FbgYeAYcHVVPbO2hyNJejbLRr+qHgRet8T4D1ji7puq+jXw9hM81w3ADaufpiRpLfiOXElqxOhLUiNGX5IaMfqS1IjRl6RGjL4kNWL0JakRoy9JjRh9SWrE6EtSI0Zfkhox+pLUiNGXpEaMviQ1YvQlqRGjL0mNGH1JasToS1IjRl+SGjH6ktSI0ZekRoy+JDVi9CWpEaMvSY0YfUlqxOhLUiNGX5IaMfqS1IjRl6RGjL4kNWL0JakRoy9JjRh9SWrE6EtSI0Zfkhox+pLUiNGXpEaMviQ1smz0k2xJcneSh5M8lOSaMf7KJPuSPDq+nzXGk+QTSeaTPJjk9Yuea+fY/9EkO0/fYUmSlrKSM/1jwD9W1fnARcDVSc4HrgXurKqtwJ1jHeBNwNbxtRv4FCz8kgCuB94AXAhcf/wXhSRpMpaNflU9XlXfHcu/BA4Am4AdwN6x217gyrG8A/hMLfg2cGaSc4HLgX1VdbSqngD2AdvX8mAkSc9uVdf0k8wCrwPuAc6pqsfHpp8A54zlTcBjix52cIydaFySNCErjn6SlwFfAt5XVb9YvK2qCqi1mFCS3UnmkswdOXJkLZ5SkjSsKPpJzmAh+J+rqi+P4Z+OyzaM74fH+CFgy6KHbx5jJxr/PVV1U1Vtq6ptMzMzqzkWSdIyVnL3ToCbgQNV9bFFm24Hjt+BsxO4bdH4u8ddPBcBT43LQHcAlyU5a7yAe9kYkyRNyMYV7HMx8C7ge0nuH2P/DHwEuDXJLuDHwDvGtq8BVwDzwK+A9wBU1dEkHwK+M/b7YFUdXYuDkCStzLLRr6pvATnB5kuX2L+Aq0/wXHuAPauZoCRp7fiOXElqxOhLUiNGX5IaMfqS1IjRl6RGjL4kNWL0JakRoy9JjRh9SWrE6EtSI0Zfkhox+pLUiNGXpEaMviQ1YvQlqRGjL0mNGH1JasToS1IjRl+SGjH6ktSI0ZekRoy+JDVi9CWpEaMvSY0YfUlqxOhLUiNGX5IaMfqS1IjRl6RGjL4kNWL0JakRoy9JjRh9SWrE6EtSI0Zfkhox+pLUiNGXpEaMviQ1YvQlqZFlo59kT5LDSb6/aOyVSfYleXR8P2uMJ8knkswneTDJ6xc9ZufY/9EkO0/P4UiSns1KzvT/Ddj+B2PXAndW1VbgzrEO8CZg6/jaDXwKFn5JANcDbwAuBK4//otCkjQ5y0a/qr4JHP2D4R3A3rG8F7hy0fhnasG3gTOTnAtcDuyrqqNV9QSwjz/+RSJJOs1O9pr+OVX1+Fj+CXDOWN4EPLZov4Nj7ETjfyTJ7iRzSeaOHDlyktOTJC3llF/IraoCag3mcvz5bqqqbVW1bWZmZq2eVpLEyUf/p+OyDeP74TF+CNiyaL/NY+xE45KkCTrZ6N8OHL8DZydw26Lxd4+7eC4CnhqXge4ALkty1ngB97IxJkmaoI3L7ZDk88DfAGcnOcjCXTgfAW5Nsgv4MfCOsfvXgCuAeeBXwHsAqupokg8B3xn7fbCq/vDFYUnSabZs9KvqnSfYdOkS+xZw9QmeZw+wZ1WzkyStKd+RK0mNGH1JasToS1IjRl+SGjH6ktSI0ZekRoy+JDVi9CWpEaMvSY0YfUlqxOhLUiNGX5IaMfqS1IjRl6RGjL4kNWL0JakRoy9JjRh9SWrE6EtSI0Zfkhox+pLUiNGXpEaMviQ1YvQlqRGjL0mNGH1JasToS1IjRl+SGjH6ktSI0ZekRoy+JDVi9CWpEaMvSY0YfUlqxOhLUiNGX5IaMfqS1IjRl6RGJh79JNuTPJJkPsm1k/75ktTZRKOfZAPwr8CbgPOBdyY5f5JzkKTOJn2mfyEwX1U/qKr/A24Bdkx4DpLUVqpqcj8seRuwvar+fqy/C3hDVb130T67gd1j9TXAIyt46rOBn63xdNcLj70nj72nlR77n1bVzFIbNq7tfE5dVd0E3LSaxySZq6ptp2lKz2keu8fejcd+asc+6cs7h4Ati9Y3jzFJ0gRMOvrfAbYmOS/JC4GrgNsnPAdJamuil3eq6liS9wJ3ABuAPVX10Bo89aouBz3PeOw9eew9nfKxT/SFXEnSdPmOXElqxOhLUiPrPvpdP9YhyZ4kh5N8f9pzmbQkW5LcneThJA8luWbac5qUJC9Ocm+SB8axf2Dac5qkJBuS3JfkK9Oey6Ql+VGS7yW5P8ncST/Per6mPz7W4X+ANwIHWbg76J1V9fBUJzYBSf4aeBr4TFX9+bTnM0lJzgXOrarvJvkTYD9wZZM/9wAvraqnk5wBfAu4pqq+PeWpTUSSfwC2AS+vqrdMez6TlORHwLaqOqU3pq33M/22H+tQVd8Ejk57HtNQVY9X1XfH8i+BA8Cm6c5qMmrB02P1jPG1fs/cViHJZuDNwKenPZf1bL1HfxPw2KL1gzT5x68FSWaB1wH3THkqEzMucdwPHAb2VVWXY/848H7gt1Oex7QU8PUk+8fH1ZyU9R59NZbkZcCXgPdV1S+mPZ9JqapnquoCFt7RfmGS5/3lvSRvAQ5X1f5pz2WK/qqqXs/CpxRfPS7xrtp6j74f69DUuJ79JeBzVfXlac9nGqrqSeBuYPuUpzIJFwNvHde1bwEuSfLv053SZFXVofH9MPAfLFzeXrX1Hn0/1qGh8WLmzcCBqvrYtOczSUlmkpw5ll/Cwk0M/z3VSU1AVV1XVZurapaFf+d3VdXfTXlaE5PkpeOmBZK8FLgMOKk799Z19KvqGHD8Yx0OALeu0cc6POcl+TzwX8BrkhxMsmvac5qgi4F3sXC2d//4umLak5qQc4G7kzzIwknPvqpqd/tiQ+cA30ryAHAv8NWq+s+TeaJ1fcumJGl11vWZviRpdYy+JDVi9CWpEaMvSY0YfUlqxOhLUiNGX5Ia+X+ujYFqi1fHxgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# 各カーネルで使用するカラムの種類\n",
"plt.hist(random_kernels.kernels[-1], bins=6, rwidth=0.8)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "c3d01f27",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([6623., 1383., 583., 624., 382., 405.]),\n",
" array([ 0., 8., 16., 24., 32., 40., 48.]),\n",
" <BarContainer object of 6 artists>)"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# パディング\n",
"plt.hist(random_kernels.kernels[-3], bins=6, rwidth=0.8)"
]
},
{
"cell_type": "markdown",
"id": "d7e5ede2",
"metadata": {},
"source": [
"- 畳み込みに使用される特徴量の個数\n",
" - 指数分布からのサンプリングを見るにカラム数を増やしても多くても12くらいまでしか一度に畳み込まないことがわかる"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "821209cd",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'num_channel_indices')"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"num_kernels = 10000\n",
"n_columns = 20\n",
"\n",
"candidate_lengths = np.array((7, 9, 11), dtype=np.int32)\n",
"lengths = np.random.choice(candidate_lengths, num_kernels).astype(np.int32)\n",
"num_channel_indices = np.zeros(num_kernels, dtype=np.int32)\n",
"for i in range(num_kernels):\n",
" limit = min(n_columns, lengths[i])\n",
" num_channel_indices[i] = 2 ** np.random.uniform(0, np.log2(limit + 1))\n",
"\n",
"channel_indices = np.zeros(num_channel_indices.sum(), dtype=np.int32)\n",
"plt.hist(num_channel_indices)\n",
"plt.title(\"num_channel_indices\")"
]
},
{
"cell_type": "markdown",
"id": "1399e27a",
"metadata": {},
"source": [
"## 拡張 dilation"
]
},
{
"cell_type": "markdown",
"id": "add46075",
"metadata": {},
"source": [
"```.py\n",
"dilation = 2 ** np.random.uniform(\n",
" 0, np.log2((n_timepoints - 1) / (_length - 1))\n",
" )\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "8eb6f25e",
"metadata": {},
"outputs": [],
"source": [
"def f(n_input, kernel_length): \n",
" return 2 ** np.random.uniform(\n",
" 0, np.log2((n_input - 1) / (kernel_length - 1))\n",
" )"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "8f5835b0",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5, 1.0, 'dilation')"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"n_input = 200\n",
"kernel_length = 7\n",
"plt.hist([f(n_input, kernel_length) for _ in range(1000)])\n",
"plt.title(\"dilation\")"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "ccd5a11b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(array([493., 160., 98., 75., 53., 46., 23., 24., 11., 17.]),\n",
" array([ 1. , 4.1, 7.2, 10.3, 13.4, 16.5, 19.6, 22.7, 25.8, 28.9, 32. ]),\n",
" <BarContainer object of 10 artists>)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# ソースコードではnp.int32で変換している\n",
"dilation = [f(n_input, np.random.choice([7, 9, 11])) for _ in range(1000)]\n",
"plt.hist(np.int32(dilation))"
]
},
{
"cell_type": "markdown",
"id": "e841c466",
"metadata": {},
"source": [
"## 畳み込み部分の計算"
]
},
{
"cell_type": "markdown",
"id": "1b5b7254",
"metadata": {},
"source": [
"### _apply_kernels 解剖\n",
"\n",
"```_apply_kernels.py\n",
"for i in prange(n_instances):\n",
" for j in range(num_kernels):\n",
" \n",
" # 畳み込む特徴量の個数で場合分け\n",
" \n",
" if num_channel_indices[j] == 1:\n",
"\n",
" _X[i, a3:b3] = _apply_kernel_univariate(\n",
" X[i, channel_indices[a2]],\n",
" weights[a1:b1],\n",
" lengths[j],\n",
" biases[j],\n",
" dilations[j],\n",
" paddings[j],\n",
" )\n",
"\n",
" else:\n",
" \n",
" _weights = weights[a1:b1].reshape((num_channel_indices[j], lengths[j]))\n",
"\n",
" _X[i, a3:b3] = _apply_kernel_multivariate(\n",
" X[i],\n",
" _weights,\n",
" lengths[j],\n",
" biases[j],\n",
" dilations[j],\n",
" paddings[j],\n",
" num_channel_indices[j],\n",
" channel_indices[a2:b2],\n",
" )\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "09e491b6",
"metadata": {},
"source": [
"### _apply_kernel_univariate 解剖\n",
"\n",
"```_apply_kernel_univariate.py\n",
"def _apply_kernel_univariate(X, weights, length, bias, dilation, padding):\n",
" n_timepoints = len(X)\n",
"\n",
" output_length = (n_timepoints + (2 * padding)) - ((length - 1) * dilation)\n",
"\n",
" _ppv = 0\n",
" _max = np.NINF\n",
"\n",
" end = (n_timepoints + padding) - ((length - 1) * dilation)\n",
"\n",
" for i in range(-padding, end):\n",
"\n",
" _sum = bias\n",
"\n",
" index = i\n",
"\n",
" for j in range(length):\n",
"\n",
" # 畳み込み\n",
" if index > -1 and index < n_timepoints:\n",
" _sum = _sum + weights[j] * X[index]\n",
"\n",
" index = index + dilation\n",
"\n",
"\n",
" #= 以下プーリング =#\n",
" \n",
" # グローバルマックスプーリング\n",
" if _sum > _max:\n",
" _max = _sum\n",
" \n",
" # PPV 論文オリジナルのプーリング\n",
" if _sum > 0:\n",
" _ppv += 1\n",
"\n",
" return np.float32(_ppv / output_length), np.float32(_max)\n",
"\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "82d52a22",
"metadata": {},
"source": [
"### _apply_kernel_multivariate 解剖\n",
"\n",
"```_apply_kernel_multivariate.py\n",
"def _apply_kernel_multivariate(\n",
" X, weights, length, bias, dilation, padding, num_channel_indices, channel_indices\n",
"):\n",
" n_columns, n_timepoints = X.shape\n",
"\n",
" output_length = (n_timepoints + (2 * padding)) - ((length - 1) * dilation)\n",
"\n",
" _ppv = 0\n",
" _max = np.NINF\n",
"\n",
" end = (n_timepoints + padding) - ((length - 1) * dilation)\n",
"\n",
" for i in range(-padding, end):\n",
"\n",
" _sum = bias\n",
"\n",
" index = i\n",
"\n",
" for j in range(length):\n",
"\n",
"      # 畳み込み\n",
" if index > -1 and index < n_timepoints:\n",
" for k in range(num_channel_indices):\n",
" _sum = _sum + weights[k, j] * X[channel_indices[k], index]\n",
"\n",
" index = index + dilation\n",
"\n",
"\n",
" #= 以下プーリング =#\n",
" \n",
" # グローバルマックスプーリング\n",
" if _sum > _max:\n",
" _max = _sum\n",
" \n",
" # PPV 論文オリジナルのプーリング\n",
" if _sum > 0:\n",
" _ppv += 1\n",
"\n",
" return np.float32(_ppv / output_length), np.float32(_max)\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "64d4825f",
"metadata": {},
"source": [
"## いろいろな分類器を使ってみる\n",
"\n",
"- sklearnの分類器を適当に引っ張ってきた。論文だと線形分類モデルを使えっていうので、非線形のモデルも試してみた(天邪鬼)\n",
" - 線形分類であるロジスティク回帰とリッジ分類は8割とまぁまぁのスコア\n",
" - それ以外の非線形分類器は線形分類器よりはスコアが劣る\n",
" - ランダムフォレストとK−近傍法は非線形分類器の中ではよい方"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "b9659765",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'sklearn.linear_model._logistic.LogisticRegression'> : 0.8171428571428572\n",
"<class 'sklearn.linear_model._ridge.RidgeClassifierCV'> : 0.8057142857142857\n",
"<class 'sklearn.svm._classes.SVC'> : 0.49714285714285716\n",
"<class 'sklearn.tree._classes.DecisionTreeClassifier'> : 0.68\n",
"<class 'sklearn.ensemble._forest.RandomForestClassifier'> : 0.76\n",
"<class 'sklearn.neighbors._classification.KNeighborsClassifier'> : 0.7657142857142857\n"
]
}
],
"source": [
"random_state = 1\n",
"classsifers = [\n",
" LogisticRegression(random_state=random_state, max_iter=1000),\n",
" RidgeClassifierCV(alphas=np.logspace(-3, 3, 10)),\n",
" SVC(random_state=random_state),\n",
" DecisionTreeClassifier(random_state=random_state),\n",
" RandomForestClassifier(random_state=random_state),\n",
" KNeighborsClassifier(),\n",
"]\n",
"for classsifer in classsifers:\n",
" pipe = Rocket(random_state=random_state) * StandardScaler(with_mean=False) * classsifer\n",
" pipe.fit(arrow_train_X, arrow_train_y)\n",
" y_pred = pipe.predict(arrow_test_X)\n",
" print(pipe.classifier.__class__, ': ' ,accuracy_score(arrow_test_y, y_pred))"
]
},
{
"cell_type": "markdown",
"id": "9965a8ea",
"metadata": {},
"source": [
"## 144次元データ\n",
"\n",
"- 次元の呪いによってうまく特徴抽出ができない気がする\n",
" - 予想通り精度はあまりよくない"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "9418abbf",
"metadata": {},
"outputs": [],
"source": [
"import time\n",
"from sktime.classification.kernel_based import RocketClassifier"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "3f1623a8",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\users\\ryuma takahashi\\appdata\\local\\programs\\python\\python39\\lib\\site-packages\\sktime\\datasets\\_data_io.py:924: PerformanceWarning: DataFrame is highly fragmented. This is usually the result of calling `frame.insert` many times, which has poor performance. Consider using pd.concat instead. To get a de-fragmented frame, use `newframe = frame.copy()`\n",
" data[\"dim_\" + str(dim)] = instance_list[dim]\n"
]
}
],
"source": [
"from sktime.datasets import load_UCR_UEA_dataset\n",
"X_train, y_train = load_UCR_UEA_dataset(name=\"FaceDetection\", split=\"train\", return_type=\"numpy3d\")\n",
"X_test, y_test = load_UCR_UEA_dataset(name=\"FaceDetection\", split=\"test\", return_type=\"numpy3d\")"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "181273a2",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(3524, 144, 62)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_test.shape"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "27299de1",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(144, 62)"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X_test[0].shape"
]
},
{
"cell_type": "markdown",
"id": "957977ec",
"metadata": {},
"source": [
"10回計算して平均スコア取ろうと思ったけど途中でやめてしまった、、、 \n",
"まぁだいたい6割割くらいのスコアになるって思ってもいいだろう"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6e711cea",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"RocketClassifier: 10\n",
"accuracy_score: 0.6118047673098751 , time: 1139.1794885\n",
"accuracy_score: 0.6248581157775256 , time: 1233.3550027\n",
"accuracy_score: 0.604994324631101 , time: 1215.3330746000001\n",
"accuracy_score: 0.6166288308740068 , time: 1178.6787082\n",
"accuracy_score: 0.6069807037457434 , time: 1057.1332258000002\n",
"accuracy_score: 0.6200340522133939 , time: 1018.7272537999997\n"
]
}
],
"source": [
"N = 10\n",
"print('RocketClassifier: ', N)\n",
"scores = []\n",
"for _ in range(N):\n",
" start = time.perf_counter()\n",
" rocket = RocketClassifier()\n",
" rocket.fit(X_train, y_train)\n",
" y_pred = rocket.predict(X_test)\n",
" scores += [accuracy_score(y_test, y_pred)]\n",
" print('accuracy_score: ' , scores[-1], ', time: ', time.perf_counter() - start)\n",
"print('accuracy_score_avg: ', np.mean(scores))"
]
},
{
"cell_type": "markdown",
"id": "f492866a",
"metadata": {},
"source": [
"# 公式ユーザガイド"
]
},
{
"cell_type": "markdown",
"id": "b286636c",
"metadata": {},
"source": [
"## UCR_UEA データセット"
]
},
{
"cell_type": "code",
"execution_count": 60,
"id": "934b1c06",
"metadata": {},
"outputs": [],
"source": [
"# Imports used in this notebook\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"from sktime.datasets import (\n",
" load_arrow_head, # ArrowHead 時系列分類問題\n",
" load_basic_motions, # BasicMotions 時系列分類問題\n",
" load_japanese_vowels, # JapaneseVowels 時系列分類問題\n",
" load_plaid, # \n",
")"
]
},
{
"cell_type": "code",
"execution_count": 61,
"id": "d4b47b79",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(36, 1, 251) (36,) (175, 1, 251) (175,)\n"
]
},
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x22e7e078dc0>]"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Load all arrow head\n",
"arrow_X, arrow_y = load_arrow_head(return_type=\"numpy3d\")\n",
"# Load default train/test splits from sktime/datasets/data\n",
"arrow_train_X, arrow_train_y = load_arrow_head(split=\"train\", return_type=\"numpy3d\")\n",
"arrow_test_X, arrow_test_y = load_arrow_head(split=\"test\", return_type=\"numpy3d\")\n",
"print(arrow_train_X.shape, arrow_train_y.shape, arrow_test_X.shape, arrow_test_y.shape)\n",
"plt.title(\" First instance in ArrowHead data\")\n",
"plt.plot(arrow_train_X[0, 0])"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "29a3e9f0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" dim_0\n",
"instances timepoints \n",
"0 0 -1.963009\n",
" 1 -1.957825\n",
" 2 -1.956145\n",
" 3 -1.938289\n",
" 4 -1.896657\n"
]
}
],
"source": [
"# Load arrow head dataset, pandas multiindex format, also accepted by sktime classifiers\n",
"arrow_train_X, arrow_train_y = load_arrow_head(\n",
" split=\"train\", return_type=\"pd-multiindex\"\n",
")\n",
"arrow_test_X, arrow_test_y = load_arrow_head(split=\"test\", return_type=\"pd-multiindex\")\n",
"print(arrow_train_X.head())"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "dfeda6b0",
"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>dim_0</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0 -1.963009\n",
"1 -1.957825\n",
"2 -1.95614...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0 -1.774571\n",
"1 -1.774036\n",
"2 -1.77658...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0 -1.866021\n",
"1 -1.841991\n",
"2 -1.83502...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0 -2.073758\n",
"1 -2.073301\n",
"2 -2.04460...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0 -1.746255\n",
"1 -1.741263\n",
"2 -1.72274...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" dim_0\n",
"0 0 -1.963009\n",
"1 -1.957825\n",
"2 -1.95614...\n",
"1 0 -1.774571\n",
"1 -1.774036\n",
"2 -1.77658...\n",
"2 0 -1.866021\n",
"1 -1.841991\n",
"2 -1.83502...\n",
"3 0 -2.073758\n",
"1 -2.073301\n",
"2 -2.04460...\n",
"4 0 -1.746255\n",
"1 -1.741263\n",
"2 -1.72274..."
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Load arrow head dataset in nested pandas format, also accepted by sktime classifiers\n",
"arrow_train_X, arrow_train_y = load_arrow_head(split=\"train\", return_type=\"nested_univ\")\n",
"arrow_test_X, arrow_test_y = load_arrow_head(split=\"test\", return_type=\"nested_univ\")\n",
"arrow_train_X.iloc[:5]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "96bfd618",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(36, 251) (36,) (175, 251) (175,)\n"
]
}
],
"source": [
"# Load arrow head dataset in numpy2d format, also accepted by sktime classifiers\n",
"arrow_train_X, arrow_train_y = load_arrow_head(split=\"train\", return_type=\"numpy2d\")\n",
"arrow_test_X, arrow_test_y = load_arrow_head(split=\"test\", return_type=\"numpy2d\")\n",
"print(arrow_train_X.shape, arrow_train_y.shape, arrow_test_X.shape, arrow_test_y.shape)\n",
"\n",
"# CAUTION:\n",
"# while classifiers will interpret 2D numpy arrays as (instance, timepoint),\n",
"# and as a collection/panel of univariate time series\n",
"# all other sktime estimators interpret 2D numpy arrays as (timepoint, variable),\n",
"# i.e., a single, multivariate time series\n",
"# WARNING: this is also true for individual transformers, when outside a pipeline\n",
"#\n",
"# the reason for this ambiguity is ensuring sklearn compatibility\n",
"# in classification, numpy 2D is typically passed as (instance, timepoint) to sklearn\n",
"# in forecasting, numpy 2D is typically passed as (timepoint, variable) to sklearn"
]
},
{
"cell_type": "code",
"execution_count": 62,
"id": "940d0c70",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'numpy.ndarray'>\n",
"(40, 6, 100) (40,) (40, 6, 100) (40,)\n"
]
},
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x22e7e415a30>]"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# \"basic motions\" dataset\n",
"motions_X, motions_Y = load_basic_motions(return_type=\"numpy3d\")\n",
"motions_train_X, motions_train_y = load_basic_motions(\n",
" split=\"train\", return_type=\"numpy3d\"\n",
")\n",
"motions_test_X, motions_test_y = load_basic_motions(split=\"test\", return_type=\"numpy3d\")\n",
"print(type(motions_train_X))\n",
"print(\n",
" motions_train_X.shape,\n",
" motions_train_y.shape,\n",
" motions_test_X.shape,\n",
" motions_test_y.shape,\n",
")\n",
"plt.title(\" First and second dimensions of the first instance in BasicMotions data\")\n",
"plt.plot(motions_train_X[0][0])\n",
"plt.plot(motions_train_X[0][1])"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "47d1dcc9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# loads both train and test together\n",
"vowel_X, vowel_y = load_japanese_vowels()\n",
"print(type(vowel_X))\n",
"\n",
"plt.title(\" First two dimensions of two instances of Japanese vowels\")\n",
"plt.plot(vowel_X.iloc[0, 0])\n",
"plt.plot(vowel_X.iloc[1, 0])\n",
"plt.plot(vowel_X.iloc[0, 1])\n",
"plt.plot(vowel_X.iloc[1, 1])\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "1f7a17d8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAEICAYAAABGaK+TAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAB4pElEQVR4nO2dd5gcxbX2fzVx867CKucECiAhRM452gQb2ziBzTVgm+scsK+vL87w4YAjGBsbbGMbDDY554wCQihHFFhJu6vNcVLX90d1V1ePptEK7Q5Iqvd59tGZmpru6p7RW6ffc+qUkFJiYWFhYbH3IfJuD8DCwsLC4p3BEriFhYXFXgpL4BYWFhZ7KSyBW1hYWOylsARuYWFhsZfCEriFhYXFXgpL4BYBCCGWCyFOfLfH8V6CEOKzQoh6IUSnEGLIuz2ePYEQQgohprzb47DoH1gCf4/C/Y/W5ZJGpxCitRjnlVLOlFI+syfHEEJcI4T4Wz8N6V2FECIO/Bw4XUpZIaVsynt/gvtded/TRiHE1cb7b0uYQogK93MPF3hvoxDiVNe+VAiRM87zphDiz0KIaf13tQWvKzYQxy/2efZVWAJ/b2O2SxoVUsqa/jywULDf/64xHCgBlu+iX42UsgK4GPiuEOLMPh7/A0AKOE0IMWIXfV92z1ENnAr0AIuEELP6eC6LfQz2P/BeBiFEtRDiL0KIRiHEJiHEdzwizvd8870bIcQzQogfCSFeBLqBSQWOb3p91wgh7nTP1+HKK/OMvt8UQtS5760WQpziEte3gQ+7nuISt++nhBAr3b4bhBBXGMc5UQjxlhDiq0KIBiHENiHEp4z3S4UQP3Ovt00I8YIQotR970ghxEtCiFYhxBJT/nG91g3uOd8UQnws5J4mhRA3CCG2un83uG3TgNVut1YhxFO7+n6klC+jyL6vpHoJcBPwBvDxvnxASpmTUq6XUn4OeBa4JqyvEOLr7v3cKoT4dN575wghFgsh2oUQW4QQ5nGec/9tdb/Ho4QQk4UQTwkhmoQQO4QQtwshaozj7fR7cNsjQoirhRDr3c/eKYQYHHaevtwDCxdSSvv3HvwDJDClQPtfgHuBSmACsAa4zH3vGuBvRt8J7nFi7utngM3ATCAGxAscfyNwqnG8XuBsIAr8BHjFfe8AYAswyjjX5ELjcNvOASYDAjgBNYHMdd87EcgC3wfi7vm6gUHu+791xz7aHcfRQNJ93eT2jwCnua9rgXKgHTjAPcZIYGbIvf4+8AowzP3sS8APCt3DAp/V77vXdow79lPe7nt03xsPOMAM4KvAG2/zXVwKvFDgGJ8G6kOOfyZQj5pMyoG/m+Nx7/tB7r072O17fth1A1Pce5x079NzwA19+D180b2/Y9zP/h74R1/ur/3bBU+82wOwfyFfjPpRtwOt7t+vXPJKAzOMflcAz7j2NeyawL+/i/OapHEN8ITx3gygx7WnAA2oR/l43jEC4wg5zz3AF137RJQcYJJFA3CkSy49KDkp/xjfBP6a1/Yoyqstd+/bB4DSXYxlPXC28foMYGOhe1jgs977rUALsBL4Qt73GEbg3wFed+3RQA44JOS7uJTCBH4mkAk5/p+Aa43X03YxnhuAX/Tlut0+5wOL+/B7WIk7obmvRwIZ1KS3y/PYv/A/K6G8tzFXSlnj/n0BGIryUDcZfTah/vP3FVt2cwzbDbsbKBFCxKSU64Avoci6QQjxTyHEqLCDCCHOEkK8IoRoFiogezbqejw0SSmzeeeqcPuUoEg2H+OBi1z5pNU97rHASCllF/Bh4EpgmxDiQSHEgSHDG8XO9zT0WkIwVEo5SEo5XUr5qz5+5pPA7QBSyjqUHHLJbp53NNAc8t4ogt+3eY0IIY4QQjztynFtqHtlfifk9R/ufs91Qoh24G9e/138HsYD/zG+o5WoyWr4bl2pxU6wBL53YQfKcxlvtI0D6ly7Cygz3isUFOu38pNSyr9LKY91xyOB6wqdQwiRBO4GfgoMlyog+xBKctgVdqBknMkF3tuC8sBrjL9yKeW17vgelVKehvL4VgF/CDnHVna+p1v7MLZ3DCHE0cBU4FtCiO1CiO3AEcBHxe5lZFwAPB/y3jZgrPF6XN77fwfuA8ZKKatRWrz3nRT6nfzYbT9ISlmF0uz1d/g2v4ctwFl531OJO2nZcqh7AEvgexGklDngTuBHQohKIcR44CsoTwjgdeB4IcQ4IUQ18K2BGosQ4gAhxMkuOfeiZA7HfbsemCD8LJcESvtsBLJCiLOA0/tyHimlg5ICfi6EGCWEiLoBtSTqut8nhDjDbS9xA6JjXG/xPCFEOSrLo9MYXz7+AXxHCFErhBgKfBf/nvYHEu7YvL8oytN+HCVLzXH/ZgGlwFlvdzD3WicKIX6Nkp++F9L1TuBSIcQMIUQZ8H9571cCzVLKXiHE4cBHjfcaUfdrUl7/TqBNCDEa+Loxprf7PdyE+s2Od/vWCiHOe5vzWPQRlsD3Pvw3ytPeALyA8qL+BCClfBy4A5XRsAh4YADHkQSuRXnI21EBQG/C+Jf7b5MQ4jUpZQfwBRShtKCI4r7dONfXgKXAApRccB0QkVJuAc5DZb00ojy9r6N+1xHU5LbV/cwJwGdDjv9DYCHqvi0FXnPb+gvLUYTm/X0W+BDwaynlduPvTeCvhMsoRwkhOlGxkWeAKuAwKeXSQp2llA+jdO2ngHXuvyY+B3xfCNGBmrTuND7bDfwIeNGVPo5ETRRzgTbgQeDfxrHe7vfwS9T3/Zh7rldQTxth57HoI4QbVLCwsLCw2MtgPXALCwuLvRSWwC0sLCz2UlgCt7CwsNhLYQncwsLCYi9FUSuADR06VE6YMKGYp7SwsLDY67Fo0aIdUsra/PaiEviECRNYuHBhMU9pYWFhsddDCLGpULuVUCwsLCz2UlgCt7CwsNhLYQncwsLCYi+FJXALCwuLvRSWwC0sLCz2UlgCt7CwsNhLYQncwsLCYi+FJfAiQUrJXYveojeTe7eHYmFhsY/AEniR8PTqBr72ryVc/+hqco7kmvuWs62t590eloWFxV4MS+BFQkev2u5xe3svCzc2c+tLG/nav5aQyTl84pZXWbSpZafPbG7qpjud3andwsLCAiyBFw3RiNo60HEkEddOZRy2NHfz/NodfPXO13EcyQdvfIknV9YDcPz1T/OpPy8A4H2/foHfP1toX18LC4v9FZbAi4SocAlcSiKunZOSWER9BVlH0p3JsXBTC5//+2s4jtop6dU31YbjS+va+MnDqwA45WfP8H/3LgOgvTdDT9rq6hYW+yMsgRcJntedc1RAU9mSjKP2fc3mJJmssjM5SToXtv8urG/s4raXVW2bg695jBN/+vRADt3CwuI9CkvgRYJH2o6UpF2izjm+nXUcTdo5J0jgu9q3tL49BcCHf/8yn75VSS6X/nk+5/32xf69CAsLi/cUilpOdn9GOud73anczgSeyfk2ELBzTt82nvbkFoBnVjdq+6+vbGJLczffPnv6O78ACwuL9xysB14keIRseuBZw9POOZJUCIFn+0jgYfjfe5Zx83MbANjQ2MkrG5r26HgWFhbvDVgCLxJMAveI2gl44A6ZXGEC3x05JR/5/U/+2bN85OZXAGjqTLFqe/tuHc/CwuK9A0vgRUI6qzJFgrp3YRsIkHkmRE4xydkx2rPGZ9t7/TxycxVozpF84MaXOPOG5wFF5oVy0S0sLN67sAReJGRcDdxxCAQxU9nCgctUgMx9cu5MmYTs9+kw2tt6Mtpu6Upru7Xbb2/qTLGxqRuAnnSOT/5pPh+48SVyjqSjN8OSLa3v7EItLCyKBkvgRYJHzkoDN7zxPsgmqazvOe/o9AnZJOp2k7S7/T7Npm2QuZe5AtDQ0cvahk73+Cm+fMfrnPfbF+lMZVm0qZmLbnopMAYLC4v3BiyBFwkpQypJhcgmAQnFsE3P2SRh0w543d2FPfCW7jQVSZV4VN/eS3VpHICGjhRDyxMAbGvrZU29IvNtrT387z3LWbCxhVXbOtjU1MXVd78RGKeFhcW7B0vgRYJHer2ZnCGhOKFetymVmF60SdRNXb4XbXrgzQHSDrYPKvdJe1CZsuvbexlSkQRge1sPwyqVXdfaw4jqEtXe3su1D6/inwu28MzqBra19fClfy62tVosLN5F7JLAhRBjhRBPCyFWCCGWCyG+6LYPFkI8LoRY6/47aOCHu/fCC0qmsv6CnXTW0XKK954Hk4Q7jUBkjxGI7DaW0PeGHCeddShPRAHlgVcm4+7xU9SUKa+7oT3FYMMDH1blE/jwKkXg9e29DHVJfktLDzc+s557Xt/K3Yve4s0dXcz74eNsae7ezbtiYWGxJ+iLB54FviqlnAEcCXxeCDEDuBp4Uko5FXjSfW0RAs/T7knnNMH2ZHIBr9v0ok1y7gnY2YLtZkDTzELJOY6uvZLOOnjh0ExOUp5UxL6jM6Wlle1tvVSXKjKva+mhxvXS32rpYWRNiWt3a2Lf0tLDfa9vZUdnmr/P30zOkdyxYHMgi8bCwmJgsEsCl1Juk1K+5todwEpgNHAecJvb7Tbg/AEa4z4BLaFkc0ZOeJB4TULuDtjZgu1dIWSeNbJWMjmJ46YbZnJSk3vWcchkpR6bR7gdqaxOSaxvT+n+da1+7fItzT6xb27qZpRL7HUtPTy+YjvfvHspv3h8TZ/ui4WFxTvHbmngQogJwCHAq8BwKeU2963twPCQz1wuhFgohFjY2NhYqMt+Ac/TzmSdgMQRTsimbGKQfKawZ95ttJtefdZx8FLEc45P1FmjYFbWkUa7L/GoxUXqwylDu+/ozegg65aWbhIx9TOqa+0hGVde/Uvrm+jN5Lj67jeob+/d5f2xsLDYffSZwIUQFcDdwJeklIHle1KtKCm4RFBKebOUcp6Ucl5tbe0eDXZvhk+KMpCS1x3iRXf1QTbpi7SSdYIeuLlwKGN44yaZpwu0Z3J+fyn93PTejC8JvdXSrRcXrdzWzpItrfxzwRb++x+LAXhyZb3dUs7Coh/RJwIXQsRR5H27lPLfbnO9EGKk+/5IoGFghrhvQC+Zz8s86UrtWjYJC1x2h7XnySleLRVFyK6d88ehStlKwza8dKNaokfaGYPYhRCa2LvTOdLucVJZh1hU/bzmv9nM5qZuLrttIVf9ffEu7pSFhUVf0ZcsFAHcAqyUUv7ceOs+4BLXvgS4t/+Ht+/AI0Ip87Vun6i7QrTuQEAzRELpCemTzjp6+X02Z3rdvp3JFfa6g9JK4TK4wri2iBChC5O8LJknVtYjpeSPz29ga6vdE9TCYk/QFw/8GOATwMlCiNfdv7OBa4HThBBrgVPd1xYhMMnMzPE2pZJuwxs3PfNw2SSE5EO893xCzugSt06AzDMBDXxnacXskzOOKURwAVJYca4dnWl++OBKjr72KQDW1ndYacXC4h1gl/XApZQvoBytQjilf4ez78Iks4B3nSrsgfdkCpNwWOAyzGMPyikGUZv6thP0rk05xZdZnMK28dm388DNdpOsO1NZTvvFc5TGoyz/3hl65yILC4tdw27oUCSYBGYSclcI2QY88Exh0jY9bZMUe0L6pANed5CcTa87FZBTIm57YflFZa2YaYuFSdskc3N8Hb0Z3dbcneal9U1EBJx78CgsLCzeHpbAi4QAgYVp4KnCmSR9kUfCslkCqzVNOSVXWE4JBDEd386FZK2Y3nsml1caIFvY6zav05yosjnJF9yMlbnjBvHgG9tY19DJ98+fSTIWxcLCIghbC6VICPNAw4KPXSHedV+kkrCgp0nyWaewvp0NyRU3s2eUtOJnsxTqv9M192GRUv5TxI8eWskdC7ewvqELx5Esq2vb7Q0tLCz2ZVgCLxLSOQd3RTs96RxRV+sNC0qGkXZPSNCzL5kqZp+M6XWHkHlmJ3I28skLZKdk81Ikw9IfwzxwM7hrribNOg6fvm0B5/76BVZsszsIWVh4sAReJKSzDhUJpVj1ZHKUuisWezI54lGhbQ99yjYJ1b37QuY+WQYW+ORJKMHAZc5td3SfTF4GSyDHPZAWGZYiWbg9sCNRTupNmjt6s3ztX0uY9X+Pss6tYW5hsb/CEniRkM45lCV9HbfEJfCsIylx9d2edI6kuyy9O5OjJK7sMKIO9cwzfdDSjeX5OSeYOpg2A52G1q0DoCEeOARruwTSIkNKBoS1h5O5w12L3qIzlWVzcxfL6tr4wI0vsa6hAwuL/Q2WwIsEVdbVjxmXJvxbX5LwybzMtaVEe+nd6azvpbvEFo2IQEAzGMQsnLIYlp1i1jxRXnfOaN85iJnJk1xSOfN8IQuTwgK0qcJB3K4wOSWvUNenbl3Aok0tLN+qpJWtrT2B/UEtLPZlWAIvEjJ5HrhHzn2xezOO9tjTOYdoRJCIRnRKYSIW0UQdEYQSe5hcYRJqzsnPSPF072AQ0yzIlQoLsoZo9H1ayGROME7hxUGZnKNrpeccyY8eXMHR1z7FU6sa6M3k+MI/FrOsrg0Li30VlsCLAMclxYAHHkLanjeebydjUbw1LvGoIBYReAkZZYmoJtSyREwTezIW0V53RLyN5JInV5jpgmHVC8PruRiTRB/y3cMWMplknjJrnTtBb1ziTzaPragHoLEzxUNLt3Hfkq38/rkNWFjsq7AEXgR4xFee9Am8JIS0w4g9ERW6OFQ8GiEW9VcslsWD2rpH7KWJqPamyxIxTdrxqAiVVtJZxyh+FZ5hEsiSCfXAC3v/XWEeeKgeHpR79Fhzjr7WjGPYOYen3aDngSMq6ejNMOHqB7l/yVYsLPYlWAIvAjwCLzOJOkDaEcMuTODxWISY64InohFN5rGIIB7zP2+ewyT20kRUE3NpPKpJOxmLhC4CCqsZDm/nRe9uznphYg+SeTD90RyfR9qmN57JSb2Zs5SSe15XxH3XorcAuGPBZtY3qgyWZXVtNHb4e4taWOxNsAReBHgpd2ESSkm8MLGb7fGoT+D5dtSoHxI2SQSI3RhHWSKqM0dMYo9FREBOkXm7B4UuHOqD/h6WBx6WK25OEOYkknUcg7SDHrhXgTGTkyza2AzAQaOrWdfQwTfvXsq3/r2UnCM599cv8IlbXgVg9fYOGuzmExZ7ESyBFwHaAy+QRgjhZO5p3eB62p6EEhNaQolHBfFIpODnS0OkmbK3aTe99FRW7eaj0xnTOWMxUl9yvAvXdtltDzykPZ31dxvKGN54JhvU8VNGzvq9rjc+srqEN3coL/zNHV0AnHHDc5z9q+cBuPGZ9dz7eh0WFu9lWAIvAjztuCJEAw8jWtO7TsR8Ox6NaNJOxCIBMk9EDTklbqYt7trjNyeYgO167OmcnwrZncnprdT6EhwN9cZDCd/v05kqLNdkHamX1mdzjrYzjp8lEyiPm5U0tCu5pLo0zrI6lXo4bXilLqq1o1NJL9c9soov/vN1PRbzuiws3iuwBF4EpI0MEQ+hwcpYxMg2ifhet2EnokEyDwtuloRKKL5tBlZNwg8dq5Gn7h0nlXW03RWWB76bWShhQcyAHh7wwB1jqb8TKLCVMmyzTMBad/HPuMFlbNzRDahsnfza5DP/71FOuP5pQNUuX2mX81u8R2AJvAjws1BMIiwcuFSySUTbPlGbsolP2olYnjYeNY9r2oW98bAUxjDJJSxI6rX3ZnwyD8sDD1uJ2R2oixKWglg4TTFjLkDKOnrf0UD+upFJk85KLetIJG82KRllzKAy3mrpJh8NbqDztF88x1m/VDJLe2+Gpk4bALV492AJvAgo5IGXxApLGqYXHYtG9ArMeMDrFoH2wsFNXzNX5w7RwHdByABlybf3xnc6TsJfdKQ980BQMkQDD1m52R0W9Ays1sxfTbpz/no6GyzUZe4wtKVZkfbI6hK2NKut3uJREVh0lI8jf/wkh/7wCQDWN3by0vodoX0tLAYClsCLAF8DL0x4pmwSiwRJ2PPGE4bunU/aHlEn873xkOwUcyIpz8tIKTS+MGI35ZdgmYCdzxUqs4R66YVXbpo7FeWnF2qiNsg5nSenhNneRBKNCN5y9+ocVlnCJtczh2B53PzxnvKzZ/noH17FwqKYsAReBPh54D7JJQ1SjAUW6YiA7h0tkC6oZBOP2PMyUgJ6uLIjAl0kC8I957C0w9IQ0g7zxsMmBe/6ezOOEQA1g5W7zmwJW/WZyuaMzZsdvXozuJHzrsk8m5P6aaEkHmFzky+nbGvr2ybMP39sNaf+/Nk+9bWw2BNYAi8CMgU08IQRbIxH8nVsL3XQkFBiQTklFiKhRENzxc3slL5o3SGeeZg3HuqBh/X3CnUZ2SwhUkloQDPEe8/kZHBbuOzOEko6Z+4k5GetmB57RAiau1VWSlVJTEsr+ePIx6+eWqdL3S7a1MzPHlsNqEVF2ZwT+jkLi92FJfAiwCMEM5AYMwg1FhVEhdC2DmLG8oOYkQJ2xAh6+sRueuYJQ0uHt0kd3E0SDusf7oGHyTietKI2uhAizwNP7doDN9vT2TzSLuR15wU6tcduEL4jpW6PRARNXX7Acmurv+Dn7Uj5Aze+zK+fWgfAtQ+vYsr/PEw25/DnF99kwtUP0pXKUtfawzX3LddPEBYWfYUl8CLA8+4SsSBpe4hHI2CkDmrvOlI4dTARi/retZkHHjN0ckNmMfvkyylhueJB3dvsU5icy/sguQTtwsf3tH7Po07EInkLecI88MJ9Avt35ssm5kbOOoNFBoKbnh0RIlCB0ZRT6kOW4pvbv2Vzji6slco6/PLJtYCSjb74j8Xc+tJGlta1kXMkC9yVo/nHenxFvS2VaxGAJfAiwCMNkzhNDzweFbgrwlXqoOmNG1JJ3NC6/boovp2MRogWlFaEllDyUw1D0wJDFh2FZ7Ps7FFD3ySaZCxP3zcLdSWidBoBxvCCV4W99Hx9O1OIzLMykCvulcc1PXNBMIhpnm97m++Nmznkpkdtkn8669DandF9PJmmNB7ll0+u5aKbXua1zS209WS45r7l9GZy3P1aHZ/5y0L+sWAzFhYeLIEXAd7ydJOYAnYkjNgjQeI1M1IKBCvjMUG8QE54IhbR7dGICGSnlPQhiFkeJoMkQ0g7UdjrDiN/M5c9ETOvTa0sNcvm9iWg2RmonRLMTvG1bkNayVtuH/TA1TkcGSyhaxKyuUpzc7Mf9GzryWjb/GygomI2WNN8wZvN7rVl+dljq7n1pY3c9/pWNrjFt5o70/RmcvzvPct2ykHvTGWZcPWD3LN45xIAW5q7d7madOOOLlsLZi+DJfAiwHEZKCJM2cRf9h6LCl1jJLhgxyDkmNBL8ePRiJYg4tGIJs94NKKzWxJmrngk6HWbBJ4MeOO7TinsU3phH3TvMNI29XpzolLHjWmiTuRVUQzfHPntZJPCEkrQG985nxyChGx63TsMUt3S4sssHb1mxkyQzD2JKJNzNOmXxKPUu2Ranozpias8GeO+JVv56yub+Pnja2jsSDHh6gd5enUDG92aLp5U09iRcot8SY77f09z5d8WASpL5sV1Kmd9e1uvLiNw4k+f4fAfP0k+Lvzdi5ztLl7aXezoTPH0qoad2utae/j+/SuKpvsvq2vbJxddWQIvAjwPUgi0VBCLBEnYI+dYNEJlSVy3V5UqOxGNUFPmt9eUJVR7LEK12ycWEVR6Hq8QmjCzjtTnyuScQApjPBZSyTBEAw/NNjE97RDduyQeLBNgBlk9O2mmSMaCwdeyZFQvnS83vHElrRQuitWb8ZfbZ3OyMJln/WBl2NJ7MztFHbewlNPZW9iu7/A9W3MiSGUdnc+eNgg8nXVodkviliWielIqT0Zpd/skYhEWbVIe++2vbNZjKo1H6EnnOOxHT/C9+5fT4X722TWqRvqvnlrHx/6octaP/MmTvP83L5KPzU3d1Ln58K9tbmWFWz7g5fVNPLJsGwB/f3Uz3713GQA3Pbue837zAgAdvRmdhfPJW+bzqVsX7JRD/+U7XudPL77J61taA+0bGjs55tqndvkk0JnKBmIMHv784pt6UZaJc3/9Au/79Qs7td/83HoeeGPvrRNvCbwI8H5oAqG91lhEaHKLRQQVJb53XVXik7lHzvFohEEuaceiQrc7UmqST2UdfZxUJkdVqZd3naPSbc/kZKColpkZU+1OEBAsvFUesgApzGMPmwgSO8k6ZjmAnYtzKVu1RyMisHo1/9xhC38CW7PlZaGE1ksxt47L7OylQ3CSML3rAJmnfAnFJHOzf2CLuKxDq6uHp7I5mro8219oFBFCf74yGdNaek1ZXE9oJfGozph5cmUDbW6f0nh0pzov4FdjNHH89U9zzLVP7dR+8R9e4cq/vQbAt/+zlL+8vAlQGTZL3lLb1338j6/qPPjV9areTG82x6PLtzPvh0+QyuZ0nCEi1MQy4eoH2draw60vbaSutYeHl21nxdZ2Jlz9IIs3t7CuoZMJVz/IU6vq2dLczaz/e5TbX92M40h+8vBKNjd109ad4Xv3r9DlgTc3BWWjrW07Two/fmgVV/198U7tn7jlVT5008s7tS/Y2Mx/Fr+1U7uTVy+/WLAEXgR4foIQPgHGDK87HvC6hSbkeERo4o0bHngqk9ME3pPO6f496Zw+Tm8mR5Vr92RyVCQNci7xyc8kaq8/BMncO5fqY3y2pLBnbkooJfGoIQ/5WnwyGiTqeLSAnJK3iUU8WvhpoTwR06Rbbmwvl4xFgumFRn3zdJ437qcU+u1po93Jq4cetgFzGFG392aMdt82N6hI5XxvPJVxaHIrI6Zzjq4No2zPG4/R6nrjNaVxfY7SeFR77xXJGC3dvidvjim4eUf/kY9H5DlHaomkN5PjmvuWs6MzRWNHipwhK97+ipoElmxp1fGiSETw1Cq1Rd5jK+p5bVMLAA++sV1POI8u3866xk5+/+wGrvrHa6TceEVTVxopJcdf/zSX/3XhTsR61i+f57pHVu007uautJ7snl+7g/luNpCUUmf/XHTTy3z5jiWAirt4Mte3/7OUqf/zMAAPL93GmTc8h+NIHlm2nbk/eLzgxNkfsAReBGgJBZ94YlFhyCY+UcciEU2kvZmc7pNzHN3emfIJvDttkLnhafdmHMP22yGchE0yH1ye0Lbn+QNaulHthUm+NE/rDpa+LWDnVVoMkrZbJiCelz0TlpKYDF6PWbfc3C4uvxaKR/qqfvjulbjtDGkP9i9M+IHgppmpYsgpmayvk6ezjp4AhECTc3kyFtDPPe+9osT30ksT0cBE4mW/5I9vT5ANyEPBfU29ey8leN3SOV/iikSEJkpzz9eIQBO+8RNASvWUBOq+9Kbdg0o/zvD82h07kefKbe3c+Mz6ncY+9wePM/v7j+3UfsHvXmLWNY/u1P6Rm1/hCDdm8M8FW/T1f+XOJaza3kF7b4YfPriC5q50IFOpP2EJvAjQEooQmtyiQmiyyeQcTZ5Zx9HSR0dvVhNsR29WSy5dqaz2xrvTWd/TThsEnvU980xOBgg84I0b5GcSYU1pYQI37SBpB7NKTNt7nW/HC6QOmkSdiEWDOrkRfK0MZLcU9v7LkzHt0ebnk+9UcjazM5lDviQS4nWnQmSTPnjmgf1ITfLLBMncDHR6xzW99KwTDIB67aYHXhr39XNAbzuXPyYzsLi7skBvIE4QJHOP3HsyOU3UqYwTCPJ7JB8VQhO7wGg3fgOSYJ6+dy8lwe+nZw+939e3tAYmclD/p99wnzTM3PzOVFY7aS3dGZ2okB4gecUSeBHgfb0REayh7ZFQZ8on3o7erJZB2nszuk9HKqsJtiudDfXAPTJPZZyAp11pkLZJ5uXJwh646Zmbcoo3uQAkYyGkbbhJplQSj0b09Sei+WTue+AJU04JBDQL13OpCCPzvDRHj8yTsUhA9846kl7DWzSlBZN4zf/EnSFB00AQM9RL37U3njL+w6ezjiahdNYIdOYcXeY2lfHbhUBnXFQYnrkpoSRjEU3skCf39GQKtofB9LpNbzdoO9pb7knntEfdm/Fr2OQcJ0CG3nZ5QvgkGREiuKG2e//M1btSyoB0Zk6GgS359oBUzd9CUB7L6t9mS3da//ZN2aw/YQm8CDA9CY/AejI5JgwtA1TKn0faHb1Z5oytAeDAEVWaSDvzPHDP7k7nNMEGJJRsLqBpV4Zp1yEZI2EpgiY5m6QdD7Qb6ZIxvzRAMhbRQc1ELKKfRpKxCMn4ztJKMhrRWTKmTp6MRQLjCFvhGXy6CE5UmZzSZ73jhModIcFRk6hNsugI8cY7QrJTzP/Y5rlSpmee9ff4TOekJuRU1tEElso6mnjNDJZoRGgJpSTuSyglhk6ejEUC1xYkdn98pmdukl+6TwSeI+MU8MCzvgfenc5pTzuVzRn/bwh44KZH7Y17Jw88XdgDN4nXfFoIg5npYpK/+XtpznuS8eJBLV1p/dtv78NE+E4Q23UXiz2FNETwb501nabOJRw6fhBHTRrC+CHlnDFzBJNqK7j5uQ2cNmMYU4ZV8tzXT2Ls4FJWblNR/IPHVDNjZBVDKxJ8+bRp1Lhe98Sh5drT7jaCmFKiJRR4u4Cjb5skHDEeVU3pIh4gbb89QOxRtdQ/60gS0WggQOmt6jS98XjUb0/EonoPTnMbuWQs6hN73mrNimRhbzzs6aIsGcWrEluejJLuVrXEvYVCYR5ymN0RJq2EyCam994R0j+Vp4f7tV18uSdt7P2ZyvrjTmcdrYGns44mZEdK2nt8D9wjduWZ+0TdGuKBm328recg6OH2vo3tBWx7MoU98GC7oyeJnJR6oooIUbDQmbmTkiNlIK004LGbxN6HbfJM8jcXZnW8zYTneeDNXWn9/8V8qulPWAIvIoSAGaOqeOiLx+m2D80bC6h9GTdee45uHzdEeeczRlXx7NdPZOygMiIRwcLvnKb7/P0zRzBrdLUmp6+eNi3gaSdDPGRTRzTt8HGHEHUsxOt2FyNlHRkg4UCAMhaUU0zbS21MGJ62aSfjUX090YgIyCmVxlNH2CrQ8jyZpcUlsgp3wUx3ShXVyjkyz9PeXT181ymFQcnF7xMslZtXz8UgbY/oVaphTrdH08JvT+W07XngyXgk4JmbRO1lYkCQeMxFSvVGnnYqG+KBZ4MeuM5ISee0150yni560r5n3pvJ6esxPfOcIw2pxJCphKAnbXrIhSUxs90cayYk+Gr2b+0OfocRoZ6um7sy2mHpTGX1U2ZLd1rLgX2Rot4JLIEXAWYWyjvB+CHlBduPnjxU2yb5A4yuKdXEa5LXniIgleR53drWed1OgS3ffBnElFM0gccimpBNYk8aXnoyFtFeurnwB/KfNHZdVCtf92/oSJHOqQyejt5swFvuDClxG5ad0hHmgYeRfAix53vdnp3KGGSecQLpj9GsT+ZmH8+LjgqhiSrryIBH2drje5Tmo7/pdTcYBbxMz9yUE8LIXEkofh+PzHvS/oTUm83p+9qTzmmC7cnkNCFL6d/7iPC9ZSnzPO0wD9xoN8ftbXwNwe+2zbgvXS5Rd6VztHSliboE3tGb1b9xRewR9x5ZAt9r4Qdj3imF7x7uuvIo7cHf+/ljGFaVdM8Px02t3aNjmx57QAMPeOB5hbcCed2+nTT18LivhzuO314SIPadtfSkkdkCwewUk6jDArehZJ5UBC6lsjtT2TwJpTBRdwY07d0japNE8xf7+NvC+WmOKSOvvTeb0wSeyji6bEMqGyR2z6s1S+72ZnKBWuydITVmTA88aPvEZnrmJoGbMkuP6Y0bTxHdGZ+0ezOOvn/dbplh77PeXqjpnB8DkBKdMqqIPRhA9a+t8MRrXo85OZn9TQ+8I6WClV3pHM3daeLRCCk3xdO7VjPLp32Agpi7JHAhxJ+Ac4EGKeUst+0a4DNAo9vt21LKhwZkhPsAdJ5rcfibeRMGa3u2GxAFePMnvpf+tdOnMbg8uUfnyffGhVD/eZJmIDKv5knEzPEuJKfkpSCWBbx0j+SjwWCoEXAN6P4h5BxG8mH6eXlSLWXvyeR8nTxk9WWgJksfPPAwDdxsNwnPTH80ve5UxizU5RDJCr+P9sBzgT6+FBMsExAmCTUZRG1KK6b3aurBARkjE5Q0dLAy4xfz6knn9L1MZXP6893pnF4M1pv2JxsVr1B9ejM5I4gZroGb12COO/B0YUxCbSESkvldtfVk9ATTkcrqp41UNqftgcpC6YsHfivwG+Avee2/kFL+tN9HtA/Cl1CKxOB9wFUnT9V2WSLaJy08H/nBzXgkQjrnBErZJqKFc7nztXFTNjFLy5YGtPGoPlehKopCBJfuBxcvFU6FDCPzfGKvJ6Xbu9NKlvA8887eLPGoIJOToYt6QiWUMGLvLayZp4z0x5TpdRt2Omt64GafPPnFDIwaBG6e2yTqgB2yIMgLkkKQzE1vNJV1NKn2GsFX9STgEbKf+54ve/jaeNbok9MauCODGT1hxcYCdkdhfT/gmZvSSjqrPftM1k9/7OjN+msKHKnlHvO+9Cd2SeBSyueEEBMG5Oz7Ccx81vciFn/XD4y+dPXJ+j/2oeMHschdwlwI+cHNWFSQzhWoZxLZOavELHebjEV0wDUWFSSFv5dnwUqIUmqidqRP2lIGa5ebJDyo3FyA5NuVJYXJPCyzpSIZo7HDI3PlmWcdSU1ZnNbujA5i9WRydKYyJGIRsjknfIFPiB1G+L2G92rKIClTWsk6+rtJ5fXRXndeca6O3rDMk8JPBSYhtXUXlgqaQySE7nRWk3Iq4wSClZ4H3pvJaRLuTuf0WgpTQulK5XSMojvte+A5R4ZONmHST5iE0mjYbXnZOd41ZHKO9rS7DQ88Y0xUe7qYKAx7ooFfJYT4JLAQ+KqUsuD/dCHE5cDlAOPGjduD0+29KFA07T0Fc0HOqJpSbf/riqP0f5w7rziK1dtVRborT5jMzc+ppchjB5eypblnJ8/ZW4ATjfieesyoRa4qM/pj8D7rOJKKUq98gJ+PnnWklllyBoFLKYPFsxLGYh+DzM1VozUhJQBCUy1D8sxVu79gxtNIK0pi9GRyqpxBMkZU5OUuh6TmhXnjYe2prJ+aF9C6s46W60zSVgFQXwMPet2FSbs9ZKztATvksybJ9wSv05MVVSaNT3I6iJlxtKbdY0goPWk/iNmTzgZs09M2ibfJmEhMCcXsYxK4mUZpfta8hq6Ufw3d6Zz+HtI5n7QzOX8B1kAVunqnC3luBCYDc4BtwM/COkopb5ZSzpNSzqut3bMA2t6O96oHHoZIxN+T8/CJg/nEURMAuPqsA9ng6ul3XXk0N3/iUCIRoTVxgb9hRSYn9TFyTtD2PHNlu+1Sak875zjadgzSzjkY7UEv3axYaBJ4oJ6LQdrmKtOA5BKipZsrPfuisSeMRUqgSuqGet190MMD3ngmF0gpLJhemMkFgpiFFsFAOAl3hnjdYSs3Tbst0F6YzE3y60kHJSE/uJnV16bSC11iN66t22iHPBLuLKzRm+NoCUmdbAvx5MPa01npSys5X0LJL6fbX3hHBC6lrJdS5qSUDvAH4PD+Hda+BWnUetjXMLyqhNNnjgDgFx+ew5yxNVSXxnV++7DKpCbzrEnUBplnHamDm1lHau9dEXVMt3tELQMSigwQtamNm7bpdYd54AEv3azA2IfAaP5CIQ9m/no8KkjG/GqJiWhEE2E0IjRplyeieRkpheUNM3iayhj6dr5sEuppFyahjhC7PUwbD/XMd01+5ni601k/q8YMuBrXYHrpjgymDuZ7+bs6n3kNZoaJ2b8tpD1swjM9cGX71zAQeEcSihBipJRym/vyAmBZ/w1p34O5JHhfxgnTajlhmnrKuuzYiXzyqAkkYhFGVClZRmngisx2InN3cssFPHZHSyiOKaEYZK7azfrmu96P09TAa0JsUzOvCSH5QKAzsIAqSiIWIZ1VefBenrNZ/8X7jFn21SOIypI4241AWl908lTW0fVTUtlgGqG5MCUg2YQcK1ROCSPtnsJeepiX2hrisZuSUG9ekNWTIXvSuUBKYl/qsvflmsMkoTDybwvx0tP5Tz/GAqyBQF/SCP8BnAgMFUK8BfwfcKIQYg6q7MBG4IoBGd0+An9Hnn2dwn0IIfTqzO+dN5O542s4YuJgFm9uBaC2Iqm3AMs6Ugcxs44MeOwlWgN3dK64kx/ETJgSRcjGEiHeeHWIp232CZB5WWEvvTwR02mUiagKyqazDomoQeB5NVzKElGa3SX9QQKP4YYbqEjGNEnFDC+9MhnTdjIWUXJKAQ0cghkZfanJ0pEK88b7Qn5hGSyFz5uvK3tQHrhfo12yc412eJvAbx/iCe0h8Yfg4p3C4zOvra8T7ECgL1koFxdovmUAxrLPQmehvMvjeLdQkYzxsSPGA3D58ZOYNbqK46bWsrVNbdlVW5HU+mXOkdp7dKRP5o7jE7JjZJsoMt+1Bx6WKx4mrYSV0B1cVthLL01EXSJVXncyFqWDLImYvymzqYcrOcVYgGRmw+TVaPdIwaztXVkS0zJLZUlcB+G8qou9GUdnw3T0ZnSaY37lPG85eJ888BDCCyOzPq0+DdP3s0ZgMOvgSKHtQLnfsNTL3Ywn9CVoHEwLLUzsYVk7tpzsXgxzT8z9HdGI0KtBLz5sHDd9fC4fPHQMc8YNAuCYKUO1tJLNmTq5YwQ3ZSC4aXraJfHC3nhAJzeIMyw7xbQHlxf20ssTMe1Rl8aj+nyl8agmZ7MGejwa0UFWJacUzlk367mEZcZUheySVFkg311t7hHXtncvOlJZrd2392b0fe/szfoLUwy7vdevdd1RIAAajQhNeMlYpCDhJ2KRgguc8isi6v7RSKCYlyODWSl9mTA6QrzrvpB/sD2kumQfzvVey0Kx2A34W6pZBjcRiQjOnDWSSEQwZ2wNb1xzOmfOGsEBIyoBOG3GcF8Pl36Gyc4SSojXHRLQNIk9VE4pKWyX5qUseh51aSKqx1eaiAZqtZhkbpbNLTG88ZKQBUh9sStC+xQOvhbqI6XfnnX8DUA6DZJPZx3KkzFNnt4qW88Dr0jGtLPi1ZIB9eTkeaBVxpNDIuqTdmVJTAf8zOBuhTEmPfH0ZnWmj7lZSUdvVk+W3emcroWT3+7X4c/6k1Yqq6+n0xifHkfSH18y5rerfUbdcccigacRL789EY28t7JQLHYPUkrrffcBHlFOqq1g+ffO4KJ5Y5kyrAKAz584maiWU4J54GFEHSahmGQZJLa40cfw5EMniJg+Vkk8qsm5JB7VufVliZi/cYXpgQfquUQDufiVIZNHsL574fTH0K3zkoW99zDCD6slXxIPVohMxiJ6YVHYsfrydJHf7h2z0CYjqtiYcfyk315ou8B0zgku0jI2+C43JoL8ujrlST9jKD/jyMt+CVxDMhYgfPN8lsD3Yki5/+rf7xTef6yqkjgbrz2H02eOoLYiybjBZXzvvFnBPPCAPFKYqMPK6ZpPRaa0kgzJJ8+3hWFrD9wg81KDzJPxYK1zvwZ6UBsPW4AUKpskw4g9JMc9pMTArrx08DNslO0XJItFguMOzZEPmVT60h4se2CcK+SzYTtMhZ3LLFOcnzEU+sSTT9S5woRvbl7dn7DVCIsAibTyST8gEYvw3DdOApTnPWt0FVeeMDlAzuYmE7tb38XcNLkkxGMPlWviviRSmvBlk6C37+vkJcbGFSb5J6LBhT9m3ZYwrTvUAy/dPWIPqx1TGo/o+uhehk0HalL07rDpvYq8EggVIZPE7tphxBtO1GGTU1AS867NDCon8rzxwCbaicLn26m93R/3QG1qbAm8CLAeeP9DCMED/+1vjPGtsw7kiElD+m2iNCWUMPmlNBHR8Q2PCLz+Sa2HR/RCrtK4L7mUJ03b8NiNwCjkF+Ha9RZ5fZFTwnX1wsf3pJLudI5knoTiZQzle68BTb8PZNsnbzlUctn1U0RwNa2x0MotfewRuJkx5F1PMhYhaXwnuz3upPLMlZTav0xgCbwIkOybqzDfS7jihMmB17WVe1YqN+iBFyZzM32xJB7VZF5iZKGUxqN6M9/ypO91VxgEXpaI6f5liWjAAw/q0rvnXVf1QW8OO35F0shrj0V9Ajc8U7P+TaA9L989XGcPGVOItxxKloEJImSSM6WSWFRnt3hj7c04JGNRvehOba7tE7hZ797cKCT8aWHncWRyMrBzVX/AEngR4FgXvKh44ivH61rng8rigZ2L+op4iJySXx3R89hK4/5//tJEVGvDpfGoDmCZRF2e9GualyfNoGc0QH7m5FEdko9eFUJm4dLKrj3cZDzi57UberCpgZu7LZnZNuYm1UIE68f0SQMPlUoKk3yfZJa8a0vEFIGbE08yHiHr+BklfrvxdJG/gchueP/ehNGfsAReDFj+LiqmDKvU9uLvnq7t771/ZiBtsK8wtdHQgGYiqhP+8zNVvIyFsoRPBEpC8bxu307GffKP5gUGTaIOK8JV0QcvPcwzL41H87TuqLswSfiB2Ly8dt9L9SeeRNSXHPK18bDg4+6nSO4e4ZvXlvQmpFRQKklEI2SMScj0wLVt5O+rcseFpZVCWS/prAN79mC4EyyBFwESu4jnvYBLjp7wjj5n6pY711fxSduUULwC/6Vxn8DKE1FdtCsQuHRXboLK5vDILxYRocFUU8cNrBQtL+ylB9II8+u2RA1vNBqhx8npjJm2Hr80gDfW/DRC8L1a3R73STFhbOhh7p1qEmwY8YYHN3ctrZg13ZMxQ+uO+1v+JfM8bS+LJF8DjxvX5n82GrieUK3fHetALOaxBF4ESCnfU7vxWMA9nz/mHX0jJXl1VzwJxbSVnOISuCGzJOPRwIYWnhwTEf6y+ojASCmMBCSUQJaEIbMMqfDdulrDNsnc9FjNrfTUNndAzpcHejI57YF7fbwx7ZRGaGTPxAPE7qdOBtMOd62Nh+ayB/Y1LbzwySTOkkRU7xbvySCe1p0IELI/vlQBqSTwdGF64/GgNm7Ka4WuZyBywS2BFwFSFm8/TIu+YY6xV+gTXzlBF0iaMbKKFdtU/tf3z5vJS+uaAp8ziXMnPdz1wUsMAi+JR/V+ltGI0FUXoxHhSyXC965NMo9F/T7esTyY7UMMojaDt0Mq/PahIcReZkw8gdz3RLSg110S9yWEuJHymO+Bm4FOvz2o7+9uRsru5o17586mc4GgZICEjTHlB2jjJlEbO0yZE1KiAOHnj8OzB6KglSXwIsCRdhn9exneak+Ae686RpPvJ4+awCfdTSwm1ZazobHLrbKolkaXxIw0wngUN/5FSdxIR4v6KxVjEaEXdJhSSdADFwGN2ZNshMgjcDNH2ZhITN07IKcEtpQLpiZ6xFJdFtcTWVVp3JBBfI+1pixOvbs3pCmtBLzaaDCg6ckM8agIkFxYdk9o4HI368Uk41E9YSbzPO2E+eQQ8LTd5e95QVlTJ4/rycyPacQiYqdKk/nXYyWUvRQSaQWUvQRm9omJf3/2aE1c93zuGJ5e3RBY+JMwyDwejeiMlEhEkHX/40YjQhf7j0SE9tgjEaHJMhLxPeG4oYHHI5GghBKyatTsE1bHPCwLZUh5QpN5VUlM126vLInpVMia0kRA9/bOXVMWD3i1ekKKCC0zmJNT/jWErnrsg9dt1mU3n4qSed+P9xQc0OWNHG/lafvXYGrdhbJQTGIXedcQL/CkMRASSv/mtFgUhJTYNJS9HDVlCV1ka8aoKj5/0hQAPnGkKpOrCjn5y6U9OyqE74HneeOeQxYVfpaHSXKxaHjBK5Ook/HCZG5OMDVlYXnjPvkNKk8EilF5e1IOrUjowkzVZXE9vkFlPpnXVia1Pag8HpRQdOZNNDgJGQHAgLQSkvIYCFwGArGFYwPmpJo07Ty5x5tgknnkHNT6d9bMzYBmRIgAaceNMXmTykCUlLUEXiRY/t438aVTp7L+x2dTEo9yvLsb0dCKJDmXCYXA18CFCOjhnlQTifgbP0cjQQ3ckxbisfyAZmHyC8szNiWKykBGik+KppZeVRLXhZmGVCT1k4Pp1Q+tSGjJpbYiqQlscHlCj88k9vJkrOBTRDTib/4B+RkzhbNNzLGGT2bmuaIBWStMx44XsPNXmXrHjRqTrRB534NR0sH7bMZ64HsnpPT3fLTYtyCEv/HzN844gOe+fhIjqks4cEQVAMMqSzSxHzymmo8cPo7JteV8+LCx2nsrS8R8MhdCb/Ycj/hEE4tEgqRtkJP52wqr/2LGYMz+JkEGs1biuib3kPKEzmWvKUvocquDy5O6FnitsfdpdWlcn6O2MqnHWpH0KzNWGnZVSSzgjZv6sUnCg4y67GMHlRl9/P7mNSTjfhmDZCxCb9bLx4/pe6y2+TPSAgsEX02pJB71vW5hfFdCiIDXHS8wqaasBr53wrELefYLxKIRxg1RxPLV06dx6vRhHDSmmoPGVLPse2doD/LJr54IwAWHjOHNHd18/qTJvLKhGVDZSt5qwHjM98CPmzo0NKVwTxCW5VFV6tftHlKRNAg8rjc5GFKR0F56VWlc78BekYzT4u71WVuZ1CRXkfSJeszgMu2xVpXGAxOSSeYmEQ6vLNG2OQlNGFqu7enuxAkwfki53k5uRHWJ3s3ogBGVPLhUbembiEVYua0DgMm15fraclLq3eyHlCd02mJHb8YoIex746lsjqFG1o8pd80aVc2C/zk1EIfoL1gCLwJsNcL9D/FohHkTBuvXJjl6SMQiXH3WgYCfZlqWiOnNlQ+fMISasgSPffl4xg8pw5DYCxL4qdOH7fY4w0rrmjq5qYHXlMa1Bz6kPKE3MKgqiWvCr0hGWdvgb5dnllht6VakOG5wqZZNqkri2qs1PXMhwp80THj3dtLQ8iCxDynnsmMnsq2th6MnD9HtB46s5NTpw3hh3Q4m11ZQ16rGevzUWsYMKuXPL25ke1svF80bw6JNLVxxwmQaO1LASpa81cYfLzmMps40Jx04TEtKvRmHoyYN4aNHjKM8EWW2kaaaiEX2uDZPGCyBFwG2FIrFrnDCtFquOGESVxw/mcHlCR7+4nE6vXHacBU8dRxJLCL4zjnTd3II1v7oLJ0yt7u48oTJLN/aFmgzCzZVl8Z1BkVVqa+NDypP8MmjxvP6llam1FZoyaWiJMaVJ0ymrqWHDxw6hn8t3KLbvfz7y4+frPdBrSqN6UDfhXNH60ll4pByTeAeIf7g/FnMGz9op2tYes3pO2UQRSOC/z13hn49dnApW5p7SMaifOKoCXzCTRG95ZJ5LKtrZ1B5gkPLB3PdBw7i0PGDmDKskvPmjAaUNDO0IsmFc0dTW5nky6dNC5xLFf8S/PiCg3TbhCFl2osfKFgCLwLsUnqLXSEWjfCts6br19NHVu3UJxIRrPvx2fr1Ty48iLnuXqL55OU5og994TitKd931TEFq2J6TwEmhBDcecVRLNjYjBCCuz97FA8v3U5JPMrwqhI2NXUzqCzBhXPHcOHcMYC/B2RFMs6omlJuufQwwN8nsjIZY+zgMjZeew6AnjSOmTKUkdWlPPql45kyrIKIUGM69+CRxKMR7v38MUx2JzMv6wfgh+fPYvpINbmZTwxfO31aIB/ew2NfOkEHl02cMn04p0wfrl9/+LBxO/UBWPidUwu2z//2KQU9tEe/fLxeGzBQELLABQ0U5s2bJxcuXFi0871X8K1/L+XxFfWhPwALi/7E+sZOKktiDDM043zc+uKbtHRndvIkf/74Gp5aVR+otZ6PHZ0pFm5s4cxZIwLtm5q6uO6RVfz8Q3MCGvDW1h4u+dN8/nLZ4YysLg18ZvX2DqYNr7AS4y4ghFgkpZy3U7sl8IHH1Xe/wVOrGpj/P5bALSwsdh9hBG7TCIsAKa2EYmFh0f+wBF4EqKX0lsEtLCz6F5bAiwDrgVtYWAwELIEXAbYUioWFxUDAEngRIG05WQsLiwGAJfAiQEppJRQLC4t+hyXwIsAu5LGwsBgIWAIvAuyemBYWFgMBS+BFgPXALSwsBgKWwIsAtamxZXALC4v+hSXwIsCRdk9MCwuL/ocl8CJAgk0Et7Cw6HdYAi8GbD1wCwuLAcAuCVwI8SchRIMQYpnRNlgI8bgQYq37784V1i007I48FhYWA4G+eOC3AmfmtV0NPCmlnAo86b62CIEKYr7bo7CwsNjXsEsCl1I+BzTnNZ8H3ObatwHn9++w9i04Ng/cwsJiAPBONfDhUsptrr0dGP52nfd32GqEFhYWA4E9DmJKtaVP6LY+QojLhRALhRALGxsb9/R0eyWKt+eRhYXF/oR3SuD1QoiRAO6/DWEdpZQ3SynnSSnn1dbWvsPT7d2w1QgtLCwGAu+UwO8DLnHtS4B7+2c4+yqkDWJaWFj0O/qSRvgP4GXgACHEW0KIy4BrgdOEEGuBU93XFiFwrAZuYWExAIjtqoOU8uKQt07p57Hss7DVCC0sLAYCdiVmEWCrEVpYWAwELIEXAdIupbewsBgAWAIvApQHbincwsKif2EJvAiwe2JaWFgMBCyBFwFWQrGwsBgIWAIvAmw1QgsLi4GAJfAiwHrgFhYWAwFL4EWA3RPTwsJiIGAJvAhwrAtuYWExALAEXgRILH9bWFj0PyyBFwO2FoqFhcUAwBJ4ESCxtVAsLCz6H5bAi4Bi7sizoXUDao8NCwuLfR2WwIsAR8qiZKFs7dzKefeexwt1Lwz4uSwsLN59WAIvAopVjbA11QpAfXf9wJ/MwsLiXYcl8CKgWIpG1skC0JnuLM4JLSws3lVYAi8CilWNMONkAOjMWAK3sNgfYAm8GJCyKDkolsAtLPYvWAIvAiQUZVPjTE4ReEe6Y+BPZmFh8a7DEngR4MjiVCPUHrjVwC0s9gtYAi8CilUKxQtidmW6inA2CwuLdxuWwIuAYi3k8TzwjoyVUCws9gdYAi8CVBahlVAsLCz6F5bAiwApZXGCmDYLxcJiv4Il8CKgaBJKznrgFhb7EyyBFwEDUY3wqiev4ojbjwi0eUHMtJMmnUv36/ksLCzee7AEXgQMhAf+7FvP0p3tDrR5EgrYXHALi/0BlsCLgGIVszIJ3OrgFhb7PiyBFwFyABfymLW/LYFbWOxfsAReBAzkQp6042vdngYONpBpYbE/wBJ4ETCQ1QjNVZemB76+df2AnM/CwuK9A0vgRYAcwGqEAQLP+QT+k/k/YWPbxgE6q4WFxXsBlsCLgIEMYnZn/EyUjJMhHonr194OPRYWFvsmLIEXAVIyYHtidmW66Ex3srVzKxknQ02yRr9nc8EtLPZtxN7tAewPcAZAQomKKDmZoyvTxSn/OoXubDdnTzyb0lip7mOrElpY7NuwHngRICX9noaSjCYB+NyTn9MLejwJ5ecn/hxgp4U+FhYW+xYsgRcJ/b2UviRWslNbR7qDWCTG7NrZgCVwC4t9HXskoQghNgIdQA7ISinn9ceg9jWohTz9e0xTKvGwo2cHJdESyuPlQDDAaWFhse+hPzTwk6SUO/rhOPssBmJPTI+kTTT3NjO+ajwlUeWdWwK3sNi3YSWUIkAFMfuXwR3pcMTIYDXC5t5m4pE40UiU0liplVAsLPZx7CmBS+AxIcQiIcTlhToIIS4XQiwUQixsbGzcw9PtnRiIaoQ5maM6Ub1TuxfcLIuV2SwUC4t9HHtK4MdKKecCZwGfF0Icn99BSnmzlHKelHJebW3tHp5u78RALORxpENURHdqH1c1DoBENMG/1vyL373+O0B558t2LOvfQVhYWLyr2CMCl1LWuf82AP8BDu+PQe1rUAUD+5fBc06OaCTKgxc8yIMXPKjbJ1VPAmBb1zYAblxyI+3pdk644wQufvBiujJdzN82n8sfu5x0Lo2UkrrOun4dm4WFRXHwjglcCFEuhKj0bOB0wLp4BdH/WSiOdIiICOOqxjG2cqxun1g9cae+q5tXa3tHzw4ue+wyXt72MnWddVw7/1rOvPtMtndt5/WG17nwvgtp7m2mpbeFa+dfS3emGyklr2x7hZyTA4I1VywsLN497IkHPhx4QQixBJgPPCilfKR/hrVvwZH9n4WSkzktoQghuO6466gtreXAwQcCcOXsK6lOKo18Xes6/blN7Zu03dzbzN9X/R1QHvunHv0Ua1vWsqp5FV9/7uvcvvJ2Xt72Mn9Z8Rc+89hneHLzkyxpXMLcv83llW2vUN9Vz8l3nszC7QvJOTl+9dqvdAGtpzY/xY4elZzUlenS5G9hYdF/eMcELqXcIKWc7f7NlFL+qD8Hti9BDkAWSk7miAj/6zt70tk89aGnqExUAvD5OZ/nxlNuBIKlZde0rNH2lo4t2m7qadL1xNtSbby67VVA1RW/feXtqj3dxm8W/waAJQ1LuHX5rTT2NPLIxkd46M2H+MPSP/CHpX9g2Y5lfPHpL3L9gutpS7Vx5N+P5Lev/5ack+OTD3+Sf635FwAPbniQJY1LAFjZtFJPLtu7tlPfVQ+oxUltqTZA3UdzAwsLi/0dNo2wCChmENPE4NLBQNADNwnctDe2b9R2Y7efLdTU26SzWZp7mtnetR1QG0msaFoBqMyXJzY9AagFRnevvRtQhOuR9Qt1L/DMlmdY3LCY6xdcT11nHVc/fzWffeKzdKY7+dADH+KShy8h42Q47a7T+PADH0ZKydH/OJoL77sQgM8++Vn+67H/AuDuNXdz7fxrAVi2Yxl3rr4TUBLRS3UvAdCT7WH5juV6LC29Lfq67ERgsS/AEngRMBA78uR74IUwuEQRuOmBr21Zq+0wMt/QtkHbjd2Nenu2HT07aEkpEmzqadISSVNvE409ivRbelt0ALUn26Mnj0Elg1hQvwCA6YOn8/CbDwNQGa/k0Y2P6uM8t+U5bb/W8BoADd0NbGrfxIt1LzJ/+3za0+1c8/I13L7ydjJOhosfvJgfvPIDpJScfOfJXPHEFWScDJ946BN85MGP0J3p5kev/ojj7zie9nQ7d6+5mzl/nUNrbyurmldx2aOX0Z5up6mnSev+mVyG+9bfpys6Lt+xXD+hmBtnWFi8m7AEXgQMxJ6YjuMQjby9B14aK6UsVkZrqpVYJEZ1sjrgjZtkHmavb12PIx1ASRuenBEgcMPe0bODpp4mbe/o9ts9z7651/fkIyKis2CGlAxhU8cm3W5OPCubVmp7ScMSbb/e8Lq2VzWvQqI8683tm1ndslqP+47VdwCwrXMb17x8DY502Ni+kYvuv4j52+ezqmkVVz15FbevvJ352+dz3YLr+J8X/oentjzFXWvu4iMPfoRHNj7CiqYVzP3rXJ576zl29OzgA/d9gJe3vkzGyfDDV37I0salAPxn7X94s+1NfU6bk28xELAEXgQMhIRiBjHfDsPKhgEwKDmI2lKVhx8RESZUTaC5txlQnrpH7DERC3jjHgnCzvq5t9JzR8+OgDeuybx3R4DYTcL3SN7s35JqoaG7AVAS0Vudb+nzmROPOSZPxgFYumNpQXtFs9/HDOJ6Tw3e+JY1qSSqlt4WHtygUjPbetv424q/AepJwIsBLNi+gJuW3MSaljU8uvFR7lh1B3esvoNbl9/KS3Uv8d2Xvst1869jS8cWTr/7dH7y6k9I5VJccO8F/OGNPwBwy9JbeGSjivtv69ymdX8Li77CEngRoCSU/l9K3xcCH1UxCoAhpUO0XZOsYWT5SEDVFZ9aM1X3nzZ4Gr25XoAAyQ8vG87Wrq0AVCWqWN+mvONkNMnGto1aVmjobtCfaeppoqFHEXJLb4v2ujsyHdrr7sn2aFJ1pBPw/lc1rfLtZt82SXtl88qC7YE+TYX7mOfyrg0Usevr6WmgI90BuDGAbnUNqVxKf14imb99PqAWUHmkHIvEdAxgTcsa/r3236xrXcefl/+ZV7e9yg2v3cC3nvsWO3p2cPrdp3PlE1cipeTKJ67kOy98B4BHNj7CHavU08PGto0s2L4ACwsPlsCLgIGoRtgXDRx8Ap9UPYlR5coeWzmW0ZWjAagtq2VM5RhAkfmMITP0Z2cNnaVts336kOnaPmDwAWSl0oYPGHQAPdkeHOkwrnIcGSdDR7qDYWXDkEi2dm2lIl4BBAnZJOFQ2yDhwGdDyHl50/JdtpufNe2NbRtJ5VKAkl+aetXTQkNPg35CaOxu1B58Q3ewvb5bedKtqVa2dyrCF0JoSWVE+Qheq1f6/rCyYTy56UlAPWW8uPVFXqx7kXvX30tdZx1ff/br/PDVH9Kd6eZ997yPTz/6aQCuX3C9tl/Z9gq/fO2XAGzt3Mq96+4FlFa/odWPZ3gavsW+A0vgRcAA7OegF/LsClWJKgDGVI7RZD66YjSjK0bvZA8rG8a4ynH6s15OOcAhww7R9txhc7U9p3aOtg+uPVjbJvnPHDJT2x75SyTTByu7J9vD5OrJgEobnFA1AVAE6C1Sauhp0HLQlo4teuu4DW0bdGndlc0r9T3pC5mH9THtNS1ryEmVw17XUadjAPmk7en7+STvkXlDd4OWSBq6G4Ik73r1yWhSkzwE9X0voAuwrmUdf1nxFxZsX0BzbzOfeewz/HHpH+nKdHHG3WfwnRe/Q1uqjU889AnOu/c82lJt3LTkJg67/TBaeltYuH0hn3joE7Sl2tjauZX/ffF/6Uh30JPt4Y5Vd9Cb7UVKycqmlZr0uzJdNnPnPQhL4EVAfxezklIqDXwXQUxAE5qXkQKK1D0yrIxXagKvSFRouzJeGVjhOaVmirbnDvcJ/NjRx2r7+DF+KZyjRh2lbbNq4qHDD9X2nGFztD172Gxt508Envw0ffB0YkJVQJ5cM1mXzR1bOZbKuMp/H142nKGlQ8k6WSoTlYypGENPtkfr/u3pdgDGVY7T8s6I8hFa0hmUHKSzcMrj5drbj0fiAcJf17pOe+nburaxo1fp+AHS7vGJuqmnScs0bak2NndsBtSmG16wNpVLBbR+80nDrGPjZfMAOl8fYFH9Im2vaVmjJ6JN7Zv47eu/Jetk2di+kU89+ileb3ydVc2r+MgDH+GedfewuGExX3nmK/zw1R/yQt0L3LLsFj70wId4avNTvFj3Ikf+/Uie2vIUWzu3ct495/FS3Ut0Z7r51vPfYnHDYhzp8Kdlf9Krfl+qe4mtnep617eu13GOBzc8yMLtC3Ufb5Ja37peS1L1XfV6IuvN9urPZnIZLc+BfaIAS+BFgUT266bGXlZIXzzwS2ZcwocP+DAXTLmA901+H4eNOIzLDrpMyymHjTiMmpIaQBG756WbZB4RES2zAKHEbnrpJ409SdunjjtV26eMO0XbJvmbxD5jyAzikbg+fm1ZrT6vJ/2MLB/J2Co1jmFlw7RdW1arnyJqS2v1WIeUDGF81XhAZedMGzRNn+/gof6EcVDtQdo2nyIOGnqQlopmDJmhA7hTaqbQnm7HkQ6jK0bTmemkI92hJ5G6zjoq4hVIJKuaV+nJyCRk036j8Q1tmx64t+Dp7fqE2WZA1/Twt3Vt02mh27u288q2V7T9r9VKu9/SsYXfv/F7fd4bXruBDW0beOatZ7jpjZt4YMMD3L3mbu5acxe/WPQLfvf673h568tc8cQV/PjVH7OmZQ3n33s+333xuyzYvoCrn7+abzz3DVY0reCKJ67gc098jq2dWzn/3vO59JFLaUu1cepdp/LhBz5MKpfi2H8ey0X3X0TOyXH2f87mrLvPAuDbz3+bM+8+EyklNy65kQvuvYCsk+XuNXdz0f0XkcqleGjDQ1xw7wV0pjt5ddurfOSBj9CWamN182o+89hnaO5tZmvnVr753DdVimxvC//30v+xvWs7XZkufvjKD9nSsYXebC/Xzr+WDW0byDpZfrP4N6xrWYeUkr8s/wtrW9YipeS25bfp7+buNXfr7+DpzU8PWCE5u6lxEeD0s4biEXhfgpg1JTV850gVECuLl/GnM/4EKK/zH+f8g5lDZtKb6+WUcafwxblf1JkqXzn0K5r8PjTtQ5rMZw2ZxYiyEYB65B9aOlSfy1u6n28PLx+ubTNgahLkrCGzAu1eEHHWkFnc7qiVoDOHztRe5swhM2lJtbC2ZS0zhsxgc/tmVjSt4IBBB5BxMrzW8BpTB02lJlnDy9teZlLNJE3g46vGM6F6AqBIfuqgqTy26TEiIsIhww7hubdULvqRI4/UHu7hIw/XMsbhIw7X3vihww/VXvPcYXO1Jz+ndg5PbFaLm2bXzubFrS8CaoJ4o/ENerI9TKmZwrrWdTT2NFJbWktjTyPrWtdRGiulJ9sTIO0we3HD4t2yPe0dghLS5vbN2qPd2rWVtrSSiuq767X005Zq06USOtOd+kmlJ9uj71NO5nh80+OAksO8bJ4tHVt0n1gkpieLVC7FS1vVwqv2dDsvb3tZH3PR9kWkcilSPSmW7liqg+DrW9dz/4b7ATUheRU3N3ds5pqXrwFUHOObz38TUDKbtwBsZfNKrnj8Chzp8HrD61w3/zq2dm3l+DHHc9eau1hYv5AZg2ewpHEJ92+4n2Flw+hId3D7ytuJiihDS4fy+zd+z/au7cwdPpfrF17PyWNP5qyJZ/HThT9ldu1sPjf7c1zz8jVMqJrAj479EV94+guMKB/B4x98nP6G9cCLgX7OQvE02UimRzWku6GzwT2X9MofguOA12enMUklTwhBaayUG066gYnVE6lIVLD0kqWcOfFMyuJlPHXRU3zz8G+SiCb461l/5abTbiIaiXLDiTfw7/f/GyEEVx9+NX84XaXG/fch/81PjvsJAMeNPo6zJ54NwLDSYZTHywOyjynreOQKKhjqYcaQGfRmVVbMrCGztAQya+gsvePQjMEz9P2dNmia1v0nVk/U2TZjKsZoz3xo6VCts9eU1Ggyr0xU6mqO+eM4bPhh2j5x7InaPmPCGdo+dbz/pHHSOP8J5Lgxx2n76FFH+8cc4R/TfHrx4goSyUFD1ROBGRswYwArm1cSiyg/LMwDX1y/azJf3Oi3r2leo/PW3+p4S8tA27q2aRloa9dWLZFs69oWsL1JzPNwQRGyt8DLbM84mUBqp5n7bz45LKxfqO2Xt77s29t825NmIDjJ5ae/eg7Qtq5tgWvzxlHfXa8D6C29LfqedWY69SSUyqV4oe4FALIyqyehqIjyfN3zgJqoPGfAcRwGApbAiwDZz9UIvR9g7NnrVcMfT4Wfup7to9/27Ye/Dj8aAU4OXv8H/OYwyKZh0W3wvRrobYd1T8AvZkFPC+xYB3/7IPS0qgnhP1dSK2LEpITFtzNn8HSq45Ww9C5OGXmUqj3espGPHfARjhx5JKQ6uPygz3DupHMB+N2pv+O6468D4P4L7uepi54C4J/n/JNbTr8FgFtOv4XvH/19opEot5x+C1899KuUxEq45fRb+NTMT1FTUsMNJ93AGRPOYFzVOL4676sMLhnMAYMP4MKpaon9wbUHaw191tBZ+snhwEEH6kliSs0UBpUMAhSxjyhXTxHjKv1qjsPKhmkyT0QSgcqOk2p8YjdlIzNAa5KzKRsFSN5oP3HMido25aS5w+fqLfNmDpmpJyRzcppUPUk/5YyvHK8kG5mltrSWUeWj6Mh0EI/EGVs5Vmv9oytGa+19SMkQnU9fGa/Uj/7xSJxFDb6WvqRxiXYY1rWs00Hcus46TcgmsW/rLEzmjT2NuvZOKpfSkoJEBiYVk4RN0g61jf5mimWYbU5mq5pX6Wvb1L5Ja+11nXV63Fs7t2q7rsNvr+us09dp9tnWtU2vX2jsadTtralW/f+2P2EllCKgv5fS59LKO4oApDqhwc2a6G2DV9TjJN3NsOCPym7dBPdcqeyWN+H+Lyi7cTXcdRn0tkLda/DY/6pjbX4ZXvsrrH4QJp0IrZvh6R+BkwUnAw9+FU7/EYw+FP58JpzzM5h0Evx6LrzvlzDrg/CPj8BRV8Hkk+Ffl1I2+yMw4/3w/M+YOeZwmHgcLLqNw4dMgakXQMtGDq8Yz+EjD4d0N4cPPVjZqICoFxQ9bfxpnDb+NADOm3we5046l1gkxsUHXsxRI49iUs0kZgyZwYTqCRwx4ggc6RCLxDhrotJOvzbva1w07SIS0QSfOegzfHT6R6lOVnP+lPO5dOaljK0cy+EjDufTsz7NyPKRJCIJrjrkKoaUDAHg/Cnna+I8aOhBlMXL9PdSEivRttluykwm+Zt6uxnEnV07Wz9RHFx7MK9uf5X2dDszh86kvrueJY1LmDpoKkIIFtUvYkL1BDrTnezo2cGYyjGUxcvY2rWVURWjGF81XnvsBw4+kLrOOqIiytzhc7XUMW/EPJ7e8rSyh8/TXu3BQw/mjR2K2KcOmqqDjOMqx+mJYFjZMJ11U5Wooj3dTkemg5JoCb25XpbuWEpERHCkw+KGxZTHy+nKdLG8aTllsTK6s90saVxCPBIn42RYWL9Q9w+QeQixmwHdvhC4l6+f375w+0K9indF0wp6surJdUPbBk3sb3W+pa+1rrNOE3JdZ53uX99dr38Hbak2PUmmnTSN3Y0BObE/YD3wIkBtatyPQcwtSj+MImHVA/4bK+/37XVP+vZb/g+eOv+xmcZVirwBmjf4E0HbW7BJabZ01sMyVZyKjm2w9C5ld++AV1W1Q7YvgxdvUPaax9QksvF5ePUmWHSrmgie/X/K23/y+3DfVbBlvppI/nUJtNXBL2fDPz+qngp+Mka157Lw4NfgiWvUsZf/B95QwTV2rEVsfU3JB5leIj2t2kuOiAhHjjwSIQTRSJT3TX4fsUiMWCTGJTMvoSxeRiwS4wtzv8DQ0qHEI3F+cMwPmFwzmXgkzi1n3MIxo48hGomy6BOL+NSsTymy/PgirjlKjeXpDz3NH09XE+Sd597JIx9Qi3duOvUmbjvzNgCuP+F6rj9ePSVdffjVXHHwFUQjUc6acBaDkoOoTFTqVMoJVRO0d33Q0IO0Z3hw7cFaKjKJfXbtbP10Mbt2tt6J6aChB+k4w4zBM3SwdtqgadoeWzlWp4hWxisDAWTzScCUio4f7WcYHTP6GG0fNbJwtpE3+UJQKjLt0P6uXJWVWebUziEiIqRyKZ2F1JZqY0zFGCrjlbSl2hhcMphhZcNo6m0iGU0yoWqCzt2fXD1Z5+tPrp6sJZMJVRO0dzy+arz2mkdXjNaF3YaXDdf26IrR1HXWkXEyjCgfQXNvM62pVmpLa+nJ9lDXWUdtaS2OdHiz7U2Glaosr7Uta3VcaSA2TrEEXgQ4/byQJ9eggk8RCWx4xn9j1YOGHULsqx/y7fVP+fZmX0ukYYVP7DvWQrObubBjjfoDaNkI29xsiM4G2Pq6snvbYKPSBpE5ePNZZceS/jjiZbDiXre9BN74p7LrFsGyu9Tn1jyixrrgD/DCL9Qk9K9L4d//pc79m3nwh5OV3PPjUXDj0ZDLwD8+Cn84RT32PHMt/OtTSkJa8yi8+nvV3r4VNrjjchw1Ueib69qpDvV0YyARTWgNf2jpUO1lTx8yXQd5jxl9jE6zPHPCmZw58UwAPjb9Y1x1yFUA/L8T/h/Pflid/49n/JGHL3yYiIhw25m38YNjfkBFooJfn/xr3j/5/YyrHMeXD/0ypbFSZgyZocn24NqDtQw0bdA0/VQwsXqiXiw1tGyojgFUJ6v1BFeVrNIkX5Go0HZURAOLtOaNmKdtM3vofZPep21PxgL1dOLBi30AnDXhLG2fPPZkbZsTxBEjjqAsVrbTtR0w+AAmVikpa1LNJCbWKHt81XimDFJPM+Mqx+lrGFMxhqmDlD28bDgzhyqJqyJeoe9dTMQCk9Bxo/0YxQljTvDbjdhFIF3WmMzMPoFj5rWfMeEMvV6hP2EJvAjobwnFaVSPZVHwiQgBqx/2O5lEbRK72b7G2H9jldG+7gnffvNZcPOd2TIfupVnQ8NKJc0ANK1TfwA7Vvskv2OdbzevhwY3r7l1i/o8KPL37EgUtnuBKwF1xpPDm8/59lojmr/mEUX4HdtU++oH1ec2vQjP/ASW/xu2vwF//xA8/A01zp9Ph7+8X43vxqPhJ6PVU8DtF8EPa6FxDfzlPNXetB7u/yL8/njoqFcTwXPXq1hC/XJ1b6WEzkaod7M6HEdNGm8Dr7hZVaJKp2hOGTRFk+ARI4/gR8f+CCEE50w6h/kfm09prJTPH/J57n7/3YyvGs9Vc67ih8f8kKNHHc2nZ32aK2dfyfsnv58Lp17IUSOP4tKZl3Ls6GMpjZXyqZmf0pk+HzngIxwwWAVoz5l0DtMGK8/82NHHai99TMWYQKqlR5YQXOA1u9aXfkySCwvompOCGRg+fMThuoTDvBHztDxx2IjDNPEdOvxQRperifKQYYfoGMXs2tl6rDOHztTjmzZoml5BPLZyrJ6cakpqAhlQ5lOBOdZzJp6j7fMmn6ftD0z7gLYvmnaR3z7Vb/fiQKBkv5+e8NPA5NhfsBp4sdCPLniucTWUQkRElTc5aCJE44osK0ZA6SBoXAklNTB0Grw1H6JJGHMYbHoBRERp1utdmWXSSbBBaaCMOFgRHsCwmb6sMvpQ5SEDVI9V8gtA5ShF2gCDJykpBiBeDh1boQN17p4WcKUf0h2+l55LwXr33E7WIGcZJOrAhBTydLHyPt/2PHzwJaD8z775jLpPoJ5A1j6m7I3P+9f65rNKBgJYdT+88Eto2wxlQ2HRn2HbErjwD+p8qx6Aj/4Lti6GZ6+D/3pCTQAv/Qo++CfIdKtjnfy/SppacAuc9j3I9KqJ5tBPQbZXjXfOR0FE1fc1/liIRKC3nXhJlSarsngZ501RxFKZqOTzcz4PqFz4m0+/WV/m/I8Zuu/HFmiN9oELHmBMxRgdQJ4xZAYViQquPe5aDhl2COXxcr4494vMGz6P0lgpH5/+cWbXziYejXPquFOZMmgK0UiUKTVTGFY2jIiIMLhkMJlchmQ0STKaJJVLMbhkMDXJGlpTrYypGMNZE8/i4TcfZkzlGN436X3cv+F+Dhh8AOdPOZ9/r/03hww7hBPHnMida+5k3vB5LNy+kGVNy5g7bK5OfZw+ZLpONZ06aKoOrk6snqjXOEyumaxJfuqgqfq+TayeyIGDFMmPLh/FdDcuERERpg/yJ6cZ7nEADkyntT197fPanvXkddo+eKn/25r98He1e3zo8kdglPsd9jOsBz7A8JYf92sQ0y3RGq1S3giDxiuiBhgyBYa6WShDp/ntQ6fBMPfHOXgSDHdrm5TUwLgjlS0iMMX3nJj+vl3bM3zPhAPPMdrfb/T3vRGmnu5eRAomuo+r3TtglLu6s20LDHXT9xpWQJW7gOitBWpiAiUbRRPKNgl5RQiBL7171/by/xS2zVjCtiXQ7lZIrF+uPHhQTyab3clpzcPq8zKnCH7xX9WE+MIv4JUbYeGflKa/4I9KHnrsf2HhLfDQ1+DJ78Frt6nYwHPXqwnptvfBc/9PyVXXjlUZRJ2NcNOxaoJLdcBt74dNL6uJ4NZzlTQmpTq2NxEt/w80v6nIe+ldUL+c8VXjiS75J2x6icNHHk5FyyZo2cQ5k85h1LblsOEZ/uug/2JOVsKWBXzz8G9yZu1caNnEL076BZ8fcwZsfIH/nPcfbjrxl9DdzEMXPsTj7/83NK7hkQ88wmMn/g6e/zn/ef+/uf/UPyLm38xPjvkxC0/4PeJPZ/C9uV/hpfPuJ/b0T/jO3K/x1Ml/pPTmk/nmtI9x/xl/ZcgDX+WrB36cW4+5lsm/Poov1R7D1w66gmNuOY9PJ8fyzblf5pznbuSDJaP57EGf4WOv/J3TerN89dCv8NnmVo7IRvnavK/xjeXPMXPtc1x+8OX8OFPBpE0L+Pj0j/OrDSsZcc8X+eiBH+W2VCXVd3+Gyw++nD81tlP2myP45IxP8vP6RuJ/OJlLZ1zC9xqbEI98g8tnXcbVTc2w8j6+dtAVfK2phcjz1/O1g67gM61txDe9yNXTL+XDPTnKX/6t7xT1MyyBDzC8lOx+1cAd5Q1E4q6mNvlkJT8ATD4JylXQhPFHQ5XrRYw+RHnqALUHKqIHl/xdwq8YASPcR0sRhbH+oyXj/GAVM8737YP8R0gO/ohvz/1kiH1J4fbZFxvHMY450zjX9PepcYGaLNz8ZyafApE4ZLpg9Dylq3fWw5CpkKxSTwI146CkGuqXQqISSgfD5pfUpJWs8ieCWInywEH10ROEgGX/AS8VbM0j6nygyNudVNm+TGX6gMryceUuGlZCvbsab+tiX07a8qqaDEA9AXhy0vJ7YKsbcF50m/+E9PA31VPB9qVw+wfV08ubz6psoK2L1dj/eoF6GnvpVypO0L5VxQ9+NQe6dsDdlynpKJuCez8Hfz5L2TceDb88WMUSbv+gkpFyWbj5RLjlVLWm4I+nqD7ZNNx8Atx6DqQ6EPd/Ef7fRMpzOcrv+xL89jCGyggjH7sGnvweQ7ctY8JT18HD3yC6+SWSz/4EtrxKfOV9VL7wK3j+p8SX303t6/+AhhUkFv+FCeuegeX/oeT5X3Do9jWQS1E9/w9cQhVR6VD2zLV8nCpim1+m7MGv8bnqgyitW0T8zk9y6ZC5lL30K6J/PZ9LBh9C9bY3iD72P/z3xPMZsfA2IvdcyTenfphp3W2IDU/xrYOuYE7dUlj7GP896UIO62yFVDtfn/EpTutWGSZfrT6ICzvVd/7fFQfwsXYVI7mkFy5pVxUrL4nW8oUW9TTwMVnBd7a7gUsvKaCfYQl8gJFxE/jj0f671Y67S0z0gHOUFzvvMpW6B3Dwh5SHDTDpBN8Dn3oGVLse+4TjlPQBMPYIGDRB2ROPU+QOMHouDHfJfNRc/zgAw2catl+lkGGGPfZI3/Y8bYCppxn26b59wJm+PcXoM8UPnjHxBChRmRqMPwZq3MU/4470xzHmMBjhpueNPtS/hpFz/GsbORtqXS+/9kD1GtTEN9ENUJUP8+1oQk0ebllZJhynnhS849a7uv3gyUquyvaqJ5str4JbjZBtS3yNvHGVT8471qinC1D6vBdMblqnvGpQE5AXA8j2BIPPS/7h26aE9MYdvv3qTYXt1/7i2wv/ZNh/9m1TunrjTpVSCsqjT7tB3pX3+4HoRbeqpxBQUpB3n17/u7oHnt3tbm+3+hG/ffk9/uT31kI/BrLlVdikFsqwYy286U6wbXV+fKezMSi/LXGvP9MNS+/0r2Hx33z7lRt9e74vOfHstUaf3/n2CzcUbjfvnSe3Abx+u2974+9nWAIfYKSyisCTsX661VKS8wh8+Ay45D5IVijJ4rstytM84kr49KPKMz/og3DF80rGmHG+0mgPv1xJJef8HE79niLo829Sr4fNgFO+CxfdBpUj1L8fvRPKBsMJV8NnnlLnO/k7cOlDEC+FOR+H9/1KaXwHnA1H/7eyR85R+roQalxlQ1U2yhDX4y+p8uWSmnFQqTImGD7Ll07GHObbY4+AZKXbPk8dC2DUIcqLBhh5sDoWqInGI/ahU9XnAYZM9p8ohkxW5wBFwF57ea3fP1EBY/00Nyb7mRQBqWi28QQy56NG+8VKUpE5dX9yaUUsE45TdnudmkScrCLuIVNV37fm+xPtuidUXAGCxLD6Ib990W1+u0kq8/+wa9sk9vm/N9p/X7jPqwb5mYRvTiiv/UU9CYEK/npPKeuf9p9GtrziT2Z1i2CLO5nVvebHSRpW+gTYvN4PvqfafKks3QGvG+S8+K+Fx2dem0m2JiG/ZnzWu/5IXD2xRWLqO/Em1KEHqDEB1E5XfUD9Br2JafShwfTdfoQl8AFGb0ZlIyTju65b0ic4WRxXl9mpmJUXJInGDF1bKFLz7Gmnq36RCBx2GSTKVPucixUxCwHHfdX31meeDxWuJHPSt9SPEeD4r8MEN23q/N/Coa40cvE/4PQfKvuKZ+GT9yj78/PhS0v99qtdT+6yx+ArrpzwX0+qv2gMPvUQXHyHIuyP3wWnfR9qxqoJZfZHYfhB8P5fK098/NFw7JfUMSaeADMvUPaEY33vf9Rcn6hrD/CJunKUevIAiJf4+v6QyTDNXUFZUh18WjC1/ml+ilwgNjDnY7497zLfPsywD73UtwMy0ycK24d83LCN9jmu/JTpgmlnKlmop0Vdu4ioyWLyySp9s7dVTRbJKhV8rhoDZUNUamblSPU01rRO9R08SQVRQRGSm77KiIOUXAP+UweoidfrM3Sar/uOP1aRLaj72LkdkGoC621TstTkUyDVrq5h7JHq354Wd7KUyts/0I2lpNp9W+ZgppvK2NumjuP1me5OrulO5UiAOuaUUyFWqp6Uxh2l7kVvm5Lfqsep8w2bqWTGdKe6xvFH+9c74Vj/nnjtFSOCT5femED9Hju2Qsd2+huWwAcYqUw/e+DZXrwEtb4Us3rPIF6qJguARLkiRYDSGqhyPe/q0cqzBqXNe7LKsOlwzBeVPXouXHCjIvkx8xTRJ8rVf8pr2tQxpr8PvvGm6jvj/WrymH6uav/YXeoJZcqpcO4N6kliwnGKZM/+qfLUP3qnWlE6ZDKc8n/w4b8pQpr1AbjoVjUBzPqA6jN8hiK+OR/zJZrqsUGZybsm8AkG/IkG4OAP+7YZD/CkMVDymAdzEhl3lJJ8QE1o3hPL+GPAC3SPnONLXCNnq2wjgFFzlOcIqs2TnIZNV082oEh9nEtUNePV/QKVXXSAO4GJaHACM6/nID+9LnBt5lOKOTkF2o2JynzCMW0zSH6gn3/OhGMVsYJ6mqp2n8xGHeI/mQ2f6Utoo+b48tuw6b4MOPJgv8+wA/0nsNGH+vdozDwVfwI1EXgO1NgjfMdhALxwm0Y4wPAklJL+8sCzKRw3INqXcrL7Lcr8Qlla7xYi6CXN+5Rvn/tz3/Y8b4DjvuLbH/xTYfvLK/ynn6+tUwFlIeDKF/zzfvI+5c0JAR+/WwUWI1GVgrhlvnrSuPgOWPc4VAyDD9+uZIAhU+AT9yj5YuRsOPNaeOw7ihhOuFrptaMOUU9Az12v7FO+qxY8TT5JTW6P/Y+azMprla5cPVbFRDa9oIindLCyR7oEvuoBpeHP+ZjSsUccrJ7c3vinGtvMC5XkEEuqe/Xyb9Q9nnKayr0HJdc99QP12QPOgQe+rCaQA85WUlokpjzkV25UOfMHnqtkCicDsy5UunrTWjVBjJ6ngrbjjlaT7PJ7VHziqKuUFj/uKDjzOpW6OfEEOOKzSlqadKI6zyPfUnYsqSSX6e9XMtWj31ZkPOlE5VDM+7R6+mjbrCbowRPV93LIx9Q9Kh+qsq4GTVAEXTFMjbl6jPLE46XwhdfVsUpq1Pc83vXWL31ITRD9DSll0f4OPfRQub9hWV2rHP/NB+Qjy7b1zwFbt8hlPxoqZ906Sz6z+Zn+OabF3oVsRv3rOFI2b1R2Livlm8+rNiml7Gry+2xdImUupz736s1S9rSq995aJGWmV9kbnpOyp031f+GXUjasUu1vPi9l+3ZlL/67OpaUUr72V/WelFK+tVDKHev89qV3KbuzUcqOemX3dvhjyvSq9/LR0yZl3eKd23M59d47hXdP9mIAC2UBTrUe+ACj34OY2RQ564Hv34i6/22FUFITKG/e02bBfwIxYyBE4PDP+H1Gz/VtLw4AcMwXfNs85hxD/jAlDy8ukt9e7hfxIlnh27GkH4A2UVJV2EuNRPzso3eC/t6Q9j0EywADDB3EjPWfhLJXauAWFhb9DkvgAwztgcf7MYjpehR92RPTwsJi34Ul8AGGl4VS0o8euFcW3kooFhb7NywDDDBSWS8PfD9PI7SwsOh3WAIfYPR/HniKbjdlzdz1xcLCYv+DJfABhvbA+0tCyaVocwm8OlG9i84WFhb7MiyBDzD6P4iZos0tjOXtwmJhYbF/whL4AEOvxOy3IGYvbZEIMREbkC2aLCws9h7sNwS+tmUtf17251137GekMjmEgHi0nxYTZJWEUp2o1NtyWVhY7J/Yb1ZifvuFb7OqeRVHjzpa7wdYDPRmHZKxSP+RbbaXtmjUyicWFhZ7RuBCiDOBX6L21/2jlPLaXXzkHWHx5hbW1ndyzsEjiUbELglRSqnfl1IiAMfdZf3e9ffyjcHfAKB78WIafvYzklOnInt66V6wgLLDD0fE43S9+CKlc+YQra6m87nnKD34YCLVVXQ9/wLJKVNITJxIxxNPkBg3jpIZ02l/9DHiI0dSOmcOHY89RnTwYCpPPomj//0IM9q6aLplK10vvkSus5OqM06n69VXye1oovKsM+l5bTGZrVupOvtsepctJb1xE1XnnE3vqtWk1q6l6pyzSa/fQO+KFVTNqOLoDTE+sGMLDRtvINvYSM+iRVSediq59g66X32VihNPRGbSdL30MuVHHw3RKF0vvEDZYYcRKS+n85lnKJ09m1jtUDqeeprktKnEhw2n4+mnKTngAOLjxtL5xJMkJk0iOXUqHY8/Tnz0aEoOmkXH448TG1pL2aGH0vHEE0QqKyg/+mg6n3gSEY9TceIJdDz9DDgOlaeeQudzz+P09FB1xhl0vfQSudZWqs4+i+75C8jU11N97jn0rl5Dau1aBn30YgZddBEikRiIn5GFxT4HIb09v3b3g0JEgTXAacBbwALgYinlirDPzJs3Ty5cuDDs7VB88643uGPhFv26qiRGPBpBCIhGBLFIhJbuNAIoTURp68kQj0YYWpGkoyfNYc7rrB13GztcHTqZHUxpzwSuvmMVkxrbyUYEORFl3ehRTKvbClKycvRIpm2vJ5bLsXrESKbWbyfqOKwYNYaJOxopS6dYNmIUE1qbqerpYemIMYxpb2VQdyfLh41mZHc7gzs7qKusJiolIzrbkaOGIWNRIpu3IUcMRZaWEHnzLRg2BKeqgsi6Tcghg5BDa4isfhNZU4UYPQKWr4GqCnLjRhJdtpbuJLSOqWHU+lYi5eWUzJhB94IFiLIySmfNonvhQkQiQens2cqORik95BC6X1PlLMvmzqXn9deR2Sxlhx5Kz9KlyN5eyubNo3fFCpyuLkoPPZTU2rU47e2UzplDetMmci0tlBx0EJlt28jt2EFyxnRyO5rINjSQnDqVXFcn2a3bSEyahEynybz1FvFx4xBCkN60ifioUYiSEtIbNhAbNoxodRWpteuIVlcTHzuW3mXLGPXTn1J97jmFfgYWFvsthBCLpJTz8tv3xAM/HFgnpdzgnuCfwHlAKIG/U5z45H9z3qIGJIA53wj/9a4EihxQKjPuIph6MqKBIR3wt5MFTx8UwRGSrtKtlPeoA3aVbqe0VxJ1BJ1l9ZT1QiwXob18G8m0JJmJ0F5eTzwjKUtFaavYTiwrqeyJ0lJZTzQnGdwRpbG6k4iEIe1RGqubEBJq26I01LQggNrWKI01rUhaGdYapbG6HSnaqW2L0lTVhRPZQO3xUZore8hF32TI8VFaK+AD08/m6gn/RXTQICIlJWTq64lWVhIpKyPT0ECkrJxoRTnZpiZEIkG0spJsSwsiEiFaXU2utVVVMxs0iFxbGzKTITZ0KLmODpyeHuLDhpHr7MLp6iQ+fDhOdze5tjbiI0fi9PaSa2oiNmoUMp0m29hIfPRoyGTI1NcTHzMGcjkydXXEx44FKRWZjxkDQpDZvFnZ0aiyR46EeJzuV1+l7LDDwr9ECwuLAPbEA/8gcKaU8r/c158AjpBSXpXX73LgcoBx48YdumnTpt0+15PXfpyuxSsUSQuhOTyCsiNC4AAOEoHQ/dwRqL7xUg4YNJWy3k61S4nM0SsyjLnoeN6KtLOmt4GqWAUdMkNnLsXY5CCySFqzPQyKlSIlNGW7qI4mQUranRSDoiVIKWnO9VAu4kSBDidFUsQoEVFacj1UR5MkiNLhpIgjSIoYHU6KKIISEaXLyZCROaojSdqdFHEiVEbi5HDIOo76VzrkpMPQaAlSROGAM5k15lgqEhVYWFjs+xgID7xPkFLeDNwMSkJ5J8c45eq/7brTHmCS+2dhYWGxN2FP0gjrgLHG6zFum4WFhYVFEbAnBL4AmCqEmCiESAAfAe7rn2FZWFhYWOwK71hCkVJmhRBXAY+i0gj/JKVc3m8js7CwsLB4W+yRBi6lfAh4qJ/GYmFhYWGxG9hvltJbWFhY7GuwBG5hYWGxl8ISuIWFhcVeCkvgFhYWFnsp3vFKzHd0MiEagd1fiqkwFNjRj8PZG2Cvef+Aveb9A3tyzeOllLX5jUUl8D2BEGJhoaWk+zLsNe8fsNe8f2AgrtlKKBYWFhZ7KSyBW1hYWOyl2JsI/OZ3ewDvAuw17x+w17x/oN+vea/RwC0sLCwsgtibPHALCwsLCwOWwC0sLCz2UuwVBC6EOFMIsVoIsU4IcfW7PZ7+ghDiT0KIBiHEMqNtsBDicSHEWvffQW67EEL8yr0Hbwgh5r57I39nEEKMFUI8LYRYIYRYLoT4otu+z14zgBCiRAgxXwixxL3u77ntE4UQr7rXd4dblhkhRNJ9vc59f8K7egHvEEKIqBBisRDiAff1Pn29AEKIjUKIpUKI14UQC922Aft9v+cJ3N08+bfAWcAM4GIhxIx3d1T9hluBM/PargaelFJOBZ50X4O6/qnu3+XAjUUaY38iC3xVSjkDOBL4vPtd7svXDJACTpZSzgbmAGcKIY4ErgN+IaWcArQAl7n9LwNa3PZfuP32RnwRWGm83tev18NJUso5Rs73wP2+pZTv6T/gKOBR4/W3gG+92+Pqx+ubACwzXq8GRrr2SGC1a/8euLhQv731D7gXOG0/u+Yy4DXgCNSqvJjbrn/nqBr7R7l2zO0n3u2x7+Z1jnHJ6mTgAdTmtPvs9RrXvREYmtc2YL/v97wHDowGthiv33Lb9lUMl1Juc+3twHDX3qfug/uYfAjwKvvBNbtywutAA/A4sB5olVJm3S7mtenrdt9vA4YUdcB7jhuAbwCO+3oI+/b1epDAY0KIRe6G7jCAv+8B39TY4p1DSimFEPtcnqcQogK4G/iSlLJdCKHf21evWUqZA+YIIWqA/wAHvrsjGjgIIc4FGqSUi4QQJ77Lwyk2jpVS1gkhhgGPCyFWmW/29+97b/DA97fNk+uFECMB3H8b3PZ94j4IIeIo8r5dSvlvt3mfvmYTUspW4GmUhFAjhPCcKPPa9HW771cDTcUd6R7hGOD9QoiNwD9RMsov2XevV0NKWef+24CaqA9nAH/fewOB72+bJ98HXOLal6B0Yq/9k27k+kigzXgs2ysglKt9C7BSSvlz46199poBhBC1rueNEKIUpfuvRBH5B91u+dft3Y8PAk9JVyTdGyCl/JaUcoyUcgLq/+tTUsqPsY9erwchRLkQotKzgdOBZQzk7/vdFv37GBg4G1iD0g3/590eTz9e1z+AbUAGpX9dhtL+ngTWAk8Ag92+ApWNsx5YCsx7t8f/Dq73WJRG+Abwuvt39r58ze51HAwsdq97GfBdt30SMB9YB/wLSLrtJe7rde77k97ta9iDaz8ReGB/uF73+pa4f8s9rhrI37ddSm9hYWGxl2JvkFAsLCwsLArAEriFhYXFXgpL4BYWFhZ7KSyBW1hYWOylsARuYWFhsZfCEriFhYXFXgpL4BYWFhZ7Kf4/c4mSVJmSfp4AAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plaid_X, plaid_y = load_plaid()\n",
"print(type(plaid_X))\n",
"\n",
"plt.title(\" Four instances of PLAID dataset\")\n",
"plt.plot(plaid_X.iloc[0, 0])\n",
"plt.plot(plaid_X.iloc[1, 0])\n",
"plt.plot(plaid_X.iloc[2, 0])\n",
"plt.plot(plaid_X.iloc[3, 0])\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "95901ff5",
"metadata": {},
"source": [
"## 分類器の構築"
]
},
{
"cell_type": "markdown",
"id": "03738e00",
"metadata": {},
"source": [
"通常のsklearnの分類器だと時間軸の情報を無視している"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "bb5d0250",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.72"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.metrics import accuracy_score\n",
"\n",
"classifier = RandomForestClassifier(n_estimators=100)\n",
"arrow_train_X_2d, arrow_train_y_2d = load_arrow_head(\n",
" split=\"train\", return_type=\"numpy2d\"\n",
") # sklearnようにデータのサイズをnumpy2dに変更している\n",
"arrow_test_X_2d, arrow_test_y_2d = load_arrow_head(split=\"test\", return_type=\"numpy2d\")\n",
"classifier.fit(arrow_train_X_2d, arrow_train_y_2d)\n",
"y_pred = classifier.predict(arrow_test_X_2d)\n",
"accuracy_score(arrow_test_y_2d, y_pred)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "2dfca563",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8171428571428572"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sktime.classification.kernel_based import RocketClassifier #roketっていう分類器 ランダム畳み込みカーネルがうんたら\n",
"\n",
"rocket = RocketClassifier()\n",
"rocket.fit(arrow_train_X, arrow_train_y)\n",
"y_pred = rocket.predict(arrow_test_X)\n",
"accuracy_score(arrow_test_y, y_pred)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "c943f836",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8628571428571429"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sktime.classification.hybrid import HIVECOTEV2 # HIVE-COTE ver2\n",
" \n",
"hc2 = HIVECOTEV2(time_limit_in_minutes=1)\n",
"hc2.fit(arrow_train_X, arrow_train_y)\n",
"y_pred = hc2.predict(arrow_test_X)\n",
"accuracy_score(arrow_test_y, y_pred)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "bd882a85",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Feature Extraction: 100%|█████████████████████████████████████████████████████████████| 36/36 [00:00<00:00, 902.23it/s]\n",
"Feature Extraction: 100%|██████████████████████████████████████████████████████████| 175/175 [00:00<00:00, 1028.80it/s]\n"
]
},
{
"data": {
"text/plain": [
"0.6571428571428571"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.ensemble import RandomForestClassifier\n",
"\n",
"from sktime.pipeline import make_pipeline\n",
"from sktime.transformations.panel.tsfresh import TSFreshFeatureExtractor\n",
"\n",
"tsfresh_trafo = TSFreshFeatureExtractor(default_fc_parameters=\"minimal\")\n",
"randf = RandomForestClassifier(n_estimators=100)\n",
"pipe = make_pipeline(tsfresh_trafo, randf)\n",
"\n",
"pipe.fit(arrow_train_X, arrow_train_y)\n",
"y_pred = pipe.predict(arrow_test_X)\n",
"accuracy_score(arrow_test_y, y_pred)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "7b687cbd",
"metadata": {},
"outputs": [],
"source": [
"from sktime.classification.kernel_based import RocketClassifier\n",
"from sktime.pipeline import make_pipeline\n",
"from sktime.transformations.series.exponent import ExponentTransformer\n",
"\n",
"square = ExponentTransformer(power=2)\n",
"rocket = RocketClassifier()\n",
"pipe_sktime = square * rocket"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "a3b0ce17",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"SklearnClassifierPipeline(classifier=RandomForestClassifier(),\n",
" transformers=[TSFreshFeatureExtractor(default_fc_parameters='minimal')])"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pipe"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "be3e1dd4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"ClassifierPipeline(classifier=RocketClassifier(),\n",
" transformers=[ExponentTransformer(power=2)])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pipe_sktime"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "ad2b60c8",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"ClassifierPipeline(classifier=RocketClassifier(),\n",
" transformers=[ExponentTransformer(power=2)])"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sktime.classification.kernel_based import RocketClassifier\n",
"from sktime.transformations.series.exponent import ExponentTransformer\n",
"\n",
"square = ExponentTransformer(power=2)\n",
"square3 = ExponentTransformer(power=3)\n",
"rocket = RocketClassifier()\n",
"pipe = square * rocket\n",
"pipe"
]
},
{
"cell_type": "code",
"execution_count": 68,
"id": "05d22c04",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8342857142857143"
]
},
"execution_count": 68,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pipe.fit(arrow_train_X, arrow_train_y)\n",
"y_pred = pipe.predict(arrow_test_X)\n",
"accuracy_score(arrow_test_y, y_pred)"
]
},
{
"cell_type": "markdown",
"id": "30767b9b",
"metadata": {},
"source": [
"## 多変量"
]
},
{
"cell_type": "code",
"execution_count": 54,
"id": "69367cfe",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.0"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rocket.fit(motions_train_X, motions_train_y)\n",
"y_pred = rocket.predict(motions_test_X)\n",
"accuracy_score(motions_test_y, y_pred)\n",
"hc2.fit(motions_train_X, motions_train_y)\n",
"y_pred = hc2.predict(motions_test_X)\n",
"accuracy_score(motions_test_y, y_pred)"
]
},
{
"cell_type": "code",
"execution_count": 55,
"id": "ac667b6a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.975"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sktime.classification.interval_based import DrCIF\n",
"from sktime.transformations.panel.compose import ColumnConcatenator\n",
"\n",
"clf = ColumnConcatenator() * DrCIF(n_estimators=10)\n",
"clf.fit(motions_train_X, motions_train_y)\n",
"clf.score(motions_test_X, motions_test_y)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"id": "c60fa261",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.975"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sktime.classification.compose import ColumnEnsembleClassifier\n",
"from sktime.classification.dictionary_based import TemporalDictionaryEnsemble\n",
"from sktime.classification.interval_based import DrCIF\n",
"\n",
"clf = ColumnEnsembleClassifier(\n",
" estimators=[\n",
" (\"DrCIF0\", DrCIF(n_estimators=10), [0]),\n",
" (\"TDE3\", TemporalDictionaryEnsemble(max_ensemble_size=5), [3]),\n",
" ]\n",
")\n",
"\n",
"clf.fit(motions_train_X, motions_train_y)\n",
"clf.score(motions_test_X, motions_test_y)"
]
}
],
"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.5"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": true
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment