Files
yola/pailuan/master/ov_keras_visualy.ipynb
coco 85d885e008 a
2026-07-03 16:29:47 +08:00

10533 lines
364 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
" *14项潜血档机器学习算法验证*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**import moudle**"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd \n",
"import seaborn as sns\n",
"from IPython.display import display\n",
"import matplotlib.pyplot as plt\n",
"from mpl_toolkits.mplot3d import Axes3D\n",
"\n",
"%matplotlib inline\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**load data**"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"load data successful !!!!!\n"
]
}
],
"source": [
"try :\n",
" data1 = pd.read_csv(\"./newData/10_25.csv\")\n",
" data2 = pd.read_csv(\"./newData/5_10_25_50_70.csv\")\n",
" data_test1 = pd.read_csv(\"./newData/test.csv\")\n",
" data_test2 = pd.read_csv(\"./newData/nubia_test.csv\")\n",
" \n",
" print(\"load data successful !!!!!\")\n",
"except :\n",
" print(\"load data error !!!!!!!!!!\" )\n",
" "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**分析数据**"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>left_block_R</th>\n",
" <th>left_block_G</th>\n",
" <th>left_block_B</th>\n",
" <th>left_block_H</th>\n",
" <th>left_block_S</th>\n",
" <th>left_block_V</th>\n",
" <th>left_block_l</th>\n",
" <th>left_block_a</th>\n",
" <th>left_block_b</th>\n",
" <th>left_block_R_stddev</th>\n",
" <th>...</th>\n",
" <th>right_grayHist</th>\n",
" <th>right_grayMax</th>\n",
" <th>right_grayMin</th>\n",
" <th>white_grayValue</th>\n",
" <th>white_grayStddevValue</th>\n",
" <th>white_grayHist</th>\n",
" <th>white_grayMax</th>\n",
" <th>white_grayMin</th>\n",
" <th>whiteBalance</th>\n",
" <th>index</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>...</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>177.537162</td>\n",
" <td>154.988809</td>\n",
" <td>160.795291</td>\n",
" <td>173.659840</td>\n",
" <td>36.343644</td>\n",
" <td>177.787584</td>\n",
" <td>168.331609</td>\n",
" <td>136.974240</td>\n",
" <td>127.616343</td>\n",
" <td>8.358003</td>\n",
" <td>...</td>\n",
" <td>140.150549</td>\n",
" <td>182.139147</td>\n",
" <td>129.284628</td>\n",
" <td>191.197635</td>\n",
" <td>0.808594</td>\n",
" <td>191.766892</td>\n",
" <td>193.921875</td>\n",
" <td>187.984903</td>\n",
" <td>0.500000</td>\n",
" <td>3.899071</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>23.055906</td>\n",
" <td>27.120240</td>\n",
" <td>24.257571</td>\n",
" <td>85.816738</td>\n",
" <td>15.103201</td>\n",
" <td>23.211556</td>\n",
" <td>24.182989</td>\n",
" <td>5.539367</td>\n",
" <td>3.747435</td>\n",
" <td>5.360384</td>\n",
" <td>...</td>\n",
" <td>21.656248</td>\n",
" <td>21.951431</td>\n",
" <td>20.725182</td>\n",
" <td>23.039398</td>\n",
" <td>1.812333</td>\n",
" <td>23.599627</td>\n",
" <td>23.144180</td>\n",
" <td>24.459549</td>\n",
" <td>0.500026</td>\n",
" <td>2.263115</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>112.000000</td>\n",
" <td>93.000000</td>\n",
" <td>92.000000</td>\n",
" <td>2.000000</td>\n",
" <td>0.000000</td>\n",
" <td>112.000000</td>\n",
" <td>106.000000</td>\n",
" <td>124.000000</td>\n",
" <td>117.000000</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>92.000000</td>\n",
" <td>122.000000</td>\n",
" <td>83.000000</td>\n",
" <td>130.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>131.000000</td>\n",
" <td>100.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>166.000000</td>\n",
" <td>140.000000</td>\n",
" <td>147.000000</td>\n",
" <td>116.000000</td>\n",
" <td>25.000000</td>\n",
" <td>166.000000</td>\n",
" <td>155.750000</td>\n",
" <td>133.000000</td>\n",
" <td>125.000000</td>\n",
" <td>3.000000</td>\n",
" <td>...</td>\n",
" <td>126.000000</td>\n",
" <td>166.000000</td>\n",
" <td>116.000000</td>\n",
" <td>173.000000</td>\n",
" <td>0.000000</td>\n",
" <td>173.000000</td>\n",
" <td>174.000000</td>\n",
" <td>172.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>173.000000</td>\n",
" <td>152.000000</td>\n",
" <td>155.000000</td>\n",
" <td>222.000000</td>\n",
" <td>35.000000</td>\n",
" <td>174.000000</td>\n",
" <td>166.000000</td>\n",
" <td>138.000000</td>\n",
" <td>127.000000</td>\n",
" <td>8.000000</td>\n",
" <td>...</td>\n",
" <td>139.000000</td>\n",
" <td>181.000000</td>\n",
" <td>129.000000</td>\n",
" <td>194.000000</td>\n",
" <td>0.000000</td>\n",
" <td>195.000000</td>\n",
" <td>197.000000</td>\n",
" <td>190.000000</td>\n",
" <td>0.500000</td>\n",
" <td>4.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>187.000000</td>\n",
" <td>162.000000</td>\n",
" <td>170.000000</td>\n",
" <td>234.000000</td>\n",
" <td>49.000000</td>\n",
" <td>187.000000</td>\n",
" <td>174.000000</td>\n",
" <td>142.000000</td>\n",
" <td>130.000000</td>\n",
" <td>12.000000</td>\n",
" <td>...</td>\n",
" <td>152.000000</td>\n",
" <td>195.000000</td>\n",
" <td>142.000000</td>\n",
" <td>205.000000</td>\n",
" <td>1.000000</td>\n",
" <td>206.000000</td>\n",
" <td>208.000000</td>\n",
" <td>203.000000</td>\n",
" <td>1.000000</td>\n",
" <td>6.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>254.000000</td>\n",
" <td>255.000000</td>\n",
" <td>255.000000</td>\n",
" <td>251.000000</td>\n",
" <td>74.000000</td>\n",
" <td>255.000000</td>\n",
" <td>255.000000</td>\n",
" <td>148.000000</td>\n",
" <td>139.000000</td>\n",
" <td>20.000000</td>\n",
" <td>...</td>\n",
" <td>254.000000</td>\n",
" <td>255.000000</td>\n",
" <td>228.000000</td>\n",
" <td>255.000000</td>\n",
" <td>14.000000</td>\n",
" <td>254.000000</td>\n",
" <td>255.000000</td>\n",
" <td>255.000000</td>\n",
" <td>1.000000</td>\n",
" <td>7.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>8 rows × 152 columns</p>\n",
"</div>"
],
"text/plain": [
" left_block_R left_block_G left_block_B left_block_H left_block_S \\\n",
"count 9472.000000 9472.000000 9472.000000 9472.000000 9472.000000 \n",
"mean 177.537162 154.988809 160.795291 173.659840 36.343644 \n",
"std 23.055906 27.120240 24.257571 85.816738 15.103201 \n",
"min 112.000000 93.000000 92.000000 2.000000 0.000000 \n",
"25% 166.000000 140.000000 147.000000 116.000000 25.000000 \n",
"50% 173.000000 152.000000 155.000000 222.000000 35.000000 \n",
"75% 187.000000 162.000000 170.000000 234.000000 49.000000 \n",
"max 254.000000 255.000000 255.000000 251.000000 74.000000 \n",
"\n",
" left_block_V left_block_l left_block_a left_block_b \\\n",
"count 9472.000000 9472.000000 9472.000000 9472.000000 \n",
"mean 177.787584 168.331609 136.974240 127.616343 \n",
"std 23.211556 24.182989 5.539367 3.747435 \n",
"min 112.000000 106.000000 124.000000 117.000000 \n",
"25% 166.000000 155.750000 133.000000 125.000000 \n",
"50% 174.000000 166.000000 138.000000 127.000000 \n",
"75% 187.000000 174.000000 142.000000 130.000000 \n",
"max 255.000000 255.000000 148.000000 139.000000 \n",
"\n",
" left_block_R_stddev ... right_grayHist right_grayMax \\\n",
"count 9472.000000 ... 9472.000000 9472.000000 \n",
"mean 8.358003 ... 140.150549 182.139147 \n",
"std 5.360384 ... 21.656248 21.951431 \n",
"min 0.000000 ... 92.000000 122.000000 \n",
"25% 3.000000 ... 126.000000 166.000000 \n",
"50% 8.000000 ... 139.000000 181.000000 \n",
"75% 12.000000 ... 152.000000 195.000000 \n",
"max 20.000000 ... 254.000000 255.000000 \n",
"\n",
" right_grayMin white_grayValue white_grayStddevValue white_grayHist \\\n",
"count 9472.000000 9472.000000 9472.000000 9472.000000 \n",
"mean 129.284628 191.197635 0.808594 191.766892 \n",
"std 20.725182 23.039398 1.812333 23.599627 \n",
"min 83.000000 130.000000 0.000000 0.000000 \n",
"25% 116.000000 173.000000 0.000000 173.000000 \n",
"50% 129.000000 194.000000 0.000000 195.000000 \n",
"75% 142.000000 205.000000 1.000000 206.000000 \n",
"max 228.000000 255.000000 14.000000 254.000000 \n",
"\n",
" white_grayMax white_grayMin whiteBalance index \n",
"count 9472.000000 9472.000000 9472.000000 9472.000000 \n",
"mean 193.921875 187.984903 0.500000 3.899071 \n",
"std 23.144180 24.459549 0.500026 2.263115 \n",
"min 131.000000 100.000000 0.000000 0.000000 \n",
"25% 174.000000 172.000000 0.000000 2.000000 \n",
"50% 197.000000 190.000000 0.500000 4.000000 \n",
"75% 208.000000 203.000000 1.000000 6.000000 \n",
"max 255.000000 255.000000 1.000000 7.000000 \n",
"\n",
"[8 rows x 152 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_test = data_test1.append(data_test2)\n",
"data_test.describe()\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>left_block_R</th>\n",
" <th>left_block_G</th>\n",
" <th>left_block_B</th>\n",
" <th>left_block_H</th>\n",
" <th>left_block_S</th>\n",
" <th>left_block_V</th>\n",
" <th>left_block_l</th>\n",
" <th>left_block_a</th>\n",
" <th>left_block_b</th>\n",
" <th>left_block_R_stddev</th>\n",
" <th>...</th>\n",
" <th>right_grayValue</th>\n",
" <th>right_grayStddevValue</th>\n",
" <th>right_grayHist</th>\n",
" <th>right_grayMax</th>\n",
" <th>right_grayMin</th>\n",
" <th>white_grayValue</th>\n",
" <th>white_grayStddevValue</th>\n",
" <th>white_grayHist</th>\n",
" <th>white_grayMax</th>\n",
" <th>white_grayMin</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>...</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>177.537162</td>\n",
" <td>154.988809</td>\n",
" <td>160.795291</td>\n",
" <td>173.659840</td>\n",
" <td>36.343644</td>\n",
" <td>177.787584</td>\n",
" <td>168.331609</td>\n",
" <td>136.974240</td>\n",
" <td>127.616343</td>\n",
" <td>8.358003</td>\n",
" <td>...</td>\n",
" <td>151.319362</td>\n",
" <td>14.077914</td>\n",
" <td>140.150549</td>\n",
" <td>182.139147</td>\n",
" <td>129.284628</td>\n",
" <td>191.197635</td>\n",
" <td>0.808594</td>\n",
" <td>191.766892</td>\n",
" <td>193.921875</td>\n",
" <td>187.984903</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>23.055906</td>\n",
" <td>27.120240</td>\n",
" <td>24.257571</td>\n",
" <td>85.816738</td>\n",
" <td>15.103201</td>\n",
" <td>23.211556</td>\n",
" <td>24.182989</td>\n",
" <td>5.539367</td>\n",
" <td>3.747435</td>\n",
" <td>5.360384</td>\n",
" <td>...</td>\n",
" <td>20.299544</td>\n",
" <td>3.763639</td>\n",
" <td>21.656248</td>\n",
" <td>21.951431</td>\n",
" <td>20.725182</td>\n",
" <td>23.039398</td>\n",
" <td>1.812333</td>\n",
" <td>23.599627</td>\n",
" <td>23.144180</td>\n",
" <td>24.459549</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>112.000000</td>\n",
" <td>93.000000</td>\n",
" <td>92.000000</td>\n",
" <td>2.000000</td>\n",
" <td>0.000000</td>\n",
" <td>112.000000</td>\n",
" <td>106.000000</td>\n",
" <td>124.000000</td>\n",
" <td>117.000000</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>104.000000</td>\n",
" <td>6.000000</td>\n",
" <td>92.000000</td>\n",
" <td>122.000000</td>\n",
" <td>83.000000</td>\n",
" <td>130.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>131.000000</td>\n",
" <td>100.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>166.000000</td>\n",
" <td>140.000000</td>\n",
" <td>147.000000</td>\n",
" <td>116.000000</td>\n",
" <td>25.000000</td>\n",
" <td>166.000000</td>\n",
" <td>155.750000</td>\n",
" <td>133.000000</td>\n",
" <td>125.000000</td>\n",
" <td>3.000000</td>\n",
" <td>...</td>\n",
" <td>137.000000</td>\n",
" <td>11.000000</td>\n",
" <td>126.000000</td>\n",
" <td>166.000000</td>\n",
" <td>116.000000</td>\n",
" <td>173.000000</td>\n",
" <td>0.000000</td>\n",
" <td>173.000000</td>\n",
" <td>174.000000</td>\n",
" <td>172.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>173.000000</td>\n",
" <td>152.000000</td>\n",
" <td>155.000000</td>\n",
" <td>222.000000</td>\n",
" <td>35.000000</td>\n",
" <td>174.000000</td>\n",
" <td>166.000000</td>\n",
" <td>138.000000</td>\n",
" <td>127.000000</td>\n",
" <td>8.000000</td>\n",
" <td>...</td>\n",
" <td>148.000000</td>\n",
" <td>14.000000</td>\n",
" <td>139.000000</td>\n",
" <td>181.000000</td>\n",
" <td>129.000000</td>\n",
" <td>194.000000</td>\n",
" <td>0.000000</td>\n",
" <td>195.000000</td>\n",
" <td>197.000000</td>\n",
" <td>190.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>187.000000</td>\n",
" <td>162.000000</td>\n",
" <td>170.000000</td>\n",
" <td>234.000000</td>\n",
" <td>49.000000</td>\n",
" <td>187.000000</td>\n",
" <td>174.000000</td>\n",
" <td>142.000000</td>\n",
" <td>130.000000</td>\n",
" <td>12.000000</td>\n",
" <td>...</td>\n",
" <td>163.000000</td>\n",
" <td>17.000000</td>\n",
" <td>152.000000</td>\n",
" <td>195.000000</td>\n",
" <td>142.000000</td>\n",
" <td>205.000000</td>\n",
" <td>1.000000</td>\n",
" <td>206.000000</td>\n",
" <td>208.000000</td>\n",
" <td>203.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>254.000000</td>\n",
" <td>255.000000</td>\n",
" <td>255.000000</td>\n",
" <td>251.000000</td>\n",
" <td>74.000000</td>\n",
" <td>255.000000</td>\n",
" <td>255.000000</td>\n",
" <td>148.000000</td>\n",
" <td>139.000000</td>\n",
" <td>20.000000</td>\n",
" <td>...</td>\n",
" <td>245.000000</td>\n",
" <td>27.000000</td>\n",
" <td>254.000000</td>\n",
" <td>255.000000</td>\n",
" <td>228.000000</td>\n",
" <td>255.000000</td>\n",
" <td>14.000000</td>\n",
" <td>254.000000</td>\n",
" <td>255.000000</td>\n",
" <td>255.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>8 rows × 150 columns</p>\n",
"</div>"
],
"text/plain": [
" left_block_R left_block_G left_block_B left_block_H left_block_S \\\n",
"count 9472.000000 9472.000000 9472.000000 9472.000000 9472.000000 \n",
"mean 177.537162 154.988809 160.795291 173.659840 36.343644 \n",
"std 23.055906 27.120240 24.257571 85.816738 15.103201 \n",
"min 112.000000 93.000000 92.000000 2.000000 0.000000 \n",
"25% 166.000000 140.000000 147.000000 116.000000 25.000000 \n",
"50% 173.000000 152.000000 155.000000 222.000000 35.000000 \n",
"75% 187.000000 162.000000 170.000000 234.000000 49.000000 \n",
"max 254.000000 255.000000 255.000000 251.000000 74.000000 \n",
"\n",
" left_block_V left_block_l left_block_a left_block_b \\\n",
"count 9472.000000 9472.000000 9472.000000 9472.000000 \n",
"mean 177.787584 168.331609 136.974240 127.616343 \n",
"std 23.211556 24.182989 5.539367 3.747435 \n",
"min 112.000000 106.000000 124.000000 117.000000 \n",
"25% 166.000000 155.750000 133.000000 125.000000 \n",
"50% 174.000000 166.000000 138.000000 127.000000 \n",
"75% 187.000000 174.000000 142.000000 130.000000 \n",
"max 255.000000 255.000000 148.000000 139.000000 \n",
"\n",
" left_block_R_stddev ... right_grayValue \\\n",
"count 9472.000000 ... 9472.000000 \n",
"mean 8.358003 ... 151.319362 \n",
"std 5.360384 ... 20.299544 \n",
"min 0.000000 ... 104.000000 \n",
"25% 3.000000 ... 137.000000 \n",
"50% 8.000000 ... 148.000000 \n",
"75% 12.000000 ... 163.000000 \n",
"max 20.000000 ... 245.000000 \n",
"\n",
" right_grayStddevValue right_grayHist right_grayMax right_grayMin \\\n",
"count 9472.000000 9472.000000 9472.000000 9472.000000 \n",
"mean 14.077914 140.150549 182.139147 129.284628 \n",
"std 3.763639 21.656248 21.951431 20.725182 \n",
"min 6.000000 92.000000 122.000000 83.000000 \n",
"25% 11.000000 126.000000 166.000000 116.000000 \n",
"50% 14.000000 139.000000 181.000000 129.000000 \n",
"75% 17.000000 152.000000 195.000000 142.000000 \n",
"max 27.000000 254.000000 255.000000 228.000000 \n",
"\n",
" white_grayValue white_grayStddevValue white_grayHist white_grayMax \\\n",
"count 9472.000000 9472.000000 9472.000000 9472.000000 \n",
"mean 191.197635 0.808594 191.766892 193.921875 \n",
"std 23.039398 1.812333 23.599627 23.144180 \n",
"min 130.000000 0.000000 0.000000 131.000000 \n",
"25% 173.000000 0.000000 173.000000 174.000000 \n",
"50% 194.000000 0.000000 195.000000 197.000000 \n",
"75% 205.000000 1.000000 206.000000 208.000000 \n",
"max 255.000000 14.000000 254.000000 255.000000 \n",
"\n",
" white_grayMin \n",
"count 9472.000000 \n",
"mean 187.984903 \n",
"std 24.459549 \n",
"min 100.000000 \n",
"25% 172.000000 \n",
"50% 190.000000 \n",
"75% 203.000000 \n",
"max 255.000000 \n",
"\n",
"[8 rows x 150 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.utils import shuffle\n",
"\n",
"\n",
"data1_0 = data1[data1[\"whiteBalance\"] == 0]\n",
"data2_0 = data2[data2[\"whiteBalance\"] == 0]\n",
"data_test_0 = data_test\n",
"\n",
"data_all =data1_0.append(data2_0);\n",
"\n",
"data_shuffle = shuffle(data_all)\n",
"#data_shuffle = data_all;\n",
"train_labels = data_shuffle[\"index\"]\n",
"train_features = data_shuffle.drop(\"dateTime\",axis=1)\n",
"train_features = train_features.drop(\"index\",axis=1)\n",
"train_features = train_features.drop(\"whiteBalance\",axis=1)\n",
"\n",
"data_shuffle_test = shuffle(data_test_0)\n",
"test_labels = data_shuffle_test[\"index\"]\n",
"test_features = data_shuffle_test.drop(\"dateTime\",axis=1)\n",
"test_features = test_features.drop(\"index\",axis=1)\n",
"test_features = test_features.drop(\"whiteBalance\",axis=1)\n",
"\n",
"\n",
"# feature = feature.drop(\"left_block_H_hist\",axis=1)\n",
"# feature = feature.drop(\"right_block_H_hist\",axis=1)\n",
"# feature = feature.drop(\"whiteBlock_H_hist\",axis=1)\n",
"test_features.describe()\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"train_data = data_all\n",
"\n",
"# whiteBlock_R_zero = tain_data[tain_data[\"index\"] == 0 ][\"block_R\"]\n",
"# whiteBlock_G_zero = tain_data[tain_data[\"index\"] == 0 ][\"block_G\"]\n",
"# whiteBlock_B_zero = tain_data[tain_data[\"index\"] == 0 ][\"block_B\"]\n",
"\n",
"whiteBlock_R_one = train_data[train_data[\"index\"] == 1 ][\"left_block_R\"]\n",
"whiteBlock_G_one = train_data[train_data[\"index\"] == 1 ][\"left_block_G\"]\n",
"whiteBlock_B_one = train_data[train_data[\"index\"] == 1 ][\"left_block_B\"]\n",
"\n",
"whiteBlock_R_two = train_data[train_data[\"index\"] == 2 ][\"left_block_R\"]\n",
"whiteBlock_G_two = train_data[train_data[\"index\"] == 2 ][\"left_block_G\"]\n",
"whiteBlock_B_two = train_data[train_data[\"index\"] == 2 ][\"left_block_B\"]\n",
"\n",
"whiteBlock_R_three = train_data[train_data[\"index\"] == 3 ][\"left_block_R\"]\n",
"whiteBlock_G_three = train_data[train_data[\"index\"] == 3 ][\"left_block_G\"]\n",
"whiteBlock_B_three = train_data[train_data[\"index\"] == 3 ][\"left_block_B\"]\n",
"\n",
"whiteBlock_R_four = train_data[train_data[\"index\"] == 4 ][\"left_block_R\"]\n",
"whiteBlock_G_four = train_data[train_data[\"index\"] == 4 ][\"left_block_G\"]\n",
"whiteBlock_B_four = train_data[train_data[\"index\"] == 4 ][\"left_block_B\"]\n",
"\n",
"whiteBlock_R_five = train_data[train_data[\"index\"] == 5 ][\"left_block_R\"]\n",
"whiteBlock_G_five = train_data[train_data[\"index\"] == 5 ][\"left_block_G\"]\n",
"whiteBlock_B_five = train_data[train_data[\"index\"] == 5 ][\"left_block_B\"]\n",
"\n",
"whiteBlock_R_six = train_data[train_data[\"index\"] == 6 ][\"left_block_R\"]\n",
"whiteBlock_G_six = train_data[train_data[\"index\"] == 6 ][\"left_block_G\"]\n",
"whiteBlock_B_six = train_data[train_data[\"index\"] == 6 ][\"left_block_B\"]\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\nN4eVyNUUc1iBTOi0yybwdV0HBwfx/vvvQyaTYfv27ZQom5ubIRKJqFkwaeJZzSyY1NgWFhYuKx1W\njuMwMTGBmZkZ9PT0RDU15jgO//mf/4nvfOc7OHDgAD75yU+uSaNTaE3xkUceQXl5OW20WVhYwLPP\nPosPP/wQe/bsoY02u3fvhk6nS7rRZteuXbjrrrvwxS9+EQAwMTGBq666Cnq9PhW3tx6Qa7TJITGs\ndaddtmM1Xdf+/n7s2LEDhYWFYBgmSInH4/FAqVTS5h2j0Yiamho0NTVdNtGhy+XCxYsXoVKp0N7e\nHvW+5ubm8OCDDyI/Px8vvfTSmll38W2eqqv/f3v3H1N1vcdx/PmFgw6FQMsYRhvaOTgQGGGAeWOr\nLTa1oox15NbO7Bf+2HV1QTbyugpr6Kpxw9xxpsUityu76w9ZUbpisXJDyMVZdElyB0ijE8thAw6R\ncPjcP+D7laMc/Mk5dM778Zc753DO5zs33nzO9/15vePYuXMnjz32GFarlTNnzhi3N/T1VVRUUF1d\njclkoqqqijVr1tzwGlwuF8XFxTQ3N7No0SLmz5/P5s2bWb9+/Q2/d4iQoiiuXyA77YKRPtBXT+KZ\nLtf13LlztLW1YTKZiIiIICwsjOjoaGJjY2dNGPf1mNwxm5ycPO09UaUU9fX1vP7667z66qsUFBT8\nJa9ZzCrSfSpuHn922gWjsLAwzGYzZrMZm80GXMx1bW5u5o033qCjowOTyURfXx9PPPEEW7du5bbb\nbvNq4nE6nbjdbmMGon4kZLYn8fzxxx+0t7cTFRV1xY7Z33//nbKyMgYGBvjiiy/8GlUnhBRFcc38\n3WkXrObNm0dubi65ubn09/dTVlZGR0cHRUVFOJ1ObDabkeai7ybT0tKYM2cOw8PD9Pf3c/78ebq7\nuxkdHfVK4omKipoVX7cqpejp6eHnn3++4nlKpRSNjY1s376dbdu2YbPZZsU1iNAiRVFcFX922oWi\n3t5eVq5cyb59+7z+4BgZGaGtrY2mpiYOHDhAW1sb8+fP98p1NZvNXjMQz549azTxXJrE40/Dw8P8\n8MMPREZGXnF36Ha7efnll+nq6qK+vp4777zTjysV4iK5pyimFMhOO+Gbnuva0tJiNPH88ssv3HXX\nXcZuMjMzk8jISKOJR4+sm5wxOlOjnfQ1/vrrr3R3d5OUlMStt9467eubmpooLS2lqKiIzZs3y+5Q\n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\nYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1128a5128>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"\n",
"fig = plt.figure()\n",
"#plt.rcParams[\"figure.figsize\"] = 20,20\n",
"ax = Axes3D(fig)\n",
"\n",
"ax.set_xlim(0,255)\n",
"ax.set_ylim(0,255)\n",
"ax.set_zlim(0,255)\n",
"ax.set_xlabel('R')\n",
"ax.set_ylabel('G')\n",
"ax.set_zlabel('B')\n",
"ax.set_title('RGB colorspace')\n",
"#ax.scatter(whiteBlock_R_zero, whiteBlock_G_zero, whiteBlock_B_zero,s = 15,c='y')\n",
"ax.scatter(whiteBlock_R_one, whiteBlock_G_one, whiteBlock_B_one,s = 15,c='b')\n",
"\n",
"ax.scatter(whiteBlock_R_two, whiteBlock_G_two, whiteBlock_B_two,s = 15,c='g')\n",
"ax.scatter(whiteBlock_R_three, whiteBlock_G_three, whiteBlock_B_three,s = 15,c='R')\n",
"\n",
"ax.scatter(whiteBlock_R_four, whiteBlock_G_four, whiteBlock_B_four,s = 15,c='c')\n",
"\n",
"ax.scatter(whiteBlock_R_five, whiteBlock_G_five, whiteBlock_B_five,s = 15,c='black')\n",
"ax.scatter(whiteBlock_R_six, whiteBlock_G_six, whiteBlock_B_six,s = 15,c='pink')\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*把档位从数据中分割出来,去掉蛋白质的标记*"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"\n",
"\n",
"train_labels = train_data[\"index\"]\n",
"train_features = train_data.drop(\"index\",axis=1)\n",
"train_features = train_features.drop(\"whiteBalance\",axis=1)\n",
"train_features = train_features.drop(\"dateTime\",axis=1)\n",
"\n",
"# test_labels = test_data[\"index\"]\n",
"# test_features = test_data.drop(\"index\",axis=1)\n",
"# test_features = test_features.drop(\"whiteBalance\",axis=1)\n",
"# test_features = test_features.drop(\"dateTime\",axis=1)\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##分离方差的数据"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"\n",
"train_features = train_features.drop(\"left_block_R_stddev\",axis=1)\n",
"train_features = train_features.drop(\"left_block_G_stddev\",axis=1)\n",
"train_features = train_features.drop(\"left_block_B_stddev\",axis=1)\n",
"\n",
"train_features = train_features.drop(\"right_block_R_stddev\",axis=1)\n",
"train_features = train_features.drop(\"right_block_G_stddev\",axis=1)\n",
"train_features = train_features.drop(\"right_block_B_stddev\",axis=1)\n",
"\n",
"train_features = train_features.drop(\"whiteBlock_R_stddev\",axis=1)\n",
"train_features = train_features.drop(\"whiteBlock_G_stddev\",axis=1)\n",
"train_features = train_features.drop(\"whiteBlock_B_stddev\",axis=1)\n",
"\n",
"\n",
"train_features = train_features.drop(\"left_block_H_stddev\",axis=1)\n",
"train_features = train_features.drop(\"left_block_S_stddev\",axis=1)\n",
"train_features = train_features.drop(\"left_block_V_stddev\",axis=1)\n",
"\n",
"train_features = train_features.drop(\"right_block_H_stddev\",axis=1)\n",
"train_features = train_features.drop(\"right_block_S_stddev\",axis=1)\n",
"train_features = train_features.drop(\"right_block_V_stddev\",axis=1)\n",
"\n",
"train_features = train_features.drop(\"whiteBlock_H_stddev\",axis=1)\n",
"train_features = train_features.drop(\"whiteBlock_S_stddev\",axis=1)\n",
"train_features = train_features.drop(\"whiteBlock_V_stddev\",axis=1)\n",
"\n",
"\n",
"train_features = train_features.drop(\"left_block_l_stddev\",axis=1)\n",
"train_features = train_features.drop(\"left_block_a_stddev\",axis=1)\n",
"train_features = train_features.drop(\"left_block_b_stddev\",axis=1)\n",
"\n",
"train_features = train_features.drop(\"right_block_l_stddev\",axis=1)\n",
"train_features = train_features.drop(\"right_block_a_stddev\",axis=1)\n",
"train_features = train_features.drop(\"right_block_b_stddev\",axis=1)\n",
"\n",
"train_features = train_features.drop(\"whiteBlock_l_stddev\",axis=1)\n",
"train_features = train_features.drop(\"whiteBlock_a_stddev\",axis=1)\n",
"train_features = train_features.drop(\"whiteBlock_b_stddev\",axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>left_block_R</th>\n",
" <th>left_block_G</th>\n",
" <th>left_block_B</th>\n",
" <th>left_block_H</th>\n",
" <th>left_block_S</th>\n",
" <th>left_block_V</th>\n",
" <th>left_block_l</th>\n",
" <th>left_block_a</th>\n",
" <th>left_block_b</th>\n",
" <th>left_block_R_stddev</th>\n",
" <th>...</th>\n",
" <th>lelf_right_S_min</th>\n",
" <th>lelf_right_V_min</th>\n",
" <th>lelf_right_l_min</th>\n",
" <th>lelf_right_a_min</th>\n",
" <th>lelf_right_b_min</th>\n",
" <th>lelf_right_gray_value</th>\n",
" <th>lelf_right_gray_stddev</th>\n",
" <th>lelf_right_gray_hist</th>\n",
" <th>lelf_right_gray_max</th>\n",
" <th>lelf_right_gray_min</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>...</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>181.711119</td>\n",
" <td>155.462061</td>\n",
" <td>159.647932</td>\n",
" <td>162.571726</td>\n",
" <td>41.071007</td>\n",
" <td>181.767167</td>\n",
" <td>169.374283</td>\n",
" <td>138.098449</td>\n",
" <td>128.983630</td>\n",
" <td>10.268633</td>\n",
" <td>...</td>\n",
" <td>-2.489175</td>\n",
" <td>-1.542555</td>\n",
" <td>5.184096</td>\n",
" <td>-1.120518</td>\n",
" <td>0.966522</td>\n",
" <td>9.557815</td>\n",
" <td>-0.826047</td>\n",
" <td>29.528543</td>\n",
" <td>2.045423</td>\n",
" <td>5.080203</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>26.109634</td>\n",
" <td>31.315171</td>\n",
" <td>27.839729</td>\n",
" <td>75.188280</td>\n",
" <td>15.076930</td>\n",
" <td>26.178055</td>\n",
" <td>28.192785</td>\n",
" <td>4.886851</td>\n",
" <td>2.351777</td>\n",
" <td>5.944872</td>\n",
" <td>...</td>\n",
" <td>5.245273</td>\n",
" <td>24.802806</td>\n",
" <td>32.696606</td>\n",
" <td>2.467816</td>\n",
" <td>2.182566</td>\n",
" <td>20.176774</td>\n",
" <td>7.943762</td>\n",
" <td>25.447881</td>\n",
" <td>7.413327</td>\n",
" <td>32.543588</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>101.000000</td>\n",
" <td>82.000000</td>\n",
" <td>90.000000</td>\n",
" <td>7.000000</td>\n",
" <td>0.000000</td>\n",
" <td>101.000000</td>\n",
" <td>95.000000</td>\n",
" <td>125.000000</td>\n",
" <td>123.000000</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>-27.000000</td>\n",
" <td>-47.000000</td>\n",
" <td>-46.000000</td>\n",
" <td>-11.000000</td>\n",
" <td>-8.000000</td>\n",
" <td>-23.000000</td>\n",
" <td>-17.000000</td>\n",
" <td>-74.000000</td>\n",
" <td>-17.000000</td>\n",
" <td>-46.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>162.000000</td>\n",
" <td>130.000000</td>\n",
" <td>138.000000</td>\n",
" <td>111.000000</td>\n",
" <td>30.000000</td>\n",
" <td>162.000000</td>\n",
" <td>147.000000</td>\n",
" <td>135.000000</td>\n",
" <td>127.000000</td>\n",
" <td>4.000000</td>\n",
" <td>...</td>\n",
" <td>-6.000000</td>\n",
" <td>-23.000000</td>\n",
" <td>-24.000000</td>\n",
" <td>-3.000000</td>\n",
" <td>-1.000000</td>\n",
" <td>-7.000000</td>\n",
" <td>-9.000000</td>\n",
" <td>22.000000</td>\n",
" <td>-4.000000</td>\n",
" <td>-24.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>180.000000</td>\n",
" <td>153.000000</td>\n",
" <td>157.000000</td>\n",
" <td>193.000000</td>\n",
" <td>42.000000</td>\n",
" <td>180.000000</td>\n",
" <td>168.000000</td>\n",
" <td>140.000000</td>\n",
" <td>129.000000</td>\n",
" <td>11.000000</td>\n",
" <td>...</td>\n",
" <td>-2.000000</td>\n",
" <td>-10.000000</td>\n",
" <td>-11.000000</td>\n",
" <td>-1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>-1.000000</td>\n",
" <td>3.000000</td>\n",
" <td>33.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-11.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>199.000000</td>\n",
" <td>176.000000</td>\n",
" <td>177.000000</td>\n",
" <td>224.000000</td>\n",
" <td>52.000000</td>\n",
" <td>199.000000</td>\n",
" <td>188.000000</td>\n",
" <td>142.000000</td>\n",
" <td>131.000000</td>\n",
" <td>16.000000</td>\n",
" <td>...</td>\n",
" <td>1.000000</td>\n",
" <td>23.000000</td>\n",
" <td>37.000000</td>\n",
" <td>1.000000</td>\n",
" <td>3.000000</td>\n",
" <td>30.000000</td>\n",
" <td>6.000000</td>\n",
" <td>46.000000</td>\n",
" <td>9.000000</td>\n",
" <td>37.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>254.000000</td>\n",
" <td>254.000000</td>\n",
" <td>254.000000</td>\n",
" <td>246.000000</td>\n",
" <td>78.000000</td>\n",
" <td>254.000000</td>\n",
" <td>254.000000</td>\n",
" <td>146.000000</td>\n",
" <td>136.000000</td>\n",
" <td>22.000000</td>\n",
" <td>...</td>\n",
" <td>20.000000</td>\n",
" <td>51.000000</td>\n",
" <td>67.000000</td>\n",
" <td>7.000000</td>\n",
" <td>10.000000</td>\n",
" <td>51.000000</td>\n",
" <td>12.000000</td>\n",
" <td>88.000000</td>\n",
" <td>24.000000</td>\n",
" <td>68.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>8 rows × 200 columns</p>\n",
"</div>"
],
"text/plain": [
" left_block_R left_block_G left_block_B left_block_H \\\n",
"count 109834.000000 109834.000000 109834.000000 109834.000000 \n",
"mean 181.711119 155.462061 159.647932 162.571726 \n",
"std 26.109634 31.315171 27.839729 75.188280 \n",
"min 101.000000 82.000000 90.000000 7.000000 \n",
"25% 162.000000 130.000000 138.000000 111.000000 \n",
"50% 180.000000 153.000000 157.000000 193.000000 \n",
"75% 199.000000 176.000000 177.000000 224.000000 \n",
"max 254.000000 254.000000 254.000000 246.000000 \n",
"\n",
" left_block_S left_block_V left_block_l left_block_a \\\n",
"count 109834.000000 109834.000000 109834.000000 109834.000000 \n",
"mean 41.071007 181.767167 169.374283 138.098449 \n",
"std 15.076930 26.178055 28.192785 4.886851 \n",
"min 0.000000 101.000000 95.000000 125.000000 \n",
"25% 30.000000 162.000000 147.000000 135.000000 \n",
"50% 42.000000 180.000000 168.000000 140.000000 \n",
"75% 52.000000 199.000000 188.000000 142.000000 \n",
"max 78.000000 254.000000 254.000000 146.000000 \n",
"\n",
" left_block_b left_block_R_stddev ... \\\n",
"count 109834.000000 109834.000000 ... \n",
"mean 128.983630 10.268633 ... \n",
"std 2.351777 5.944872 ... \n",
"min 123.000000 0.000000 ... \n",
"25% 127.000000 4.000000 ... \n",
"50% 129.000000 11.000000 ... \n",
"75% 131.000000 16.000000 ... \n",
"max 136.000000 22.000000 ... \n",
"\n",
" lelf_right_S_min lelf_right_V_min lelf_right_l_min lelf_right_a_min \\\n",
"count 109834.000000 109834.000000 109834.000000 109834.000000 \n",
"mean -2.489175 -1.542555 5.184096 -1.120518 \n",
"std 5.245273 24.802806 32.696606 2.467816 \n",
"min -27.000000 -47.000000 -46.000000 -11.000000 \n",
"25% -6.000000 -23.000000 -24.000000 -3.000000 \n",
"50% -2.000000 -10.000000 -11.000000 -1.000000 \n",
"75% 1.000000 23.000000 37.000000 1.000000 \n",
"max 20.000000 51.000000 67.000000 7.000000 \n",
"\n",
" lelf_right_b_min lelf_right_gray_value lelf_right_gray_stddev \\\n",
"count 109834.000000 109834.000000 109834.000000 \n",
"mean 0.966522 9.557815 -0.826047 \n",
"std 2.182566 20.176774 7.943762 \n",
"min -8.000000 -23.000000 -17.000000 \n",
"25% -1.000000 -7.000000 -9.000000 \n",
"50% 1.000000 -1.000000 3.000000 \n",
"75% 3.000000 30.000000 6.000000 \n",
"max 10.000000 51.000000 12.000000 \n",
"\n",
" lelf_right_gray_hist lelf_right_gray_max lelf_right_gray_min \n",
"count 109834.000000 109834.000000 109834.000000 \n",
"mean 29.528543 2.045423 5.080203 \n",
"std 25.447881 7.413327 32.543588 \n",
"min -74.000000 -17.000000 -46.000000 \n",
"25% 22.000000 -4.000000 -24.000000 \n",
"50% 33.000000 0.000000 -11.000000 \n",
"75% 46.000000 9.000000 37.000000 \n",
"max 88.000000 24.000000 68.000000 \n",
"\n",
"[8 rows x 200 columns]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"\n",
"train_features['lelf_right_R'] = train_features['left_block_R'] - train_features['right_block_R']\n",
"train_features['lelf_right_G'] = train_features['left_block_G'] - train_features['right_block_G']\n",
"train_features['lelf_right_B'] = train_features['left_block_B'] - train_features['right_block_B']\n",
"\n",
"train_features['lelf_right_H'] = train_features['left_block_H'] - train_features['right_block_H']\n",
"train_features['lelf_right_S'] = train_features['left_block_S'] - train_features['right_block_S']\n",
"train_features['lelf_right_V'] = train_features['left_block_V'] - train_features['right_block_V']\n",
"\n",
"train_features['lelf_right_l'] = train_features['left_block_l'] - train_features['right_block_l']\n",
"train_features['lelf_right_a'] = train_features['left_block_a'] - train_features['right_block_a']\n",
"train_features['lelf_right_b'] = train_features['left_block_b'] - train_features['right_block_b']\n",
"\n",
"train_features['lelf_right_R_stddev'] = train_features['left_block_R_stddev'] - train_features['right_block_R_stddev']\n",
"train_features['lelf_right_G_stddev'] = train_features['left_block_G_stddev'] - train_features['right_block_G_stddev']\n",
"train_features['lelf_right_B_stddev'] = train_features['left_block_B_stddev'] - train_features['right_block_B_stddev']\n",
"\n",
"train_features['lelf_right_H_stddev'] = train_features['left_block_H_stddev'] - train_features['right_block_H_stddev']\n",
"train_features['lelf_right_S_stddev'] = train_features['left_block_S_stddev'] - train_features['right_block_S_stddev']\n",
"train_features['lelf_right_V_stddev'] = train_features['left_block_V_stddev'] - train_features['right_block_V_stddev']\n",
"\n",
"train_features['lelf_right_l_stddev'] = train_features['left_block_l_stddev'] - train_features['right_block_l_stddev']\n",
"train_features['lelf_right_a_stddev'] = train_features['left_block_a_stddev'] - train_features['right_block_a_stddev']\n",
"train_features['lelf_right_b_stddev'] = train_features['left_block_b_stddev'] - train_features['right_block_b_stddev']\n",
"\n",
"train_features['lelf_right_R_hist'] = train_features['left_block_R_hist'] - train_features['right_block_R_hist']\n",
"train_features['lelf_right_G_hist'] = train_features['left_block_G_hist'] - train_features['right_block_G_hist']\n",
"train_features['lelf_right_B_hist'] = train_features['left_block_B_hist'] - train_features['right_block_B_hist']\n",
"\n",
"train_features['lelf_right_H_hist'] = train_features['left_block_H_hist'] - train_features['right_block_H_hist']\n",
"train_features['lelf_right_S_hist'] = train_features['left_block_S_hist'] - train_features['right_block_S_hist']\n",
"train_features['lelf_right_V_hist'] = train_features['left_block_V_hist'] - train_features['right_block_V_hist']\n",
"\n",
"train_features['lelf_right_l_hist'] = train_features['left_block_l_hist'] - train_features['right_block_l_hist']\n",
"train_features['lelf_right_a_hist'] = train_features['left_block_a_hist'] - train_features['right_block_a_hist']\n",
"train_features['lelf_right_b_hist'] = train_features['left_block_b_hist'] - train_features['right_block_b_hist']\n",
"\n",
"train_features['lelf_right_R_max'] = train_features['left_block_R_max'] - train_features['right_block_R_max']\n",
"train_features['lelf_right_G_max'] = train_features['left_block_G_max'] - train_features['right_block_G_max']\n",
"train_features['lelf_right_B_max'] = train_features['left_block_B_max'] - train_features['right_block_B_max']\n",
"\n",
"train_features['lelf_right_H_max'] = train_features['left_block_H_max'] - train_features['right_block_H_max']\n",
"train_features['lelf_right_S_max'] = train_features['left_block_S_max'] - train_features['right_block_S_max']\n",
"train_features['lelf_right_V_max'] = train_features['left_block_V_max'] - train_features['right_block_V_max']\n",
"\n",
"train_features['lelf_right_l_max'] = train_features['left_block_l_max'] - train_features['right_block_l_max']\n",
"train_features['lelf_right_a_max'] = train_features['left_block_a_max'] - train_features['right_block_a_max']\n",
"train_features['lelf_right_b_max'] = train_features['left_block_b_max'] - train_features['right_block_b_max']\n",
"\n",
"\n",
"\n",
"train_features['lelf_right_R_min'] = train_features['left_block_R_min'] - train_features['right_block_R_min']\n",
"train_features['lelf_right_G_min'] = train_features['left_block_G_min'] - train_features['right_block_G_min']\n",
"train_features['lelf_right_B_min'] = train_features['left_block_B_min'] - train_features['right_block_B_min']\n",
"\n",
"train_features['lelf_right_H_min'] = train_features['left_block_H_min'] - train_features['right_block_H_min']\n",
"train_features['lelf_right_S_min'] = train_features['left_block_S_min'] - train_features['right_block_S_min']\n",
"train_features['lelf_right_V_min'] = train_features['left_block_V_min'] - train_features['right_block_V_min']\n",
"\n",
"train_features['lelf_right_l_min'] = train_features['left_block_l_min'] - train_features['right_block_l_min']\n",
"train_features['lelf_right_a_min'] = train_features['left_block_a_min'] - train_features['right_block_a_min']\n",
"train_features['lelf_right_b_min'] = train_features['left_block_b_min'] - train_features['right_block_b_min']\n",
"\n",
"train_features['lelf_right_gray_value'] = train_features['left_grayValue'] - train_features['right_grayValue']\n",
"train_features['lelf_right_gray_stddev'] = train_features['left_grayStddevValue'] - train_features['right_grayStddevValue']\n",
"train_features['lelf_right_gray_hist'] = train_features['left_grayHist'] - train_features['right_grayHist']\n",
"train_features['lelf_right_gray_max'] = train_features['left_grayMax'] - train_features['right_grayMax']\n",
"train_features['lelf_right_gray_min'] = train_features['left_grayMin'] - train_features['right_grayMin']\n",
"train_features.describe()"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>left_block_R</th>\n",
" <th>left_block_G</th>\n",
" <th>left_block_B</th>\n",
" <th>left_block_H</th>\n",
" <th>left_block_S</th>\n",
" <th>left_block_V</th>\n",
" <th>left_block_l</th>\n",
" <th>left_block_a</th>\n",
" <th>left_block_b</th>\n",
" <th>left_block_R_stddev</th>\n",
" <th>...</th>\n",
" <th>lelf_right_S_min</th>\n",
" <th>lelf_right_V_min</th>\n",
" <th>lelf_right_l_min</th>\n",
" <th>lelf_right_a_min</th>\n",
" <th>lelf_right_b_min</th>\n",
" <th>lelf_right_gray_value</th>\n",
" <th>lelf_right_gray_stddev</th>\n",
" <th>lelf_right_gray_hist</th>\n",
" <th>lelf_right_gray_max</th>\n",
" <th>lelf_right_gray_min</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>...</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>177.537162</td>\n",
" <td>154.988809</td>\n",
" <td>160.795291</td>\n",
" <td>173.659840</td>\n",
" <td>36.343644</td>\n",
" <td>177.787584</td>\n",
" <td>168.331609</td>\n",
" <td>136.974240</td>\n",
" <td>127.616343</td>\n",
" <td>8.358003</td>\n",
" <td>...</td>\n",
" <td>-6.603568</td>\n",
" <td>0.697741</td>\n",
" <td>8.245777</td>\n",
" <td>-1.225190</td>\n",
" <td>0.677787</td>\n",
" <td>11.064189</td>\n",
" <td>-1.537901</td>\n",
" <td>25.800570</td>\n",
" <td>2.967166</td>\n",
" <td>8.171769</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>23.055906</td>\n",
" <td>27.120240</td>\n",
" <td>24.257571</td>\n",
" <td>85.816738</td>\n",
" <td>15.103201</td>\n",
" <td>23.211556</td>\n",
" <td>24.182989</td>\n",
" <td>5.539367</td>\n",
" <td>3.747435</td>\n",
" <td>5.360384</td>\n",
" <td>...</td>\n",
" <td>15.524941</td>\n",
" <td>20.699370</td>\n",
" <td>31.093443</td>\n",
" <td>2.420103</td>\n",
" <td>1.601545</td>\n",
" <td>18.888033</td>\n",
" <td>7.605926</td>\n",
" <td>26.195686</td>\n",
" <td>7.129989</td>\n",
" <td>31.073313</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>112.000000</td>\n",
" <td>93.000000</td>\n",
" <td>92.000000</td>\n",
" <td>2.000000</td>\n",
" <td>0.000000</td>\n",
" <td>112.000000</td>\n",
" <td>106.000000</td>\n",
" <td>124.000000</td>\n",
" <td>117.000000</td>\n",
" <td>0.000000</td>\n",
" <td>...</td>\n",
" <td>-75.000000</td>\n",
" <td>-68.000000</td>\n",
" <td>-51.000000</td>\n",
" <td>-11.000000</td>\n",
" <td>-5.000000</td>\n",
" <td>-21.000000</td>\n",
" <td>-19.000000</td>\n",
" <td>-61.000000</td>\n",
" <td>-16.000000</td>\n",
" <td>-50.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>166.000000</td>\n",
" <td>140.000000</td>\n",
" <td>147.000000</td>\n",
" <td>116.000000</td>\n",
" <td>25.000000</td>\n",
" <td>166.000000</td>\n",
" <td>155.750000</td>\n",
" <td>133.000000</td>\n",
" <td>125.000000</td>\n",
" <td>3.000000</td>\n",
" <td>...</td>\n",
" <td>-15.000000</td>\n",
" <td>-5.000000</td>\n",
" <td>-20.000000</td>\n",
" <td>-3.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-6.000000</td>\n",
" <td>-7.000000</td>\n",
" <td>12.000000</td>\n",
" <td>-3.000000</td>\n",
" <td>-20.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>173.000000</td>\n",
" <td>152.000000</td>\n",
" <td>155.000000</td>\n",
" <td>222.000000</td>\n",
" <td>35.000000</td>\n",
" <td>174.000000</td>\n",
" <td>166.000000</td>\n",
" <td>138.000000</td>\n",
" <td>127.000000</td>\n",
" <td>8.000000</td>\n",
" <td>...</td>\n",
" <td>-5.000000</td>\n",
" <td>2.000000</td>\n",
" <td>12.000000</td>\n",
" <td>-1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>13.000000</td>\n",
" <td>-2.000000</td>\n",
" <td>28.000000</td>\n",
" <td>3.000000</td>\n",
" <td>12.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>187.000000</td>\n",
" <td>162.000000</td>\n",
" <td>170.000000</td>\n",
" <td>234.000000</td>\n",
" <td>49.000000</td>\n",
" <td>187.000000</td>\n",
" <td>174.000000</td>\n",
" <td>142.000000</td>\n",
" <td>130.000000</td>\n",
" <td>12.000000</td>\n",
" <td>...</td>\n",
" <td>3.000000</td>\n",
" <td>8.000000</td>\n",
" <td>30.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>22.000000</td>\n",
" <td>5.000000</td>\n",
" <td>43.000000</td>\n",
" <td>8.000000</td>\n",
" <td>29.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>254.000000</td>\n",
" <td>255.000000</td>\n",
" <td>255.000000</td>\n",
" <td>251.000000</td>\n",
" <td>74.000000</td>\n",
" <td>255.000000</td>\n",
" <td>255.000000</td>\n",
" <td>148.000000</td>\n",
" <td>139.000000</td>\n",
" <td>20.000000</td>\n",
" <td>...</td>\n",
" <td>41.000000</td>\n",
" <td>53.000000</td>\n",
" <td>73.000000</td>\n",
" <td>5.000000</td>\n",
" <td>7.000000</td>\n",
" <td>58.000000</td>\n",
" <td>14.000000</td>\n",
" <td>93.000000</td>\n",
" <td>26.000000</td>\n",
" <td>73.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>8 rows × 200 columns</p>\n",
"</div>"
],
"text/plain": [
" left_block_R left_block_G left_block_B left_block_H left_block_S \\\n",
"count 9472.000000 9472.000000 9472.000000 9472.000000 9472.000000 \n",
"mean 177.537162 154.988809 160.795291 173.659840 36.343644 \n",
"std 23.055906 27.120240 24.257571 85.816738 15.103201 \n",
"min 112.000000 93.000000 92.000000 2.000000 0.000000 \n",
"25% 166.000000 140.000000 147.000000 116.000000 25.000000 \n",
"50% 173.000000 152.000000 155.000000 222.000000 35.000000 \n",
"75% 187.000000 162.000000 170.000000 234.000000 49.000000 \n",
"max 254.000000 255.000000 255.000000 251.000000 74.000000 \n",
"\n",
" left_block_V left_block_l left_block_a left_block_b \\\n",
"count 9472.000000 9472.000000 9472.000000 9472.000000 \n",
"mean 177.787584 168.331609 136.974240 127.616343 \n",
"std 23.211556 24.182989 5.539367 3.747435 \n",
"min 112.000000 106.000000 124.000000 117.000000 \n",
"25% 166.000000 155.750000 133.000000 125.000000 \n",
"50% 174.000000 166.000000 138.000000 127.000000 \n",
"75% 187.000000 174.000000 142.000000 130.000000 \n",
"max 255.000000 255.000000 148.000000 139.000000 \n",
"\n",
" left_block_R_stddev ... lelf_right_S_min \\\n",
"count 9472.000000 ... 9472.000000 \n",
"mean 8.358003 ... -6.603568 \n",
"std 5.360384 ... 15.524941 \n",
"min 0.000000 ... -75.000000 \n",
"25% 3.000000 ... -15.000000 \n",
"50% 8.000000 ... -5.000000 \n",
"75% 12.000000 ... 3.000000 \n",
"max 20.000000 ... 41.000000 \n",
"\n",
" lelf_right_V_min lelf_right_l_min lelf_right_a_min lelf_right_b_min \\\n",
"count 9472.000000 9472.000000 9472.000000 9472.000000 \n",
"mean 0.697741 8.245777 -1.225190 0.677787 \n",
"std 20.699370 31.093443 2.420103 1.601545 \n",
"min -68.000000 -51.000000 -11.000000 -5.000000 \n",
"25% -5.000000 -20.000000 -3.000000 0.000000 \n",
"50% 2.000000 12.000000 -1.000000 0.000000 \n",
"75% 8.000000 30.000000 0.000000 1.000000 \n",
"max 53.000000 73.000000 5.000000 7.000000 \n",
"\n",
" lelf_right_gray_value lelf_right_gray_stddev lelf_right_gray_hist \\\n",
"count 9472.000000 9472.000000 9472.000000 \n",
"mean 11.064189 -1.537901 25.800570 \n",
"std 18.888033 7.605926 26.195686 \n",
"min -21.000000 -19.000000 -61.000000 \n",
"25% -6.000000 -7.000000 12.000000 \n",
"50% 13.000000 -2.000000 28.000000 \n",
"75% 22.000000 5.000000 43.000000 \n",
"max 58.000000 14.000000 93.000000 \n",
"\n",
" lelf_right_gray_max lelf_right_gray_min \n",
"count 9472.000000 9472.000000 \n",
"mean 2.967166 8.171769 \n",
"std 7.129989 31.073313 \n",
"min -16.000000 -50.000000 \n",
"25% -3.000000 -20.000000 \n",
"50% 3.000000 12.000000 \n",
"75% 8.000000 29.000000 \n",
"max 26.000000 73.000000 \n",
"\n",
"[8 rows x 200 columns]"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
" \n",
"test_features['lelf_right_R'] = test_features['left_block_R'] - test_features['right_block_R']\n",
"test_features['lelf_right_G'] = test_features['left_block_G'] - test_features['right_block_G']\n",
"test_features['lelf_right_B'] = test_features['left_block_B'] - test_features['right_block_B']\n",
"\n",
"test_features['lelf_right_H'] = test_features['left_block_H'] - test_features['right_block_H']\n",
"test_features['lelf_right_S'] = test_features['left_block_S'] - test_features['right_block_S']\n",
"test_features['lelf_right_V'] = test_features['left_block_V'] - test_features['right_block_V']\n",
"\n",
"test_features['lelf_right_l'] = test_features['left_block_l'] - test_features['right_block_l']\n",
"test_features['lelf_right_a'] = test_features['left_block_a'] - test_features['right_block_a']\n",
"test_features['lelf_right_b'] = test_features['left_block_b'] - test_features['right_block_b']\n",
"\n",
"test_features['lelf_right_R_stddev'] = test_features['left_block_R_stddev'] - test_features['right_block_R_stddev']\n",
"test_features['lelf_right_G_stddev'] = test_features['left_block_G_stddev'] - test_features['right_block_G_stddev']\n",
"test_features['lelf_right_B_stddev'] = test_features['left_block_B_stddev'] - test_features['right_block_B_stddev']\n",
"\n",
"test_features['lelf_right_H_stddev'] = test_features['left_block_H_stddev'] - test_features['right_block_H_stddev']\n",
"test_features['lelf_right_S_stddev'] = test_features['left_block_S_stddev'] - test_features['right_block_S_stddev']\n",
"test_features['lelf_right_V_stddev'] = test_features['left_block_V_stddev'] - test_features['right_block_V_stddev']\n",
"\n",
"test_features['lelf_right_l_stddev'] = test_features['left_block_l_stddev'] - test_features['right_block_l_stddev']\n",
"test_features['lelf_right_a_stddev'] = test_features['left_block_a_stddev'] - test_features['right_block_a_stddev']\n",
"test_features['lelf_right_b_stddev'] = test_features['left_block_b_stddev'] - test_features['right_block_b_stddev']\n",
"\n",
"test_features['lelf_right_R_hist'] = test_features['left_block_R_hist'] - test_features['right_block_R_hist']\n",
"test_features['lelf_right_G_hist'] = test_features['left_block_G_hist'] - test_features['right_block_G_hist']\n",
"test_features['lelf_right_B_hist'] = test_features['left_block_B_hist'] - test_features['right_block_B_hist']\n",
"\n",
"test_features['lelf_right_H_hist'] = test_features['left_block_H_hist'] - test_features['right_block_H_hist']\n",
"test_features['lelf_right_S_hist'] = test_features['left_block_S_hist'] - test_features['right_block_S_hist']\n",
"test_features['lelf_right_V_hist'] = test_features['left_block_V_hist'] - test_features['right_block_V_hist']\n",
"\n",
"test_features['lelf_right_l_hist'] = test_features['left_block_l_hist'] - test_features['right_block_l_hist']\n",
"test_features['lelf_right_a_hist'] = test_features['left_block_a_hist'] - test_features['right_block_a_hist']\n",
"test_features['lelf_right_b_hist'] = test_features['left_block_b_hist'] - test_features['right_block_b_hist']\n",
"\n",
"test_features['lelf_right_R_max'] = test_features['left_block_R_max'] - test_features['right_block_R_max']\n",
"test_features['lelf_right_G_max'] = test_features['left_block_G_max'] - test_features['right_block_G_max']\n",
"test_features['lelf_right_B_max'] = test_features['left_block_B_max'] - test_features['right_block_B_max']\n",
"\n",
"test_features['lelf_right_H_max'] = test_features['left_block_H_max'] - test_features['right_block_H_max']\n",
"test_features['lelf_right_S_max'] = test_features['left_block_S_max'] - test_features['right_block_S_max']\n",
"test_features['lelf_right_V_max'] = test_features['left_block_V_max'] - test_features['right_block_V_max']\n",
"\n",
"test_features['lelf_right_l_max'] = test_features['left_block_l_max'] - test_features['right_block_l_max']\n",
"test_features['lelf_right_a_max'] = test_features['left_block_a_max'] - test_features['right_block_a_max']\n",
"test_features['lelf_right_b_max'] = test_features['left_block_b_max'] - test_features['right_block_b_max']\n",
"\n",
"\n",
"\n",
"test_features['lelf_right_R_min'] = test_features['left_block_R_min'] - test_features['right_block_R_min']\n",
"test_features['lelf_right_G_min'] = test_features['left_block_G_min'] - test_features['right_block_G_min']\n",
"test_features['lelf_right_B_min'] = test_features['left_block_B_min'] - test_features['right_block_B_min']\n",
"\n",
"test_features['lelf_right_H_min'] = test_features['left_block_H_min'] - test_features['right_block_H_min']\n",
"test_features['lelf_right_S_min'] = test_features['left_block_S_min'] - test_features['right_block_S_min']\n",
"test_features['lelf_right_V_min'] = test_features['left_block_V_min'] - test_features['right_block_V_min']\n",
"\n",
"test_features['lelf_right_l_min'] = test_features['left_block_l_min'] - test_features['right_block_l_min']\n",
"test_features['lelf_right_a_min'] = test_features['left_block_a_min'] - test_features['right_block_a_min']\n",
"test_features['lelf_right_b_min'] = test_features['left_block_b_min'] - test_features['right_block_b_min']\n",
"\n",
"test_features['lelf_right_gray_value'] = test_features['left_grayValue'] - test_features['right_grayValue']\n",
"test_features['lelf_right_gray_stddev'] = test_features['left_grayStddevValue'] - test_features['right_grayStddevValue']\n",
"test_features['lelf_right_gray_hist'] = test_features['left_grayHist'] - test_features['right_grayHist']\n",
"test_features['lelf_right_gray_max'] = test_features['left_grayMax'] - test_features['right_grayMax']\n",
"test_features['lelf_right_gray_min'] = test_features['left_grayMin'] - test_features['right_grayMin']\n",
"\n",
"test_features.describe()"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>lelf_right_R</th>\n",
" <th>lelf_right_G</th>\n",
" <th>lelf_right_B</th>\n",
" <th>lelf_right_H</th>\n",
" <th>lelf_right_S</th>\n",
" <th>lelf_right_V</th>\n",
" <th>lelf_right_l</th>\n",
" <th>lelf_right_a</th>\n",
" <th>lelf_right_b</th>\n",
" <th>lelf_right_R_stddev</th>\n",
" <th>...</th>\n",
" <th>lelf_right_S_min</th>\n",
" <th>lelf_right_V_min</th>\n",
" <th>lelf_right_l_min</th>\n",
" <th>lelf_right_a_min</th>\n",
" <th>lelf_right_b_min</th>\n",
" <th>lelf_right_gray_value</th>\n",
" <th>lelf_right_gray_stddev</th>\n",
" <th>lelf_right_gray_hist</th>\n",
" <th>lelf_right_gray_max</th>\n",
" <th>lelf_right_gray_min</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>...</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" <td>109834.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>3.540042</td>\n",
" <td>12.867190</td>\n",
" <td>8.510470</td>\n",
" <td>-44.871087</td>\n",
" <td>-11.947120</td>\n",
" <td>3.595717</td>\n",
" <td>9.693847</td>\n",
" <td>-4.348617</td>\n",
" <td>0.813346</td>\n",
" <td>0.702742</td>\n",
" <td>...</td>\n",
" <td>-2.489175</td>\n",
" <td>-1.542555</td>\n",
" <td>5.184096</td>\n",
" <td>-1.120518</td>\n",
" <td>0.966522</td>\n",
" <td>9.557815</td>\n",
" <td>-0.826047</td>\n",
" <td>29.528543</td>\n",
" <td>2.045423</td>\n",
" <td>5.080203</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>13.801248</td>\n",
" <td>23.904395</td>\n",
" <td>18.549766</td>\n",
" <td>67.982182</td>\n",
" <td>16.598607</td>\n",
" <td>13.869222</td>\n",
" <td>20.099227</td>\n",
" <td>5.209274</td>\n",
" <td>1.350033</td>\n",
" <td>6.230297</td>\n",
" <td>...</td>\n",
" <td>5.245273</td>\n",
" <td>24.802806</td>\n",
" <td>32.696606</td>\n",
" <td>2.467816</td>\n",
" <td>2.182566</td>\n",
" <td>20.176774</td>\n",
" <td>7.943762</td>\n",
" <td>25.447881</td>\n",
" <td>7.413327</td>\n",
" <td>32.543588</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>-22.000000</td>\n",
" <td>-24.000000</td>\n",
" <td>-22.000000</td>\n",
" <td>-225.000000</td>\n",
" <td>-52.000000</td>\n",
" <td>-22.000000</td>\n",
" <td>-23.000000</td>\n",
" <td>-16.000000</td>\n",
" <td>-3.000000</td>\n",
" <td>-13.000000</td>\n",
" <td>...</td>\n",
" <td>-27.000000</td>\n",
" <td>-47.000000</td>\n",
" <td>-46.000000</td>\n",
" <td>-11.000000</td>\n",
" <td>-8.000000</td>\n",
" <td>-23.000000</td>\n",
" <td>-17.000000</td>\n",
" <td>-74.000000</td>\n",
" <td>-17.000000</td>\n",
" <td>-46.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>-8.000000</td>\n",
" <td>-8.000000</td>\n",
" <td>-7.000000</td>\n",
" <td>-102.000000</td>\n",
" <td>-28.000000</td>\n",
" <td>-8.000000</td>\n",
" <td>-7.000000</td>\n",
" <td>-9.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-5.000000</td>\n",
" <td>...</td>\n",
" <td>-6.000000</td>\n",
" <td>-23.000000</td>\n",
" <td>-24.000000</td>\n",
" <td>-3.000000</td>\n",
" <td>-1.000000</td>\n",
" <td>-7.000000</td>\n",
" <td>-9.000000</td>\n",
" <td>22.000000</td>\n",
" <td>-4.000000</td>\n",
" <td>-24.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>-2.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-1.000000</td>\n",
" <td>-10.000000</td>\n",
" <td>-2.000000</td>\n",
" <td>-2.000000</td>\n",
" <td>-1.000000</td>\n",
" <td>-2.000000</td>\n",
" <td>1.000000</td>\n",
" <td>3.000000</td>\n",
" <td>...</td>\n",
" <td>-2.000000</td>\n",
" <td>-10.000000</td>\n",
" <td>-11.000000</td>\n",
" <td>-1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>-1.000000</td>\n",
" <td>3.000000</td>\n",
" <td>33.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-11.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>17.000000</td>\n",
" <td>37.000000</td>\n",
" <td>27.000000</td>\n",
" <td>6.000000</td>\n",
" <td>3.000000</td>\n",
" <td>17.000000</td>\n",
" <td>30.000000</td>\n",
" <td>0.000000</td>\n",
" <td>2.000000</td>\n",
" <td>6.000000</td>\n",
" <td>...</td>\n",
" <td>1.000000</td>\n",
" <td>23.000000</td>\n",
" <td>37.000000</td>\n",
" <td>1.000000</td>\n",
" <td>3.000000</td>\n",
" <td>30.000000</td>\n",
" <td>6.000000</td>\n",
" <td>46.000000</td>\n",
" <td>9.000000</td>\n",
" <td>37.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>36.000000</td>\n",
" <td>61.000000</td>\n",
" <td>49.000000</td>\n",
" <td>64.000000</td>\n",
" <td>14.000000</td>\n",
" <td>36.000000</td>\n",
" <td>50.000000</td>\n",
" <td>4.000000</td>\n",
" <td>6.000000</td>\n",
" <td>12.000000</td>\n",
" <td>...</td>\n",
" <td>20.000000</td>\n",
" <td>51.000000</td>\n",
" <td>67.000000</td>\n",
" <td>7.000000</td>\n",
" <td>10.000000</td>\n",
" <td>51.000000</td>\n",
" <td>12.000000</td>\n",
" <td>88.000000</td>\n",
" <td>24.000000</td>\n",
" <td>68.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>8 rows × 50 columns</p>\n",
"</div>"
],
"text/plain": [
" lelf_right_R lelf_right_G lelf_right_B lelf_right_H \\\n",
"count 109834.000000 109834.000000 109834.000000 109834.000000 \n",
"mean 3.540042 12.867190 8.510470 -44.871087 \n",
"std 13.801248 23.904395 18.549766 67.982182 \n",
"min -22.000000 -24.000000 -22.000000 -225.000000 \n",
"25% -8.000000 -8.000000 -7.000000 -102.000000 \n",
"50% -2.000000 0.000000 -1.000000 -10.000000 \n",
"75% 17.000000 37.000000 27.000000 6.000000 \n",
"max 36.000000 61.000000 49.000000 64.000000 \n",
"\n",
" lelf_right_S lelf_right_V lelf_right_l lelf_right_a \\\n",
"count 109834.000000 109834.000000 109834.000000 109834.000000 \n",
"mean -11.947120 3.595717 9.693847 -4.348617 \n",
"std 16.598607 13.869222 20.099227 5.209274 \n",
"min -52.000000 -22.000000 -23.000000 -16.000000 \n",
"25% -28.000000 -8.000000 -7.000000 -9.000000 \n",
"50% -2.000000 -2.000000 -1.000000 -2.000000 \n",
"75% 3.000000 17.000000 30.000000 0.000000 \n",
"max 14.000000 36.000000 50.000000 4.000000 \n",
"\n",
" lelf_right_b lelf_right_R_stddev ... \\\n",
"count 109834.000000 109834.000000 ... \n",
"mean 0.813346 0.702742 ... \n",
"std 1.350033 6.230297 ... \n",
"min -3.000000 -13.000000 ... \n",
"25% 0.000000 -5.000000 ... \n",
"50% 1.000000 3.000000 ... \n",
"75% 2.000000 6.000000 ... \n",
"max 6.000000 12.000000 ... \n",
"\n",
" lelf_right_S_min lelf_right_V_min lelf_right_l_min lelf_right_a_min \\\n",
"count 109834.000000 109834.000000 109834.000000 109834.000000 \n",
"mean -2.489175 -1.542555 5.184096 -1.120518 \n",
"std 5.245273 24.802806 32.696606 2.467816 \n",
"min -27.000000 -47.000000 -46.000000 -11.000000 \n",
"25% -6.000000 -23.000000 -24.000000 -3.000000 \n",
"50% -2.000000 -10.000000 -11.000000 -1.000000 \n",
"75% 1.000000 23.000000 37.000000 1.000000 \n",
"max 20.000000 51.000000 67.000000 7.000000 \n",
"\n",
" lelf_right_b_min lelf_right_gray_value lelf_right_gray_stddev \\\n",
"count 109834.000000 109834.000000 109834.000000 \n",
"mean 0.966522 9.557815 -0.826047 \n",
"std 2.182566 20.176774 7.943762 \n",
"min -8.000000 -23.000000 -17.000000 \n",
"25% -1.000000 -7.000000 -9.000000 \n",
"50% 1.000000 -1.000000 3.000000 \n",
"75% 3.000000 30.000000 6.000000 \n",
"max 10.000000 51.000000 12.000000 \n",
"\n",
" lelf_right_gray_hist lelf_right_gray_max lelf_right_gray_min \n",
"count 109834.000000 109834.000000 109834.000000 \n",
"mean 29.528543 2.045423 5.080203 \n",
"std 25.447881 7.413327 32.543588 \n",
"min -74.000000 -17.000000 -46.000000 \n",
"25% 22.000000 -4.000000 -24.000000 \n",
"50% 33.000000 0.000000 -11.000000 \n",
"75% 46.000000 9.000000 37.000000 \n",
"max 88.000000 24.000000 68.000000 \n",
"\n",
"[8 rows x 50 columns]"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_features_9 = pd.DataFrame()\n",
"train_features_9['lelf_right_R'] = train_features['left_block_R'] - train_features['right_block_R']\n",
"train_features_9['lelf_right_G'] = train_features['left_block_G'] - train_features['right_block_G']\n",
"train_features_9['lelf_right_B'] = train_features['left_block_B'] - train_features['right_block_B']\n",
"\n",
"train_features_9['lelf_right_H'] = train_features['left_block_H'] - train_features['right_block_H']\n",
"train_features_9['lelf_right_S'] = train_features['left_block_S'] - train_features['right_block_S']\n",
"train_features_9['lelf_right_V'] = train_features['left_block_V'] - train_features['right_block_V']\n",
"\n",
"train_features_9['lelf_right_l'] = train_features['left_block_l'] - train_features['right_block_l']\n",
"train_features_9['lelf_right_a'] = train_features['left_block_a'] - train_features['right_block_a']\n",
"train_features_9['lelf_right_b'] = train_features['left_block_b'] - train_features['right_block_b']\n",
"\n",
"train_features_9['lelf_right_R_stddev'] = train_features['left_block_R_stddev'] - train_features['right_block_R_stddev']\n",
"train_features_9['lelf_right_G_stddev'] = train_features['left_block_G_stddev'] - train_features['right_block_G_stddev']\n",
"train_features_9['lelf_right_B_stddev'] = train_features['left_block_B_stddev'] - train_features['right_block_B_stddev']\n",
"\n",
"train_features_9['lelf_right_H_stddev'] = train_features['left_block_H_stddev'] - train_features['right_block_H_stddev']\n",
"train_features_9['lelf_right_S_stddev'] = train_features['left_block_S_stddev'] - train_features['right_block_S_stddev']\n",
"train_features_9['lelf_right_V_stddev'] = train_features['left_block_V_stddev'] - train_features['right_block_V_stddev']\n",
"\n",
"train_features_9['lelf_right_l_stddev'] = train_features['left_block_l_stddev'] - train_features['right_block_l_stddev']\n",
"train_features_9['lelf_right_a_stddev'] = train_features['left_block_a_stddev'] - train_features['right_block_a_stddev']\n",
"train_features_9['lelf_right_b_stddev'] = train_features['left_block_b_stddev'] - train_features['right_block_b_stddev']\n",
"\n",
"train_features_9['lelf_right_R_hist'] = train_features['left_block_R_hist'] - train_features['right_block_R_hist']\n",
"train_features_9['lelf_right_G_hist'] = train_features['left_block_G_hist'] - train_features['right_block_G_hist']\n",
"train_features_9['lelf_right_B_hist'] = train_features['left_block_B_hist'] - train_features['right_block_B_hist']\n",
"\n",
"train_features_9['lelf_right_H_hist'] = train_features['left_block_H_hist'] - train_features['right_block_H_hist']\n",
"train_features_9['lelf_right_S_hist'] = train_features['left_block_S_hist'] - train_features['right_block_S_hist']\n",
"train_features_9['lelf_right_V_hist'] = train_features['left_block_V_hist'] - train_features['right_block_V_hist']\n",
"\n",
"train_features_9['lelf_right_l_hist'] = train_features['left_block_l_hist'] - train_features['right_block_l_hist']\n",
"train_features_9['lelf_right_a_hist'] = train_features['left_block_a_hist'] - train_features['right_block_a_hist']\n",
"train_features_9['lelf_right_b_hist'] = train_features['left_block_b_hist'] - train_features['right_block_b_hist']\n",
"\n",
"train_features_9['lelf_right_R_max'] = train_features['left_block_R_max'] - train_features['right_block_R_max']\n",
"train_features_9['lelf_right_G_max'] = train_features['left_block_G_max'] - train_features['right_block_G_max']\n",
"train_features_9['lelf_right_B_max'] = train_features['left_block_B_max'] - train_features['right_block_B_max']\n",
"\n",
"train_features_9['lelf_right_H_max'] = train_features['left_block_H_max'] - train_features['right_block_H_max']\n",
"train_features_9['lelf_right_S_max'] = train_features['left_block_S_max'] - train_features['right_block_S_max']\n",
"train_features_9['lelf_right_V_max'] = train_features['left_block_V_max'] - train_features['right_block_V_max']\n",
"\n",
"train_features_9['lelf_right_l_max'] = train_features['left_block_l_max'] - train_features['right_block_l_max']\n",
"train_features_9['lelf_right_a_max'] = train_features['left_block_a_max'] - train_features['right_block_a_max']\n",
"train_features_9['lelf_right_b_max'] = train_features['left_block_b_max'] - train_features['right_block_b_max']\n",
"\n",
"train_features_9['lelf_right_R_min'] = train_features['left_block_R_min'] - train_features['right_block_R_min']\n",
"train_features_9['lelf_right_G_min'] = train_features['left_block_G_min'] - train_features['right_block_G_min']\n",
"train_features_9['lelf_right_B_min'] = train_features['left_block_B_min'] - train_features['right_block_B_min']\n",
"\n",
"train_features_9['lelf_right_H_min'] = train_features['left_block_H_min'] - train_features['right_block_H_min']\n",
"train_features_9['lelf_right_S_min'] = train_features['left_block_S_min'] - train_features['right_block_S_min']\n",
"train_features_9['lelf_right_V_min'] = train_features['left_block_V_min'] - train_features['right_block_V_min']\n",
"\n",
"train_features_9['lelf_right_l_min'] = train_features['left_block_l_min'] - train_features['right_block_l_min']\n",
"train_features_9['lelf_right_a_min'] = train_features['left_block_a_min'] - train_features['right_block_a_min']\n",
"train_features_9['lelf_right_b_min'] = train_features['left_block_b_min'] - train_features['right_block_b_min']\n",
"\n",
"# train_features_9['left_grayValue']= train_features['left_grayValue'];\n",
"# train_features_9['left_grayStddevValue']= train_features['left_grayStddevValue'];\n",
"# train_features_9['left_grayHist']= train_features['left_grayHist'];\n",
"# train_features_9['left_grayMax']= train_features['left_grayMax'];\n",
"# train_features_9['left_grayMin']= train_features['left_grayMin'];\n",
"\n",
"# train_features_9['right_grayValue']= train_features['right_grayValue'];\n",
"# train_features_9['right_grayStddevValue']= train_features['right_grayStddevValue'];\n",
"# train_features_9['right_grayHist']= train_features['right_grayHist'];\n",
"# train_features_9['right_grayMax']= train_features['right_grayMax'];\n",
"# train_features_9['right_grayMin']= train_features['right_grayMin'];\n",
"\n",
"# train_features_9['lelf_R_stddev'] = train_features['left_block_R_stddev'] \n",
"# train_features_9['lelf_G_stddev'] = train_features['left_block_G_stddev'] \n",
"# train_features_9['lelf_B_stddev'] = train_features['left_block_B_stddev'] \n",
"\n",
"# train_features_9['left_block_R_min'] = train_features['left_block_R_min'] \n",
"# train_features_9['left_block_G_min'] = train_features['left_block_G_min'] \n",
"# train_features_9['left_block_B_min'] = train_features['left_block_B_min'] \n",
"\n",
"\n",
"train_features_9['lelf_right_gray_value'] = train_features['left_grayValue'] - train_features['right_grayValue']\n",
"train_features_9['lelf_right_gray_stddev'] = train_features['left_grayStddevValue'] - train_features['right_grayStddevValue']\n",
"train_features_9['lelf_right_gray_hist'] = train_features['left_grayHist'] - train_features['right_grayHist']\n",
"train_features_9['lelf_right_gray_max'] = train_features['left_grayMax'] - train_features['right_grayMax']\n",
"train_features_9['lelf_right_gray_min'] = train_features['left_grayMin'] - train_features['right_grayMin']\n",
"\n",
"train_features_9.describe()\n"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>lelf_right_R</th>\n",
" <th>lelf_right_G</th>\n",
" <th>lelf_right_B</th>\n",
" <th>lelf_right_H</th>\n",
" <th>lelf_right_S</th>\n",
" <th>lelf_right_V</th>\n",
" <th>lelf_right_l</th>\n",
" <th>lelf_right_a</th>\n",
" <th>lelf_right_b</th>\n",
" <th>lelf_right_R_stddev</th>\n",
" <th>...</th>\n",
" <th>lelf_right_S_min</th>\n",
" <th>lelf_right_V_min</th>\n",
" <th>lelf_right_l_min</th>\n",
" <th>lelf_right_a_min</th>\n",
" <th>lelf_right_b_min</th>\n",
" <th>lelf_right_gray_value</th>\n",
" <th>lelf_right_gray_stddev</th>\n",
" <th>lelf_right_gray_hist</th>\n",
" <th>lelf_right_gray_max</th>\n",
" <th>lelf_right_gray_min</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>...</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" <td>9472.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>4.998839</td>\n",
" <td>14.260557</td>\n",
" <td>10.544130</td>\n",
" <td>-26.535051</td>\n",
" <td>-12.259291</td>\n",
" <td>5.136824</td>\n",
" <td>11.130912</td>\n",
" <td>-4.211888</td>\n",
" <td>0.506651</td>\n",
" <td>-0.101668</td>\n",
" <td>...</td>\n",
" <td>-6.603568</td>\n",
" <td>0.697741</td>\n",
" <td>8.245777</td>\n",
" <td>-1.225190</td>\n",
" <td>0.677787</td>\n",
" <td>11.064189</td>\n",
" <td>-1.537901</td>\n",
" <td>25.800570</td>\n",
" <td>2.967166</td>\n",
" <td>8.171769</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>12.451409</td>\n",
" <td>22.429921</td>\n",
" <td>18.349035</td>\n",
" <td>54.743651</td>\n",
" <td>16.866319</td>\n",
" <td>12.618626</td>\n",
" <td>18.760779</td>\n",
" <td>5.012831</td>\n",
" <td>1.030707</td>\n",
" <td>5.735642</td>\n",
" <td>...</td>\n",
" <td>15.524941</td>\n",
" <td>20.699370</td>\n",
" <td>31.093443</td>\n",
" <td>2.420103</td>\n",
" <td>1.601545</td>\n",
" <td>18.888033</td>\n",
" <td>7.605926</td>\n",
" <td>26.195686</td>\n",
" <td>7.129989</td>\n",
" <td>31.073313</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>-18.000000</td>\n",
" <td>-23.000000</td>\n",
" <td>-22.000000</td>\n",
" <td>-243.000000</td>\n",
" <td>-61.000000</td>\n",
" <td>-18.000000</td>\n",
" <td>-21.000000</td>\n",
" <td>-16.000000</td>\n",
" <td>-4.000000</td>\n",
" <td>-15.000000</td>\n",
" <td>...</td>\n",
" <td>-75.000000</td>\n",
" <td>-68.000000</td>\n",
" <td>-51.000000</td>\n",
" <td>-11.000000</td>\n",
" <td>-5.000000</td>\n",
" <td>-21.000000</td>\n",
" <td>-19.000000</td>\n",
" <td>-61.000000</td>\n",
" <td>-16.000000</td>\n",
" <td>-50.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>-6.000000</td>\n",
" <td>-6.000000</td>\n",
" <td>-7.000000</td>\n",
" <td>-28.000000</td>\n",
" <td>-23.000000</td>\n",
" <td>-6.000000</td>\n",
" <td>-6.000000</td>\n",
" <td>-7.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-4.000000</td>\n",
" <td>...</td>\n",
" <td>-15.000000</td>\n",
" <td>-5.000000</td>\n",
" <td>-20.000000</td>\n",
" <td>-3.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-6.000000</td>\n",
" <td>-7.000000</td>\n",
" <td>12.000000</td>\n",
" <td>-3.000000</td>\n",
" <td>-20.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>7.000000</td>\n",
" <td>16.000000</td>\n",
" <td>13.000000</td>\n",
" <td>-2.000000</td>\n",
" <td>-13.000000</td>\n",
" <td>7.000000</td>\n",
" <td>13.000000</td>\n",
" <td>-4.000000</td>\n",
" <td>0.000000</td>\n",
" <td>-1.000000</td>\n",
" <td>...</td>\n",
" <td>-5.000000</td>\n",
" <td>2.000000</td>\n",
" <td>12.000000</td>\n",
" <td>-1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>13.000000</td>\n",
" <td>-2.000000</td>\n",
" <td>28.000000</td>\n",
" <td>3.000000</td>\n",
" <td>12.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>14.000000</td>\n",
" <td>27.000000</td>\n",
" <td>22.000000</td>\n",
" <td>3.000000</td>\n",
" <td>4.000000</td>\n",
" <td>14.000000</td>\n",
" <td>23.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>5.000000</td>\n",
" <td>...</td>\n",
" <td>3.000000</td>\n",
" <td>8.000000</td>\n",
" <td>30.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>22.000000</td>\n",
" <td>5.000000</td>\n",
" <td>43.000000</td>\n",
" <td>8.000000</td>\n",
" <td>29.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>38.000000</td>\n",
" <td>69.000000</td>\n",
" <td>56.000000</td>\n",
" <td>92.000000</td>\n",
" <td>18.000000</td>\n",
" <td>38.000000</td>\n",
" <td>57.000000</td>\n",
" <td>7.000000</td>\n",
" <td>5.000000</td>\n",
" <td>12.000000</td>\n",
" <td>...</td>\n",
" <td>41.000000</td>\n",
" <td>53.000000</td>\n",
" <td>73.000000</td>\n",
" <td>5.000000</td>\n",
" <td>7.000000</td>\n",
" <td>58.000000</td>\n",
" <td>14.000000</td>\n",
" <td>93.000000</td>\n",
" <td>26.000000</td>\n",
" <td>73.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>8 rows × 50 columns</p>\n",
"</div>"
],
"text/plain": [
" lelf_right_R lelf_right_G lelf_right_B lelf_right_H lelf_right_S \\\n",
"count 9472.000000 9472.000000 9472.000000 9472.000000 9472.000000 \n",
"mean 4.998839 14.260557 10.544130 -26.535051 -12.259291 \n",
"std 12.451409 22.429921 18.349035 54.743651 16.866319 \n",
"min -18.000000 -23.000000 -22.000000 -243.000000 -61.000000 \n",
"25% -6.000000 -6.000000 -7.000000 -28.000000 -23.000000 \n",
"50% 7.000000 16.000000 13.000000 -2.000000 -13.000000 \n",
"75% 14.000000 27.000000 22.000000 3.000000 4.000000 \n",
"max 38.000000 69.000000 56.000000 92.000000 18.000000 \n",
"\n",
" lelf_right_V lelf_right_l lelf_right_a lelf_right_b \\\n",
"count 9472.000000 9472.000000 9472.000000 9472.000000 \n",
"mean 5.136824 11.130912 -4.211888 0.506651 \n",
"std 12.618626 18.760779 5.012831 1.030707 \n",
"min -18.000000 -21.000000 -16.000000 -4.000000 \n",
"25% -6.000000 -6.000000 -7.000000 0.000000 \n",
"50% 7.000000 13.000000 -4.000000 0.000000 \n",
"75% 14.000000 23.000000 1.000000 1.000000 \n",
"max 38.000000 57.000000 7.000000 5.000000 \n",
"\n",
" lelf_right_R_stddev ... lelf_right_S_min \\\n",
"count 9472.000000 ... 9472.000000 \n",
"mean -0.101668 ... -6.603568 \n",
"std 5.735642 ... 15.524941 \n",
"min -15.000000 ... -75.000000 \n",
"25% -4.000000 ... -15.000000 \n",
"50% -1.000000 ... -5.000000 \n",
"75% 5.000000 ... 3.000000 \n",
"max 12.000000 ... 41.000000 \n",
"\n",
" lelf_right_V_min lelf_right_l_min lelf_right_a_min lelf_right_b_min \\\n",
"count 9472.000000 9472.000000 9472.000000 9472.000000 \n",
"mean 0.697741 8.245777 -1.225190 0.677787 \n",
"std 20.699370 31.093443 2.420103 1.601545 \n",
"min -68.000000 -51.000000 -11.000000 -5.000000 \n",
"25% -5.000000 -20.000000 -3.000000 0.000000 \n",
"50% 2.000000 12.000000 -1.000000 0.000000 \n",
"75% 8.000000 30.000000 0.000000 1.000000 \n",
"max 53.000000 73.000000 5.000000 7.000000 \n",
"\n",
" lelf_right_gray_value lelf_right_gray_stddev lelf_right_gray_hist \\\n",
"count 9472.000000 9472.000000 9472.000000 \n",
"mean 11.064189 -1.537901 25.800570 \n",
"std 18.888033 7.605926 26.195686 \n",
"min -21.000000 -19.000000 -61.000000 \n",
"25% -6.000000 -7.000000 12.000000 \n",
"50% 13.000000 -2.000000 28.000000 \n",
"75% 22.000000 5.000000 43.000000 \n",
"max 58.000000 14.000000 93.000000 \n",
"\n",
" lelf_right_gray_max lelf_right_gray_min \n",
"count 9472.000000 9472.000000 \n",
"mean 2.967166 8.171769 \n",
"std 7.129989 31.073313 \n",
"min -16.000000 -50.000000 \n",
"25% -3.000000 -20.000000 \n",
"50% 3.000000 12.000000 \n",
"75% 8.000000 29.000000 \n",
"max 26.000000 73.000000 \n",
"\n",
"[8 rows x 50 columns]"
]
},
"execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"train_features_10 = pd.DataFrame()\n",
"train_features_10['lelf_right_R'] = test_features['left_block_R'] - test_features['right_block_R']\n",
"train_features_10['lelf_right_G'] = test_features['left_block_G'] - test_features['right_block_G']\n",
"train_features_10['lelf_right_B'] = test_features['left_block_B'] - test_features['right_block_B']\n",
"\n",
"train_features_10['lelf_right_H'] = test_features['left_block_H'] - test_features['right_block_H']\n",
"train_features_10['lelf_right_S'] = test_features['left_block_S'] - test_features['right_block_S']\n",
"train_features_10['lelf_right_V'] = test_features['left_block_V'] - test_features['right_block_V']\n",
"\n",
"train_features_10['lelf_right_l'] = test_features['left_block_l'] - test_features['right_block_l']\n",
"train_features_10['lelf_right_a'] = test_features['left_block_a'] - test_features['right_block_a']\n",
"train_features_10['lelf_right_b'] = test_features['left_block_b'] - test_features['right_block_b']\n",
"\n",
"train_features_10['lelf_right_R_stddev'] = test_features['left_block_R_stddev'] - test_features['right_block_R_stddev']\n",
"train_features_10['lelf_right_G_stddev'] = test_features['left_block_G_stddev'] - test_features['right_block_G_stddev']\n",
"train_features_10['lelf_right_B_stddev'] = test_features['left_block_B_stddev'] - test_features['right_block_B_stddev']\n",
"\n",
"train_features_10['lelf_right_H_stddev'] = test_features['left_block_H_stddev'] - test_features['right_block_H_stddev']\n",
"train_features_10['lelf_right_S_stddev'] = test_features['left_block_S_stddev'] - test_features['right_block_S_stddev']\n",
"train_features_10['lelf_right_V_stddev'] = test_features['left_block_V_stddev'] - test_features['right_block_V_stddev']\n",
"\n",
"train_features_10['lelf_right_l_stddev'] = test_features['left_block_l_stddev'] - test_features['right_block_l_stddev']\n",
"train_features_10['lelf_right_a_stddev'] = test_features['left_block_a_stddev'] - test_features['right_block_a_stddev']\n",
"train_features_10['lelf_right_b_stddev'] = test_features['left_block_b_stddev'] - test_features['right_block_b_stddev']\n",
"\n",
"train_features_10['lelf_right_R_hist'] = test_features['left_block_R_hist'] - test_features['right_block_R_hist']\n",
"train_features_10['lelf_right_G_hist'] = test_features['left_block_G_hist'] - test_features['right_block_G_hist']\n",
"train_features_10['lelf_right_B_hist'] = test_features['left_block_B_hist'] - test_features['right_block_B_hist']\n",
"\n",
"train_features_10['lelf_right_H_hist'] = test_features['left_block_H_hist'] - test_features['right_block_H_hist']\n",
"train_features_10['lelf_right_S_hist'] = test_features['left_block_S_hist'] - test_features['right_block_S_hist']\n",
"train_features_10['lelf_right_V_hist'] = test_features['left_block_V_hist'] - test_features['right_block_V_hist']\n",
"\n",
"train_features_10['lelf_right_l_hist'] = test_features['left_block_l_hist'] - test_features['right_block_l_hist']\n",
"train_features_10['lelf_right_a_hist'] = test_features['left_block_a_hist'] - test_features['right_block_a_hist']\n",
"train_features_10['lelf_right_b_hist'] = test_features['left_block_b_hist'] - test_features['right_block_b_hist']\n",
"\n",
"train_features_10['lelf_right_R_max'] = test_features['left_block_R_max'] - test_features['right_block_R_max']\n",
"train_features_10['lelf_right_G_max'] = test_features['left_block_G_max'] - test_features['right_block_G_max']\n",
"train_features_10['lelf_right_B_max'] = test_features['left_block_B_max'] - test_features['right_block_B_max']\n",
"\n",
"train_features_10['lelf_right_H_max'] = test_features['left_block_H_max'] - test_features['right_block_H_max']\n",
"train_features_10['lelf_right_S_max'] = test_features['left_block_S_max'] - test_features['right_block_S_max']\n",
"train_features_10['lelf_right_V_max'] = test_features['left_block_V_max'] - test_features['right_block_V_max']\n",
"\n",
"train_features_10['lelf_right_l_max'] = test_features['left_block_l_max'] - test_features['right_block_l_max']\n",
"train_features_10['lelf_right_a_max'] = test_features['left_block_a_max'] - test_features['right_block_a_max']\n",
"train_features_10['lelf_right_b_max'] = test_features['left_block_b_max'] - test_features['right_block_b_max']\n",
"\n",
"\n",
"train_features_10['lelf_right_R_min'] = test_features['left_block_R_min'] - test_features['right_block_R_min']\n",
"train_features_10['lelf_right_G_min'] = test_features['left_block_G_min'] - test_features['right_block_G_min']\n",
"train_features_10['lelf_right_B_min'] = test_features['left_block_B_min'] - test_features['right_block_B_min']\n",
"\n",
"train_features_10['lelf_right_H_min'] = test_features['left_block_H_min'] - test_features['right_block_H_min']\n",
"train_features_10['lelf_right_S_min'] = test_features['left_block_S_min'] - test_features['right_block_S_min']\n",
"train_features_10['lelf_right_V_min'] = test_features['left_block_V_min'] - test_features['right_block_V_min']\n",
"\n",
"train_features_10['lelf_right_l_min'] = test_features['left_block_l_min'] - test_features['right_block_l_min']\n",
"train_features_10['lelf_right_a_min'] = test_features['left_block_a_min'] - test_features['right_block_a_min']\n",
"train_features_10['lelf_right_b_min'] = test_features['left_block_b_min'] - test_features['right_block_b_min']\n",
"\n",
"# train_features_10['left_grayValue']= test_features['left_grayValue'];\n",
"# train_features_10['left_grayStddevValue']= test_features['left_grayStddevValue'];\n",
"# train_features_10['left_grayHist']= test_features['left_grayHist'];\n",
"# train_features_10['left_grayMax']= test_features['left_grayMax'];\n",
"# train_features_10['left_grayMin']= test_features['left_grayMin'];\n",
"\n",
"# train_features_10['right_grayValue']= test_features['right_grayValue'];\n",
"# train_features_10['right_grayStddevValue']= test_features['right_grayStddevValue'];\n",
"# train_features_10['right_grayHist']= test_features['right_grayHist'];\n",
"# train_features_10['right_grayMax']= test_features['right_grayMax'];\n",
"# train_features_10['right_grayMin']= test_features['right_grayMin'];\n",
"\n",
"# train_features_10['lelf_R_stddev'] = test_features['left_block_R_stddev'] \n",
"# train_features_10['lelf_G_stddev'] = test_features['left_block_G_stddev'] \n",
"# train_features_10['lelf_B_stddev'] = test_features['left_block_B_stddev'] \n",
"\n",
"# train_features_10['left_block_R_min'] = test_features['left_block_R_min'] \n",
"# train_features_10['left_block_G_min'] = test_features['left_block_G_min'] \n",
"# train_features_10['left_block_B_min'] = test_features['left_block_B_min'] \n",
"\n",
"\n",
"\n",
"train_features_10['lelf_right_gray_value'] = test_features['left_grayValue'] - test_features['right_grayValue']\n",
"train_features_10['lelf_right_gray_stddev'] = test_features['left_grayStddevValue'] - test_features['right_grayStddevValue']\n",
"train_features_10['lelf_right_gray_hist'] = test_features['left_grayHist'] - test_features['right_grayHist']\n",
"train_features_10['lelf_right_gray_max'] = test_features['left_grayMax'] - test_features['right_grayMax']\n",
"train_features_10['lelf_right_gray_min'] = test_features['left_grayMin'] - test_features['right_grayMin']\n",
"\n",
"train_features_10.describe()"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.cross_validation import train_test_split\n",
"from sklearn.utils import shuffle\n",
"\n",
"X_train ,X_test,y_train,y_test = train_test_split(train_features_9,train_labels,test_size = 0.0001, random_state = 20)\n",
"#train_features ,train_labels = shuffle(train_features,train_labels)\n",
"#test_features,test_labels = shuffle(test_features,test_labels)"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"137870 2\n",
"30012 7\n",
"84962 6\n",
"157932 2\n",
"45426 0\n",
"71892 7\n",
"7338 4\n",
"27174 7\n",
"47634 7\n",
"134930 1\n",
"Name: index, dtype: int64\n"
]
}
],
"source": [
"print(y_train[0:10])\n"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"109823\n"
]
}
],
"source": [
"print(y_train.size)"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"11\n"
]
}
],
"source": [
"print(y_test.size)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using TensorFlow backend.\n"
]
}
],
"source": [
"from keras.models import *\n",
"from keras.activations import *\n",
"from keras.layers import *\n",
"from keras.optimizers import *\n",
"\n",
"from keras.callbacks import TensorBoard , Callback,EarlyStopping\n",
"from keras.metrics import *\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from keras.layers import Dense , activations,Dropout"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[0 0 1 0 0 0]\n",
" [0 0 0 0 0 1]\n",
" [0 0 0 0 1 0]\n",
" [0 0 1 0 0 0]\n",
" [1 0 0 0 0 0]\n",
" [0 0 0 0 0 1]\n",
" [0 0 0 1 0 0]\n",
" [0 0 0 0 0 1]\n",
" [0 0 0 0 0 1]\n",
" [0 1 0 0 0 0]]\n"
]
}
],
"source": [
"from sklearn.preprocessing import LabelBinarizer\n",
"train_features_np = np.ndarray(X_train.shape,dtype = np.float32)\n",
"train_features_np = X_train.values[:,:]\n",
"#train_labels_np = np.ndarray((19171,1),dtype = np.float32)\n",
"#train_labels_np = train_labels.values[:]\n",
"ohe = LabelBinarizer()\n",
"train_labels_np = ohe.fit_transform(y_train)\n",
"print(train_labels_np[0:10])"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"test_features_np = np.ndarray(train_features_10.shape,dtype = np.float32)\n",
"test_features_np = train_features_10.values[:,:]\n",
"#test_labels_np = np.ndarray((19171,1),dtype = np.float32)\n",
"#test_labels_np = test_labels.values[:]\n",
"test_labels_np = ohe.fit_transform(test_labels)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(109823, 50)\n",
"(109823, 6)\n",
"(9472, 50)\n",
"(9472, 6)\n",
"[[0 0 1 0 0 0]\n",
" [0 0 0 0 0 1]\n",
" [0 0 0 0 1 0]\n",
" [0 0 1 0 0 0]\n",
" [1 0 0 0 0 0]\n",
" [0 0 0 0 0 1]\n",
" [0 0 0 1 0 0]\n",
" [0 0 0 0 0 1]\n",
" [0 0 0 0 0 1]\n",
" [0 1 0 0 0 0]]\n",
"[[0 0 0 0 1 0]\n",
" [0 0 0 0 1 0]\n",
" [0 0 0 0 0 1]\n",
" [0 0 0 1 0 0]\n",
" [0 0 0 1 0 0]\n",
" [0 0 0 0 1 0]\n",
" [1 0 0 0 0 0]\n",
" [0 0 0 0 1 0]\n",
" [0 0 1 0 0 0]\n",
" [0 0 0 0 0 1]]\n"
]
}
],
"source": [
"print(train_features_np.shape)\n",
"print(train_labels_np.shape)\n",
"\n",
"print(test_features_np.shape)\n",
"print(test_labels_np.shape)\n",
"\n",
"print(train_labels_np[:10])\n",
"print(test_labels_np[:10])"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train on 108724 samples, validate on 1099 samples\n",
"Epoch 1/30\n",
"108724/108724 [==============================] - 1s - loss: 1.0679 - acc: 0.5744 - val_loss: 0.4938 - val_acc: 0.8153\n",
"Epoch 2/30\n",
"108724/108724 [==============================] - 0s - loss: 0.5531 - acc: 0.7830 - val_loss: 0.2975 - val_acc: 0.8571\n",
"Epoch 3/30\n",
"108724/108724 [==============================] - 0s - loss: 0.4125 - acc: 0.8296 - val_loss: 0.2312 - val_acc: 0.8681\n",
"Epoch 4/30\n",
"108724/108724 [==============================] - 0s - loss: 0.3457 - acc: 0.8530 - val_loss: 0.1970 - val_acc: 0.9117\n",
"Epoch 5/30\n",
"108724/108724 [==============================] - 0s - loss: 0.3097 - acc: 0.8672 - val_loss: 0.1771 - val_acc: 0.9208\n",
"Epoch 6/30\n",
"108724/108724 [==============================] - 0s - loss: 0.2869 - acc: 0.8748 - val_loss: 0.1634 - val_acc: 0.9208\n",
"Epoch 7/30\n",
"108724/108724 [==============================] - 0s - loss: 0.2700 - acc: 0.8814 - val_loss: 0.1568 - val_acc: 0.9227\n",
"Epoch 8/30\n",
"108724/108724 [==============================] - 0s - loss: 0.2556 - acc: 0.8862 - val_loss: 0.1436 - val_acc: 0.9272\n",
"Epoch 9/30\n",
"108724/108724 [==============================] - 0s - loss: 0.2417 - acc: 0.8916 - val_loss: 0.1391 - val_acc: 0.9299\n",
"Epoch 10/30\n",
"108724/108724 [==============================] - 0s - loss: 0.2340 - acc: 0.8961 - val_loss: 0.1277 - val_acc: 0.9363\n",
"Epoch 11/30\n",
"108724/108724 [==============================] - 0s - loss: 0.2253 - acc: 0.8993 - val_loss: 0.1217 - val_acc: 0.9372\n",
"Epoch 12/30\n",
"108724/108724 [==============================] - 0s - loss: 0.2176 - acc: 0.9030 - val_loss: 0.1190 - val_acc: 0.9372\n",
"Epoch 13/30\n",
"108724/108724 [==============================] - 0s - loss: 0.2107 - acc: 0.9080 - val_loss: 0.1135 - val_acc: 0.9463\n",
"Epoch 14/30\n",
"108724/108724 [==============================] - 0s - loss: 0.2029 - acc: 0.9120 - val_loss: 0.1094 - val_acc: 0.9709\n",
"Epoch 15/30\n",
"108724/108724 [==============================] - 0s - loss: 0.1965 - acc: 0.9136 - val_loss: 0.1044 - val_acc: 0.9627\n",
"Epoch 16/30\n",
"108724/108724 [==============================] - 0s - loss: 0.1940 - acc: 0.9155 - val_loss: 0.1002 - val_acc: 0.9782\n",
"Epoch 17/30\n",
"108724/108724 [==============================] - 0s - loss: 0.1903 - acc: 0.9178 - val_loss: 0.0985 - val_acc: 0.9672\n",
"Epoch 18/30\n",
"108724/108724 [==============================] - 0s - loss: 0.1855 - acc: 0.9199 - val_loss: 0.0920 - val_acc: 0.9754\n",
"Epoch 19/30\n",
"108724/108724 [==============================] - 0s - loss: 0.1808 - acc: 0.9227 - val_loss: 0.0891 - val_acc: 0.9663\n",
"Epoch 20/30\n",
"108724/108724 [==============================] - 0s - loss: 0.1765 - acc: 0.9241 - val_loss: 0.0849 - val_acc: 0.9773\n",
"Epoch 21/30\n",
"108724/108724 [==============================] - 0s - loss: 0.1713 - acc: 0.9274 - val_loss: 0.0780 - val_acc: 0.9718\n",
"Epoch 22/30\n",
"108724/108724 [==============================] - 0s - loss: 0.1661 - acc: 0.9299 - val_loss: 0.0753 - val_acc: 0.9745\n",
"Epoch 23/30\n",
"108724/108724 [==============================] - 0s - loss: 0.1622 - acc: 0.9322 - val_loss: 0.0760 - val_acc: 0.9718\n",
"Epoch 24/30\n",
"108724/108724 [==============================] - 0s - loss: 0.1605 - acc: 0.9328 - val_loss: 0.0719 - val_acc: 0.9763\n",
"Epoch 25/30\n",
"108724/108724 [==============================] - 0s - loss: 0.1567 - acc: 0.9347 - val_loss: 0.0714 - val_acc: 0.9745\n",
"Epoch 26/30\n",
"108724/108724 [==============================] - 0s - loss: 0.1536 - acc: 0.9352 - val_loss: 0.0676 - val_acc: 0.9773\n",
"Epoch 27/30\n",
"108724/108724 [==============================] - 0s - loss: 0.1525 - acc: 0.9360 - val_loss: 0.0685 - val_acc: 0.9773\n",
"Epoch 28/30\n",
"108724/108724 [==============================] - 0s - loss: 0.1501 - acc: 0.9373 - val_loss: 0.0642 - val_acc: 0.9763\n",
"Epoch 29/30\n",
"108724/108724 [==============================] - 0s - loss: 0.1454 - acc: 0.9397 - val_loss: 0.0605 - val_acc: 0.9854\n",
"Epoch 30/30\n",
"108724/108724 [==============================] - 0s - loss: 0.1442 - acc: 0.9398 - val_loss: 0.0662 - val_acc: 0.9763\n"
]
},
{
"data": {
"text/plain": [
"<keras.callbacks.History at 0x149d7af60>"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model = Sequential()\n",
"model.add(Dense(64 ,activation='sigmoid',input_shape = (50,)))\n",
"model.add(Dropout(0.5))\n",
"model.add(Dense(64,activation='sigmoid'))\n",
"model.add(Dropout(0.5))\n",
"model.add(Dense(6,activation='softmax'))\n",
"model.compile(optimizer='adam',\n",
" loss='categorical_crossentropy',\n",
" metrics=['accuracy'])\n",
"\n",
"tensorBoard = TensorBoard(log_dir=\"./logs\",write_graph= True,write_images= True)\n",
"model.fit(train_features_np,train_labels_np,batch_size=512,epochs=30,verbose=1,validation_split=0.01,callbacks=[tensorBoard])"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x113f30940>"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nwsPDadmyZZ68nnjPci+k85emTZvamzdv9ncYfvHBBx/Qu3fvQlGDIZIXYmJiTAPI9PT063ot27bN\niqwzZ87QqFEj00Q0K0lJSYAriXFkNcLi/PuYmJhomkYCHD16lNDQUJOoDR8+nF9//RWAW265Jdvi\n9aSkpAzXB7KMITExEcAjBnCNwjjXKlGixDWvmRUnmbj55ptNvdD19Od688032blzJ6+//nquX8Pd\nsWPHTBJ7Nef+OwX43tz/3Lhw4QIHDx40PbrKlCmT5bFJSUmMGzfO1Hd5y7nHpUuXzrNFHPD793Dz\n5s2ZOXOm1w1lryUkJIQJEyaYEb8bkWVZW2zbbpr9karREhEREfEZTR2KSKFlWZbZcsVb7iNJjqzq\nhZzRoqtHkq5WpkwZM9qRmxiyur4TQ1bX98XozfUaPHgwERERbNu2DXBtFH09shrNgtzd/9woXbq0\nmerLzvr167n//vtzfI0//OEPOT7HG84G3KNHj86T0SzJOSVaIiI55LQoOH36tJ8jKXgCAgJ4++23\nGTZsGOBKvNz3jSyqnFq54ODgDHtS+ss//vEPU/+X062RJO8o0RIR8dKhQ4cAGD9+PIApnq9fvz4R\nERFA7mulipKSJUsyb948wNVk80bg7KlYUJIscG3Snd1orPiearREREREfEQjWiIiXnLqaGbNmmXa\nFTiKFy/uj5AKvJx2TZe8o9GsgkGJloiIl5xpQU0Pioi3NHUoIiIi4iNKtERERER8RImWiIiIiI+o\nRqsASE9PNxvMihR1R44cMduC6Pve/5yeYABjxowBoFKlSv4KRwoBp2eYeEcjWiIiIiI+ohEtP6tZ\nsyaPPfaYv8MQyTc1a9akZs2aPr/Od999R0pKCk2aNPH5tQozZ4Nk/Tsk3urcuTO1a9f2dxiFhhIt\nP2vdujWtW7f2dxgiRc7jjz/OiRMniImJ8XcoInID09ShiIiIiI8o0RIRERHxESVaIiIiIj6iREtE\nRETER5RoiYiIiPiIEi0RERERH1GiJSIiIuIjSrREREREfESJloiIiIiPKNESERER8RElWiIiIiI+\nokRLRERExEeUaImIiIj4iBItERERER9RoiUiIiLiI0q0RERERHxEiZaIiIiIjyjREhEREfERJVoi\nIiIiPqJES0RERMRHlGiJiIiI+IgSLREREREfUaIlIiIi4iNKtERERER8RImWiIiIiI8o0RIRERHx\n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\ngx+oRktERETERzSiJSJFwoULF5g/f77ZJufixYuMHTvWTKXMmDEDwGxmvHLlStN1++9//zvgmg4C\naNu2rWlkCa6anTfeeMNMHx05coRz586Z5qjuLMvixRdfZOTIkYCrMWenTp1MHGvWrOHo0aPs378f\ncI2AtW/fHoD58+dz4MAB3n77bfN6P/30E5s3bwZg//79BXZE64UXXgBczVsPHDjgMUW1ZMkSZs2a\nBbjuU+fOnU1z0LZt22Z4rYcffhjANIR1FxYWZrYs6tu3LwEBAeY1li5darbxeeKJJwDM94OzbY1z\nr1955RW+/PJL07H/zJkzZvWj831z5MgRAKZNm0bbtm3N6OjIkSPNKKPDuZ+bNm1i3759Zvunq2vI\nHM5U6zfffMOIESMIDw8HXO1JnNGxL774wqMNyfWIiYkhPDycli1b5snrifesnCxn9pWmTZvazj8k\nN5oPPviA3r17F+raDJGciImJMZ2209PT/RzNtTnJ0cKFC0lJSTE/eIODg01/pqw4NVqXL18mKCiI\ny5cvA64fvFfvM+f8O5yYmGi6gLtzpr2yu2ZuOO/p5ptvNvVCTo1Ubrz55pvs3LmT119/PU/iO3bs\nGCEhIZk+Z9s2e/fuNQX4jRo1yrKP2vW4cOECBw8eND26nE79mUlKSmLcuHGmvstbzo4FpUuXznUR\nf2ac763mzZszc+ZMrzv3X0tISAgTJkwwU6s3Isuytti23TT7IzWiJSLitZo1a3p9rFOD5Py3ePHi\nWR7rFMRnlmSBbxIsXxk8eDARERFs27YNyLj1UE5llWSB63NzttzxpdKlS3u9efP69evNhuI58Yc/\n/CHH53jD2Rdy9OjReZJkSc6pRktERETERzSiVYTt2rWLVatW8cc//hEgV79lFQXOtirOJsOO1NRU\ngoKCANc2GLm1bt06s0GsO2cEIyQkhNDQUI/+PlI4OK0IUlNTOXv2LGXLlvVzRAVfQEAAb7/9NsOG\nDQNcI1zuG2cXVc70bnBwcIGpo/vHP/5hag1zujWS5B0lWkXQgQMHAFetxD//+U8WLlzo54j8629/\n+xuAWW7vsCyLH3744bpf/4477mDdunWmCLdEiRLMnDnT1B99++23/Oc//+HUqVMAREREMH78eODa\n00niX4sXLzaF87Zt87e//c0s2b/zzjv9GVqBV7JkSebNmwdk3D+yqHKmdwtKkgXQp0+fLKejJf8o\n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\ny7I2ADGWZQ0EfgK6A9i2/b1lWTHAD0Aq8Ixt22m+CV9ERESk4Mo20bJtewfQOJPHTwA0F5XiAAAg\nAElEQVTtszhnMjD5uqMTERERKcTUGV5ERETER5RoiYiIiPiIEi0RERERH1GiJSIiIuIjSrRERERE\nfESJloiIiIiPKNESERER8RElWiIiIiI+okRLRERExEeUaImIiIj4iBItERERER9RoiUiIiLiI0q0\nRERERHxEiZaIiIiIjyjREhEREfGRQH8HICKSW9HR0UyaNAmA9PR0j+dOnDhBeno6DRo08Hg8IMD1\n++WwYcN46qmn8idQEblhaURLRERExEc0oiUihVZ4eDjff//9NY85fvx4po+3atXKFyGJiHhQoiUi\nhVbNmjVp2bIlABs3bsS27WzPue222wC44447fBqbiAgo0RKRQu7xxx8HID4+PttEKzAwkP79++dD\nVCIiLqrREhEREfERy5uhdl9r2rSpvXnzZn+HISKFkFODVbVq1QwrDzOzf/9+AGrXru3TuESk6LIs\na4tt2029OVYjWiJSqFWuXJnKlStz3333mdYNmbEsiyZNmlC7dm0lWSKSb5RoiYiIiPiIEi0RKRL6\n9u17zWL4gIAA+vXrl48RiYgo0RKRIqJLly4UL148y+fT09Pp0aNHPkYkIqJES0SKiLJly9KpUycC\nAwMJDPy9c01AQAABAQG0adOGatWq+TFCEbkRKdESERER8RElWiJSZPTt25fU1FRSU1MzfU5EJL+p\nM7yIFBkPPfQQN910EwDnzp0DMC0funXr5re4ROTGpURLRIqMEiVKmIL3qKgo0tPTeeihhwAoX768\nP0MTkRuUpg5FREREfEQjWiJSpERERACwcOFCQLVZIuJfSrT87MiRI3z77bf+DkOkyHD2OwwKCuLS\npUukpKQA8OGHH/ozLJEixdnOSrKnRMvP1q9fT8+ePf0dhkiR1adPH3+HIFLkzJ49m6FDh/o7jEJB\nNVoiIiIiPqIRrQIgICCAtLQ0f4chki9iYmLMKK4zzecL8fHxnDx5kg4dOvjsGkXBkSNHALj55ptN\nGUOLFi38GZIUcCEhIf4OoVBRoiUiRVLz5s31C4yI+J2mDkVERER8RImWiBRZxYoV83cIInKDU6Il\nIiIi4iNKtERERER8RImWiIiIiI8o0RIRERHxESVaIiIiIj6iPloiUqS89tprAJQqVUpbhPhRamoq\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x113f649b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from keras.utils import plot_model\n",
"plt.rcParams[\"figure.figsize\"] = 10,10\n",
"plot_model(model, to_file='model.png',show_shapes = True)\n",
"modelImage = plt.imread('./model.png')\n",
"plt.imshow(modelImage)"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"(['dense_4', 'dense_5', 'dense_6'], range(0, 3))"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"[x.name for x in model.layers],range(len(model.layers))"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[-0.05253006 0.2076098 -0.00475688 -0.03430251 0.00057785 -0.0142737\n",
" -0.01343703 -0.01170558]\n"
]
}
],
"source": [
"weight = model.layers[2].get_weights()\n",
"\n",
"print(weight[1])"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.8360188 , 0.11314284, 0.05083836])"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def sigmodFuc(x):\n",
" x = np.array(x)\n",
" x = np.exp(-x)\n",
" return 1 / (1+x)\n",
"sigmodFuc(0)\n",
"\n",
"def softMaxFuc(x):\n",
" x = np.array(x)\n",
" x = np.exp(x)\n",
" return x / sum(x)\n",
"\n",
"softMaxFuc([3,1,0.2])"
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([2, 4, 6])"
]
},
"execution_count": 46,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A = np.array([1,2,3])\n",
"B = np.array([1,2,3])\n",
"A +B"
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[152 145 186 177 57 186 158 139 107 147 159 179 167 53 179 170 136 108\n",
" 166 169 203 191 72 203 178 147 110 141 122 166 188 68 166 138 144 107\n",
" 138 105 155 192 70 155 126 146 107 158 157 195 203 88 195 168 152 110\n",
" 161 177 206 155 54 206 184 128 111 162 178 207 155 54 207 185 128 112\n",
" 169 181 210 159 58 210 187 130 112]\n",
"[0 0 1 0 0 0 0 0]\n",
"(81, 64)\n",
"(64,)\n",
"(64, 64)\n",
"(64,)\n",
"(64, 64)\n",
"(64,)\n"
]
}
],
"source": [
"x = test_features_np[0]\n",
"y = test_labels_np[0]\n",
"print(x)\n",
"print(y)\n",
"weight1 = model.layers[0].get_weights()[0]\n",
"bais1 = model.layers[0].get_weights()[1]\n",
"\n",
"weight2 = model.layers[1].get_weights()[0]\n",
"bais2 = model.layers[1].get_weights()[1]\n",
"\n",
"weight_output = model.layers[2].get_weights()[0]\n",
"bais_output = model.layers[2].get_weights()[1]\n",
"\n",
"print(weight1.shape)\n",
"print(bais1.shape)\n",
"\n",
"print(weight2.shape)\n",
"print(bais2.shape)\n",
"\n",
"print(weight2.shape)\n",
"print(bais2.shape)\n",
"\n",
"def high_layer1(x):\n",
" x = np.array(x)\n",
" x = np.dot( np.transpose(weight1) ,x) + bais1\n",
" return x\n",
"\n",
"def high_layer2(x):\n",
" x = np.array(x)\n",
" x = np.dot( np.transpose(weight2) ,x) + bais2\n",
" return x\n",
"def high_layer3(x):\n",
" x = np.array(x)\n",
" x = np.dot( np.transpose(weight_output) ,x) + bais_output\n",
" return x\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 0.00000000e+00 9.05838907e-02 -2.02228073e-02 0.00000000e+00\n",
" 0.00000000e+00 0.00000000e+00 4.12296737e-03 0.00000000e+00\n",
" 5.34244627e-03 -1.44594312e-02 1.90941413e-27 8.62948131e-03\n",
" -5.46117710e-18 -5.77182230e-03 0.00000000e+00 3.94508848e-03\n",
" 0.00000000e+00 6.49883412e-04 1.50491421e-23 -2.91719120e-02\n",
" -2.27949638e-02 5.30060707e-03 1.39116375e-02 -6.28211116e-03\n",
" -6.89919479e-03 -1.08937727e-24 -9.19537060e-03 0.00000000e+00\n",
" 0.00000000e+00 0.00000000e+00 4.73896302e-02 -1.98626511e-25\n",
" 6.17962442e-02 7.59590603e-03 -1.40151312e-03 -6.59467792e-03\n",
" 2.28975521e-04 -1.94891199e-05 -6.63879539e-22 0.00000000e+00\n",
" -1.62675716e-02 0.00000000e+00 0.00000000e+00 -5.69899753e-03\n",
" -4.96984879e-03 0.00000000e+00 0.00000000e+00 0.00000000e+00\n",
" 0.00000000e+00 -9.42842515e-21 3.82937342e-02 -8.38186010e-04\n",
" 9.96107794e-03 1.17418664e-02 0.00000000e+00 0.00000000e+00\n",
" 9.54258256e-03 -5.42361708e-03 0.00000000e+00 0.00000000e+00\n",
" -3.78000587e-02 7.70260114e-03 3.56959462e-10 0.00000000e+00]\n",
"[ 0.17305827 0.01341413 0.12307835 -0.0159746 0.145814 -0.06111556\n",
" 0.02930182 -0.18512695 -0.06474426 0.15277883 0.15094572 -0.0129154\n",
" 0.17037603 -0.11838593 -0.11614104 0.04180937 -0.16276659 -0.01937576\n",
" -0.06289992 -0.02851684 0.11076447 0.06341803 -0.00352053 0.16783056\n",
" -0.03295185 -0.00159225 0.04636611 0.03998886 -0.12772834 0.07079622\n",
" 0.00316973 -0.10519742 0.02417825 -0.16307655 0.12474412 0.14131364\n",
" 0.05467655 -0.14160518 -0.02730519 -0.16710535 0.03107308 -0.10948681\n",
" -0.01981571 0.0295959 0.05736272 -0.0458488 -0.03117368 -0.17638662\n",
" -0.06529959 0.04583581 -0.06465244 0.0314095 -0.07687322 -0.00407287\n",
" -0.17560548 -0.13912371 -0.07344259 -0.18529509 -0.03661816 0.13749975\n",
" -0.17643262 -0.1389471 0.07949537 -0.17393851 -0.03696759 0.15407303\n",
" 0.02555062 -0.07778964 -0.14857246 -0.05750833 -0.13000627 0.16853386\n",
" 0.06607634 -0.01161326 -0.10841172 0.0015166 0.07373002 0.02944303\n",
" -0.17377165 -0.07970803 -0.07890556 0.04234751 -0.17856881 0.10181689\n",
" 0.17066035 0.15023068 0.14596173 -0.06413063 -0.03997749 0.00883922\n",
" -0.02087811 -0.02104171 -0.11165582 -0.00446506 0.02626136 0.02614412\n",
" -0.14205988 0.09355843 -0.1596352 -0.13069732 -0.05696556 0.01703562\n",
" 0.15694144 0.10306948 0.16847223 0.17883787 -0.07447052 -0.10735899]\n",
"64\n"
]
}
],
"source": [
"print(bais1)\n",
"print(np.transpose(weight1)[0])\n",
"print(np.transpose(weight1).shape[0])"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"f = open(\"weight1.txt\",'a')\n",
"f.write(\"int weight1[64][108] = {\")\n",
"\n",
"for row in range(0,np.transpose(weight1).shape[0]):\n",
" for col in range(0,np.transpose(weight1).shape[1]):\n",
" f.write(np.str( np.transpose(weight1)[row][col]))\n",
" f.write(\",\")\n",
"f.write(\"};\")\n",
"\n",
"f.close()\n",
"f = open(\"bais1.txt\",'a')\n",
"f.write(\"int bais1[64] = {\")\n",
"for i in bais1:\n",
" f.write(np.str( i))\n",
" f.write(\",\")\n",
"f.write(\"};\")\n",
"\n",
"f.close()"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"f = open(\"weight2.txt\",'a')\n",
"f.write(\"int weight2[64][64] = {\")\n",
"\n",
"for row in range(0,np.transpose(weight2).shape[0]):\n",
" for col in range(0,np.transpose(weight2).shape[1]):\n",
" f.write(np.str( np.transpose(weight2)[row][col]))\n",
" f.write(\",\")\n",
"f.write(\"};\")\n",
"\n",
"f.close()\n",
"f = open(\"bais2.txt\",'a')\n",
"f.write(\"int bais2[64] = {\")\n",
"for i in bais2:\n",
" f.write(np.str( i))\n",
" f.write(\",\")\n",
"f.write(\"};\")\n",
"\n",
"f.close()"
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"f = open(\"weight_output.txt\",'a')\n",
"f.write(\"int weight_output[8][64] = {\")\n",
"\n",
"for row in range(0,np.transpose(weight_output).shape[0]):\n",
" for col in range(0,np.transpose(weight_output).shape[1]):\n",
" f.write(np.str( np.transpose(weight_output)[row][col]))\n",
" f.write(\",\")\n",
"f.write(\"};\")\n",
"\n",
"f.close()\n",
"f = open(\"bais_output.txt\",'a')\n",
"f.write(\"int bais_output[8] = {\")\n",
"for i in bais_output:\n",
" f.write(np.str( i))\n",
" f.write(\",\")\n",
"f.write(\"};\")\n",
"\n",
"f.close()"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[168 136 144 220 50 168 152 141 128 180 154 163 242 56 180 168 148 127\n",
" 188 170 169 254 80 188 181 149 133 176 142 148 206 49 176 159 141 129\n",
" 175 134 144 244 59 175 154 145 129 194 173 171 254 74 194 185 149 133\n",
" 194 186 178 21 20 194 194 129 133 195 186 179 23 20 195 194 129 133\n",
" 198 190 182 24 23 198 197 130 134]\n",
"[0 0 0 0 0 1 0 0]\n"
]
}
],
"source": [
"x = test_features_np[2]\n",
"y = test_labels_np[2]\n",
"\n",
"\n",
"print(x)\n",
"print(y)"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"6\n"
]
}
],
"source": [
"output1 =sigmodFuc( high_layer1(x))\n",
"output2 =sigmodFuc( high_layer2(output1))\n",
"output = softMaxFuc(high_layer3(output2))\n",
"print(np.argmax(output) + 1)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 5.70315080e-07 2.57853694e-09 1.92760112e-07 1.57451552e-07\n",
" 4.53961790e-02 9.54602838e-01]\n",
" [ 2.23401543e-07 2.32749334e-10 5.67287657e-08 3.06664454e-08\n",
" 7.14013213e-03 9.92859483e-01]\n",
" [ 1.56689975e-06 5.11698737e-08 2.20304196e-06 1.53310657e-06\n",
" 5.29840171e-01 4.70154524e-01]\n",
" [ 1.45940139e-05 1.66348033e-02 9.82258797e-01 1.09140691e-03\n",
" 3.22608912e-07 2.25265335e-08]\n",
" [ 1.44030676e-09 1.24740566e-07 3.07747614e-05 9.99967813e-01\n",
" 1.30847934e-06 8.97783070e-10]\n",
" [ 3.74792197e-09 9.00634289e-10 1.78380617e-08 3.49930616e-07\n",
" 9.99993324e-01 6.27099735e-06]\n",
" [ 9.96613443e-01 1.93043274e-03 1.45511248e-03 4.01580195e-07\n",
" 9.90075293e-08 4.46272736e-07]\n",
" [ 4.14223791e-07 1.05082432e-09 1.03194033e-07 7.37936361e-08\n",
" 1.94870923e-02 9.80512261e-01]\n",
" [ 7.71431223e-06 1.77912772e-01 8.21935356e-01 1.44034449e-04\n",
" 4.95247150e-08 1.07227951e-08]\n",
" [ 2.36807892e-07 1.28890376e-09 2.55651202e-07 1.22701991e-07\n",
" 2.41130721e-02 9.75886345e-01]]\n",
"[6, 5, 1, 3, 4, 3, 6, 6, 6, 6]\n",
"748 6\n",
"3328 7\n",
"4210 0\n",
"229 4\n",
"1403 4\n",
"3448 4\n",
"1974 7\n",
"1232 6\n",
"5587 7\n",
"2155 7\n",
"Name: index, dtype: int64\n",
"accuracy: 0.348606418919\n",
"1 0\n",
"3 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"3 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"3 0\n",
"3 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"3 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"2 0\n",
"3 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"3 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"3 0\n",
"2 0\n",
"2 0\n",
"3 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"3 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"3 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"3 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"3 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"3 0\n",
"3 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"3 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"3 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"3 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"3 0\n",
"2 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"3 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"3 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"2 0\n",
"3 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"3 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"3 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"3 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"3 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"3 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"1 0\n",
"9472 914 914\n",
"5 7\n",
"3 4\n",
"5 6\n",
"1 0\n",
"3 2\n",
"6 7\n",
"3 2\n",
"6 7\n",
"3 0\n",
"2 1\n",
"5 6\n",
"3 4\n",
"2 0\n",
"2 1\n",
"5 6\n",
"3 4\n",
"2 0\n",
"5 4\n",
"5 7\n",
"6 7\n",
"1 0\n",
"1 0\n",
"6 7\n",
"3 4\n",
"5 6\n",
"2 1\n",
"5 7\n",
"2 1\n",
"2 1\n",
"1 0\n",
"2 1\n",
"6 7\n",
"6 7\n",
"1 0\n",
"2 0\n",
"3 4\n",
"3 2\n",
"3 4\n",
"6 7\n",
"5 6\n",
"3 1\n",
"6 7\n",
"3 4\n",
"5 6\n",
"1 0\n",
"6 7\n",
"1 0\n",
"5 6\n",
"1 0\n",
"5 6\n",
"2 4\n",
"2 1\n",
"3 4\n",
"1 0\n",
"6 7\n",
"6 7\n",
"5 6\n",
"2 0\n",
"6 7\n",
"1 0\n",
"2 1\n",
"6 7\n",
"6 7\n",
"5 6\n",
"6 7\n",
"2 1\n",
"5 6\n",
"2 1\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"5 6\n",
"3 2\n",
"6 7\n",
"5 7\n",
"1 0\n",
"2 0\n",
"3 2\n",
"1 4\n",
"3 2\n",
"6 7\n",
"3 2\n",
"5 6\n",
"5 7\n",
"5 7\n",
"2 1\n",
"6 7\n",
"2 1\n",
"6 7\n",
"2 0\n",
"6 7\n",
"1 2\n",
"6 7\n",
"1 0\n",
"3 2\n",
"2 1\n",
"5 7\n",
"3 4\n",
"6 7\n",
"3 4\n",
"2 0\n",
"3 2\n",
"5 6\n",
"2 1\n",
"1 0\n",
"5 6\n",
"3 2\n",
"5 6\n",
"3 2\n",
"6 7\n",
"1 0\n",
"2 0\n",
"2 0\n",
"3 4\n",
"6 7\n",
"6 7\n",
"5 7\n",
"3 4\n",
"5 6\n",
"3 4\n",
"5 6\n",
"6 7\n",
"6 7\n",
"2 1\n",
"3 4\n",
"5 6\n",
"5 6\n",
"5 7\n",
"6 7\n",
"1 0\n",
"6 7\n",
"2 4\n",
"2 0\n",
"2 4\n",
"1 0\n",
"5 6\n",
"3 4\n",
"5 7\n",
"1 0\n",
"2 0\n",
"3 4\n",
"3 4\n",
"1 0\n",
"2 0\n",
"1 0\n",
"3 2\n",
"3 4\n",
"6 7\n",
"5 6\n",
"6 7\n",
"3 4\n",
"2 1\n",
"3 4\n",
"5 6\n",
"5 7\n",
"3 4\n",
"5 7\n",
"3 4\n",
"3 2\n",
"3 2\n",
"5 6\n",
"2 4\n",
"6 7\n",
"5 6\n",
"2 0\n",
"2 0\n",
"1 0\n",
"2 0\n",
"5 6\n",
"2 0\n",
"6 7\n",
"2 1\n",
"6 7\n",
"2 1\n",
"3 2\n",
"6 7\n",
"2 0\n",
"3 2\n",
"2 1\n",
"6 7\n",
"3 2\n",
"6 7\n",
"3 2\n",
"2 1\n",
"5 6\n",
"3 2\n",
"3 2\n",
"3 4\n",
"3 2\n",
"5 6\n",
"6 7\n",
"6 7\n",
"2 1\n",
"6 7\n",
"3 1\n",
"5 6\n",
"2 1\n",
"3 2\n",
"5 6\n",
"5 6\n",
"5 6\n",
"5 6\n",
"3 2\n",
"6 7\n",
"2 0\n",
"2 1\n",
"6 7\n",
"6 7\n",
"2 1\n",
"6 7\n",
"1 0\n",
"1 0\n",
"3 2\n",
"2 4\n",
"5 6\n",
"5 6\n",
"3 4\n",
"1 0\n",
"6 7\n",
"5 7\n",
"3 2\n",
"3 2\n",
"6 7\n",
"1 0\n",
"3 4\n",
"6 7\n",
"2 0\n",
"3 2\n",
"5 6\n",
"5 6\n",
"3 4\n",
"5 6\n",
"6 7\n",
"3 2\n",
"5 6\n",
"2 1\n",
"5 6\n",
"1 2\n",
"2 1\n",
"2 1\n",
"3 4\n",
"5 6\n",
"5 6\n",
"1 0\n",
"3 4\n",
"3 2\n",
"3 4\n",
"5 7\n",
"2 4\n",
"2 1\n",
"2 1\n",
"2 0\n",
"2 4\n",
"5 6\n",
"3 4\n",
"2 4\n",
"5 6\n",
"1 0\n",
"1 0\n",
"6 7\n",
"5 7\n",
"6 7\n",
"2 1\n",
"3 2\n",
"2 0\n",
"5 6\n",
"6 7\n",
"5 6\n",
"2 0\n",
"2 1\n",
"3 2\n",
"1 0\n",
"5 7\n",
"6 7\n",
"5 7\n",
"5 6\n",
"1 0\n",
"2 0\n",
"3 2\n",
"3 2\n",
"1 0\n",
"5 6\n",
"5 6\n",
"3 1\n",
"3 2\n",
"6 7\n",
"5 6\n",
"2 1\n",
"6 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"3 4\n",
"3 2\n",
"1 0\n",
"3 4\n",
"2 4\n",
"5 6\n",
"3 2\n",
"3 1\n",
"5 6\n",
"6 7\n",
"3 2\n",
"2 4\n",
"2 1\n",
"5 6\n",
"5 6\n",
"3 4\n",
"3 4\n",
"2 1\n",
"2 4\n",
"5 6\n",
"6 7\n",
"5 6\n",
"2 1\n",
"5 7\n",
"3 2\n",
"3 2\n",
"1 0\n",
"2 1\n",
"2 0\n",
"5 6\n",
"3 2\n",
"2 4\n",
"3 2\n",
"3 4\n",
"5 6\n",
"5 6\n",
"2 0\n",
"1 0\n",
"2 1\n",
"6 7\n",
"2 1\n",
"6 7\n",
"3 1\n",
"2 0\n",
"5 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"5 7\n",
"2 1\n",
"6 7\n",
"2 1\n",
"6 7\n",
"2 1\n",
"5 6\n",
"2 1\n",
"6 7\n",
"5 6\n",
"3 1\n",
"6 7\n",
"1 0\n",
"1 0\n",
"2 1\n",
"3 2\n",
"5 6\n",
"5 6\n",
"6 7\n",
"3 2\n",
"6 7\n",
"3 2\n",
"3 2\n",
"2 0\n",
"3 4\n",
"3 2\n",
"2 1\n",
"6 7\n",
"2 4\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"2 0\n",
"1 0\n",
"2 4\n",
"5 6\n",
"3 4\n",
"6 7\n",
"2 4\n",
"5 6\n",
"5 6\n",
"6 7\n",
"1 0\n",
"1 0\n",
"3 2\n",
"6 7\n",
"1 0\n",
"3 2\n",
"6 7\n",
"1 0\n",
"1 0\n",
"6 7\n",
"1 0\n",
"5 6\n",
"5 6\n",
"6 7\n",
"3 1\n",
"2 4\n",
"5 6\n",
"2 1\n",
"2 4\n",
"3 4\n",
"1 0\n",
"6 7\n",
"6 7\n",
"1 0\n",
"3 2\n",
"2 1\n",
"2 4\n",
"5 6\n",
"3 2\n",
"3 0\n",
"5 6\n",
"3 2\n",
"6 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"3 1\n",
"3 4\n",
"5 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"6 7\n",
"6 7\n",
"6 7\n",
"5 6\n",
"2 0\n",
"2 1\n",
"6 7\n",
"2 1\n",
"2 1\n",
"5 6\n",
"6 7\n",
"6 7\n",
"1 0\n",
"3 4\n",
"2 1\n",
"3 2\n",
"5 6\n",
"3 4\n",
"3 2\n",
"2 4\n",
"3 4\n",
"1 0\n",
"1 0\n",
"5 6\n",
"5 6\n",
"3 2\n",
"1 0\n",
"5 6\n",
"1 0\n",
"3 2\n",
"6 7\n",
"5 6\n",
"2 1\n",
"5 6\n",
"6 7\n",
"2 1\n",
"3 2\n",
"3 2\n",
"3 2\n",
"6 7\n",
"1 0\n",
"5 6\n",
"5 6\n",
"2 1\n",
"3 1\n",
"5 6\n",
"3 2\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 2\n",
"3 2\n",
"2 1\n",
"6 7\n",
"2 4\n",
"3 4\n",
"3 2\n",
"1 0\n",
"1 0\n",
"5 6\n",
"6 7\n",
"1 0\n",
"3 0\n",
"3 4\n",
"5 6\n",
"2 1\n",
"3 2\n",
"6 7\n",
"3 4\n",
"3 2\n",
"1 0\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 4\n",
"3 2\n",
"3 4\n",
"2 0\n",
"3 4\n",
"5 6\n",
"2 1\n",
"5 6\n",
"5 6\n",
"2 4\n",
"3 1\n",
"5 6\n",
"1 0\n",
"3 4\n",
"6 7\n",
"3 4\n",
"3 4\n",
"6 7\n",
"5 6\n",
"2 0\n",
"3 2\n",
"3 2\n",
"2 1\n",
"6 7\n",
"5 6\n",
"6 7\n",
"5 6\n",
"5 6\n",
"6 7\n",
"1 0\n",
"6 7\n",
"2 0\n",
"3 4\n",
"5 6\n",
"5 6\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 2\n",
"2 1\n",
"3 2\n",
"2 0\n",
"3 4\n",
"1 0\n",
"2 0\n",
"5 6\n",
"5 6\n",
"2 1\n",
"3 0\n",
"2 0\n",
"1 0\n",
"3 4\n",
"3 2\n",
"1 0\n",
"6 7\n",
"5 6\n",
"3 4\n",
"2 0\n",
"3 2\n",
"2 1\n",
"1 0\n",
"2 0\n",
"3 4\n",
"3 4\n",
"6 7\n",
"2 1\n",
"2 1\n",
"3 2\n",
"2 1\n",
"1 0\n",
"1 0\n",
"5 6\n",
"6 7\n",
"6 7\n",
"2 4\n",
"5 6\n",
"3 4\n",
"2 1\n",
"5 6\n",
"6 7\n",
"6 7\n",
"5 6\n",
"3 4\n",
"6 7\n",
"2 4\n",
"6 7\n",
"3 0\n",
"3 4\n",
"1 0\n",
"6 7\n",
"6 7\n",
"3 2\n",
"6 7\n",
"2 1\n",
"2 4\n",
"6 7\n",
"6 7\n",
"2 1\n",
"5 6\n",
"3 2\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 2\n",
"6 7\n",
"2 4\n",
"2 4\n",
"5 6\n",
"5 4\n",
"5 7\n",
"2 1\n",
"5 6\n",
"3 4\n",
"3 2\n",
"2 4\n",
"3 2\n",
"6 7\n",
"3 2\n",
"6 7\n",
"3 2\n",
"5 6\n",
"6 7\n",
"5 6\n",
"5 6\n",
"2 1\n",
"5 6\n",
"2 1\n",
"6 7\n",
"5 6\n",
"3 1\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 2\n",
"3 4\n",
"2 1\n",
"2 1\n",
"3 4\n",
"5 6\n",
"5 7\n",
"6 7\n",
"6 7\n",
"2 1\n",
"5 6\n",
"2 1\n",
"5 6\n",
"5 6\n",
"2 1\n",
"2 1\n",
"1 0\n",
"5 6\n",
"2 1\n",
"2 4\n",
"6 7\n",
"3 2\n",
"6 7\n",
"3 0\n",
"1 0\n",
"6 7\n",
"6 7\n",
"5 6\n",
"3 2\n",
"3 2\n",
"2 1\n",
"3 2\n",
"1 0\n",
"2 1\n",
"6 7\n",
"5 6\n",
"5 7\n",
"1 0\n",
"3 4\n",
"3 4\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 2\n",
"2 0\n",
"3 2\n",
"1 4\n",
"3 4\n",
"2 0\n",
"3 2\n",
"2 1\n",
"6 7\n",
"6 7\n",
"5 6\n",
"1 0\n",
"2 0\n",
"2 4\n",
"3 2\n",
"2 1\n",
"2 0\n",
"2 1\n",
"2 1\n",
"6 7\n",
"3 2\n",
"5 6\n",
"2 1\n",
"6 7\n",
"5 6\n",
"3 2\n",
"1 0\n",
"6 7\n",
"3 2\n",
"3 2\n",
"6 7\n",
"2 1\n",
"3 4\n",
"6 7\n",
"1 0\n",
"5 6\n",
"2 1\n",
"6 7\n",
"5 6\n",
"6 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 4\n",
"2 1\n",
"2 1\n",
"5 6\n",
"2 1\n",
"6 7\n",
"6 7\n",
"5 6\n",
"5 4\n",
"2 0\n",
"2 1\n",
"5 6\n",
"6 7\n",
"6 7\n",
"5 6\n",
"2 0\n",
"5 6\n",
"5 6\n",
"5 6\n",
"1 0\n",
"6 7\n",
"2 1\n",
"3 2\n",
"6 7\n",
"3 1\n",
"3 2\n",
"6 7\n",
"6 7\n",
"3 1\n",
"6 7\n",
"3 4\n",
"5 6\n",
"2 1\n",
"1 0\n",
"3 4\n",
"3 2\n",
"6 7\n",
"6 7\n",
"5 7\n",
"3 4\n",
"2 1\n",
"2 1\n",
"3 4\n",
"1 0\n",
"3 4\n",
"3 2\n",
"2 0\n",
"5 7\n",
"5 6\n",
"5 6\n",
"3 4\n",
"3 2\n",
"5 6\n",
"3 2\n",
"1 0\n",
"3 2\n",
"6 7\n",
"6 7\n",
"5 6\n",
"1 0\n",
"3 2\n",
"5 6\n",
"3 4\n",
"1 0\n",
"1 0\n",
"2 1\n",
"6 7\n",
"5 6\n",
"1 0\n",
"2 0\n",
"3 4\n",
"5 6\n",
"3 0\n",
"5 7\n",
"3 2\n",
"3 4\n",
"6 7\n",
"3 0\n",
"3 4\n",
"2 4\n",
"5 6\n",
"1 0\n",
"6 7\n",
"6 7\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 4\n",
"6 7\n",
"5 7\n",
"3 2\n",
"6 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"3 2\n",
"5 7\n",
"2 1\n",
"2 0\n",
"3 2\n",
"6 7\n",
"3 2\n",
"6 7\n",
"2 1\n",
"5 6\n",
"2 1\n",
"5 6\n",
"2 1\n",
"1 0\n",
"5 6\n",
"2 1\n",
"2 1\n",
"1 0\n",
"3 2\n",
"3 2\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"4 1\n",
"5 6\n",
"6 7\n",
"1 0\n",
"5 6\n",
"5 6\n",
"3 4\n",
"2 4\n",
"2 4\n",
"1 0\n",
"2 0\n",
"6 7\n",
"1 0\n",
"3 2\n",
"3 2\n",
"2 0\n",
"1 0\n",
"5 6\n",
"5 6\n",
"2 0\n",
"2 4\n",
"6 7\n",
"5 6\n",
"5 6\n",
"5 6\n",
"6 7\n",
"1 0\n",
"6 7\n",
"3 2\n",
"5 7\n",
"2 1\n",
"6 7\n",
"3 4\n",
"5 6\n",
"1 0\n",
"3 4\n",
"1 2\n",
"1 0\n",
"3 4\n",
"1 0\n",
"3 4\n",
"3 2\n",
"5 6\n",
"3 2\n",
"6 7\n",
"3 2\n",
"6 7\n",
"5 6\n",
"2 1\n",
"6 7\n",
"3 4\n",
"1 0\n",
"1 0\n",
"5 6\n",
"3 4\n",
"6 7\n",
"2 1\n",
"3 4\n",
"3 2\n",
"2 1\n",
"6 7\n",
"3 2\n",
"3 4\n",
"5 6\n",
"2 1\n",
"2 4\n",
"3 2\n",
"6 7\n",
"1 0\n",
"3 2\n",
"3 2\n",
"5 6\n",
"5 6\n",
"3 2\n",
"5 7\n",
"2 1\n",
"6 7\n",
"2 1\n",
"5 6\n",
"3 2\n",
"5 6\n",
"3 1\n",
"2 1\n",
"2 1\n",
"2 4\n",
"5 6\n",
"2 1\n",
"3 2\n",
"5 7\n",
"1 0\n",
"3 4\n",
"3 2\n",
"3 2\n",
"2 4\n",
"6 7\n",
"5 6\n",
"1 0\n",
"1 0\n",
"5 6\n",
"6 7\n",
"1 0\n",
"5 6\n",
"5 6\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"1 0\n",
"3 2\n",
"5 6\n",
"6 7\n",
"5 7\n",
"5 7\n",
"1 0\n",
"3 2\n",
"2 1\n",
"5 7\n",
"6 7\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"5 6\n",
"3 2\n",
"6 7\n",
"1 0\n",
"1 0\n",
"5 6\n",
"5 6\n",
"2 1\n",
"3 2\n",
"2 1\n",
"2 1\n",
"6 7\n",
"6 7\n",
"3 2\n",
"3 4\n",
"3 2\n",
"3 2\n",
"3 2\n",
"6 7\n",
"1 0\n",
"6 7\n",
"3 2\n",
"1 0\n",
"6 7\n",
"3 2\n",
"3 0\n",
"5 6\n",
"6 7\n",
"6 7\n",
"6 7\n",
"5 7\n",
"5 6\n",
"5 7\n",
"2 4\n",
"6 7\n",
"1 0\n",
"3 2\n",
"3 2\n",
"3 2\n",
"6 7\n",
"5 6\n",
"3 2\n",
"5 6\n",
"2 1\n",
"1 0\n",
"1 0\n",
"3 4\n",
"6 7\n",
"3 2\n",
"5 6\n",
"2 1\n",
"6 7\n",
"6 7\n",
"1 0\n",
"3 4\n",
"2 0\n",
"5 6\n",
"1 0\n",
"2 1\n",
"5 6\n",
"5 6\n",
"3 1\n",
"2 1\n",
"1 0\n",
"3 4\n",
"1 0\n",
"3 2\n",
"3 4\n",
"2 4\n",
"3 2\n",
"3 2\n",
"1 0\n",
"2 1\n",
"2 4\n",
"3 2\n",
"5 7\n",
"1 0\n",
"6 7\n",
"6 7\n",
"1 0\n",
"3 2\n",
"3 2\n",
"5 6\n",
"1 0\n",
"3 4\n",
"6 7\n",
"6 7\n",
"2 1\n",
"2 1\n",
"3 2\n",
"3 2\n",
"5 6\n",
"2 4\n",
"1 0\n",
"1 0\n",
"2 1\n",
"2 1\n",
"2 1\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 4\n",
"6 7\n",
"3 4\n",
"5 7\n",
"3 2\n",
"2 4\n",
"5 7\n",
"2 4\n",
"6 7\n",
"5 6\n",
"6 7\n",
"2 0\n",
"6 7\n",
"3 2\n",
"2 0\n",
"2 4\n",
"3 0\n",
"2 1\n",
"3 2\n",
"2 1\n",
"2 4\n",
"5 6\n",
"2 4\n",
"6 7\n",
"3 2\n",
"1 0\n",
"6 7\n",
"1 0\n",
"2 4\n",
"5 6\n",
"1 0\n",
"3 2\n",
"5 7\n",
"5 6\n",
"6 7\n",
"5 6\n",
"2 0\n",
"5 6\n",
"1 0\n",
"2 0\n",
"3 4\n",
"2 1\n",
"2 4\n",
"5 6\n",
"3 4\n",
"6 7\n",
"2 4\n",
"5 6\n",
"3 2\n",
"1 0\n",
"2 0\n",
"3 4\n",
"3 2\n",
"3 2\n",
"3 2\n",
"3 4\n",
"3 2\n",
"1 0\n",
"3 2\n",
"3 2\n",
"2 0\n",
"6 7\n",
"5 6\n",
"3 2\n",
"5 6\n",
"2 1\n",
"5 6\n",
"5 6\n",
"2 1\n",
"6 7\n",
"6 7\n",
"5 6\n",
"2 1\n",
"3 2\n",
"1 0\n",
"2 1\n",
"5 6\n",
"5 6\n",
"5 6\n",
"3 4\n",
"1 0\n",
"6 7\n",
"6 7\n",
"3 2\n",
"6 7\n",
"5 6\n",
"2 0\n",
"3 4\n",
"3 2\n",
"2 1\n",
"6 7\n",
"2 4\n",
"2 1\n",
"5 6\n",
"2 1\n",
"1 0\n",
"6 7\n",
"5 6\n",
"3 4\n",
"6 7\n",
"2 1\n",
"2 1\n",
"1 0\n",
"5 6\n",
"3 4\n",
"1 0\n",
"5 6\n",
"3 2\n",
"6 7\n",
"2 1\n",
"1 0\n",
"6 7\n",
"5 6\n",
"2 1\n",
"1 0\n",
"2 1\n",
"6 7\n",
"3 2\n",
"5 6\n",
"2 1\n",
"5 6\n",
"2 1\n",
"3 4\n",
"5 6\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 2\n",
"3 2\n",
"3 4\n",
"2 1\n",
"6 7\n",
"3 0\n",
"5 6\n",
"5 7\n",
"3 2\n",
"5 6\n",
"6 7\n",
"1 0\n",
"3 2\n",
"2 1\n",
"6 7\n",
"2 0\n",
"5 6\n",
"2 1\n",
"6 7\n",
"6 7\n",
"6 7\n",
"5 6\n",
"5 6\n",
"5 6\n",
"2 1\n",
"6 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"3 0\n",
"3 4\n",
"1 0\n",
"5 7\n",
"3 4\n",
"6 7\n",
"5 6\n",
"6 7\n",
"3 2\n",
"3 4\n",
"5 6\n",
"5 6\n",
"6 7\n",
"3 4\n",
"5 6\n",
"5 6\n",
"3 4\n",
"5 7\n",
"1 0\n",
"5 6\n",
"6 7\n",
"6 7\n",
"5 6\n",
"2 1\n",
"1 0\n",
"3 2\n",
"6 7\n",
"1 0\n",
"2 4\n",
"2 1\n",
"5 7\n",
"3 2\n",
"3 0\n",
"3 4\n",
"6 7\n",
"5 6\n",
"3 4\n",
"3 4\n",
"1 0\n",
"1 0\n",
"3 1\n",
"3 4\n",
"3 2\n",
"6 7\n",
"6 7\n",
"5 6\n",
"3 2\n",
"5 6\n",
"2 4\n",
"3 2\n",
"5 6\n",
"2 0\n",
"3 2\n",
"5 6\n",
"2 0\n",
"6 7\n",
"3 2\n",
"6 7\n",
"5 6\n",
"6 7\n",
"5 7\n",
"2 1\n",
"5 7\n",
"6 7\n",
"1 0\n",
"6 7\n",
"2 1\n",
"5 6\n",
"2 1\n",
"2 1\n",
"3 2\n",
"5 7\n",
"3 4\n",
"6 7\n",
"2 1\n",
"5 6\n",
"6 7\n",
"3 2\n",
"2 0\n",
"3 2\n",
"5 7\n",
"5 6\n",
"2 4\n",
"5 6\n",
"1 0\n",
"2 0\n",
"1 0\n",
"3 2\n",
"6 7\n",
"2 1\n",
"5 6\n",
"1 0\n",
"3 4\n",
"3 4\n",
"6 7\n",
"6 7\n",
"3 4\n",
"3 2\n",
"5 6\n",
"6 7\n",
"5 6\n",
"2 1\n",
"3 2\n",
"3 2\n",
"3 2\n",
"2 1\n",
"3 2\n",
"5 7\n",
"5 6\n",
"3 2\n",
"5 6\n",
"6 7\n",
"3 1\n",
"2 1\n",
"5 7\n",
"1 0\n",
"5 6\n",
"3 4\n",
"3 2\n",
"6 7\n",
"1 0\n",
"2 4\n",
"6 7\n",
"1 0\n",
"1 0\n",
"5 6\n",
"3 2\n",
"6 7\n",
"3 2\n",
"5 6\n",
"1 0\n",
"3 2\n",
"2 1\n",
"5 6\n",
"2 1\n",
"2 1\n",
"5 6\n",
"5 6\n",
"3 2\n",
"3 0\n",
"2 1\n",
"3 4\n",
"5 6\n",
"6 7\n",
"3 4\n",
"5 6\n",
"3 1\n",
"3 2\n",
"1 0\n",
"5 6\n",
"2 0\n",
"1 4\n",
"1 0\n",
"2 1\n",
"2 0\n",
"6 7\n",
"5 6\n",
"2 1\n",
"3 2\n",
"3 2\n",
"2 0\n",
"1 0\n",
"1 0\n",
"2 0\n",
"6 7\n",
"5 6\n",
"2 1\n",
"6 7\n",
"5 6\n",
"5 7\n",
"4 1\n",
"2 4\n",
"5 6\n",
"1 0\n",
"3 4\n",
"3 4\n",
"6 7\n",
"5 6\n",
"2 1\n",
"5 6\n",
"3 4\n",
"6 7\n",
"3 4\n",
"5 6\n",
"6 7\n",
"3 2\n",
"3 2\n",
"5 6\n",
"3 4\n",
"3 2\n",
"3 2\n",
"1 0\n",
"5 6\n",
"5 6\n",
"3 2\n",
"2 1\n",
"2 4\n",
"6 7\n",
"5 6\n",
"3 2\n",
"6 7\n",
"6 7\n",
"1 4\n",
"3 1\n",
"5 6\n",
"5 6\n",
"5 6\n",
"5 6\n",
"2 0\n",
"5 6\n",
"3 1\n",
"5 6\n",
"2 4\n",
"6 7\n",
"3 2\n",
"3 2\n",
"3 4\n",
"5 6\n",
"3 2\n",
"2 0\n",
"3 0\n",
"3 4\n",
"6 7\n",
"3 2\n",
"6 7\n",
"2 1\n",
"2 1\n",
"6 7\n",
"5 6\n",
"5 6\n",
"1 0\n",
"2 4\n",
"3 4\n",
"3 2\n",
"2 1\n",
"3 2\n",
"2 4\n",
"2 0\n",
"3 2\n",
"3 4\n",
"6 7\n",
"5 7\n",
"1 0\n",
"6 7\n",
"6 7\n",
"5 7\n",
"6 7\n",
"1 0\n",
"3 4\n",
"2 0\n",
"5 6\n",
"3 2\n",
"6 7\n",
"5 7\n",
"5 6\n",
"6 7\n",
"3 2\n",
"5 6\n",
"6 7\n",
"1 0\n",
"3 2\n",
"2 1\n",
"3 4\n",
"6 7\n",
"2 4\n",
"2 4\n",
"5 6\n",
"6 7\n",
"5 6\n",
"6 7\n",
"5 7\n",
"2 4\n",
"2 1\n",
"2 0\n",
"1 0\n",
"2 1\n",
"2 0\n",
"3 2\n",
"2 4\n",
"5 6\n",
"5 7\n",
"2 1\n",
"1 0\n",
"2 0\n",
"3 2\n",
"6 7\n",
"2 1\n",
"1 4\n",
"1 0\n",
"3 2\n",
"2 1\n",
"5 6\n",
"6 7\n",
"3 4\n",
"5 6\n",
"6 7\n",
"3 4\n",
"6 7\n",
"2 1\n",
"5 6\n",
"3 2\n",
"6 7\n",
"3 2\n",
"5 6\n",
"6 7\n",
"2 1\n",
"3 2\n",
"3 4\n",
"6 7\n",
"2 1\n",
"5 6\n",
"5 6\n",
"6 7\n",
"3 4\n",
"6 7\n",
"5 6\n",
"3 4\n",
"2 1\n",
"6 7\n",
"6 7\n",
"3 2\n",
"3 1\n",
"2 1\n",
"2 0\n",
"6 7\n",
"2 1\n",
"6 7\n",
"2 1\n",
"5 6\n",
"2 1\n",
"2 0\n",
"2 1\n",
"1 2\n",
"5 6\n",
"3 4\n",
"5 6\n",
"5 6\n",
"6 7\n",
"3 2\n",
"1 0\n",
"2 1\n",
"1 6\n",
"1 0\n",
"1 0\n",
"3 2\n",
"2 4\n",
"1 0\n",
"2 4\n",
"3 4\n",
"3 2\n",
"3 4\n",
"5 7\n",
"6 7\n",
"5 6\n",
"3 2\n",
"1 0\n",
"2 0\n",
"3 4\n",
"5 6\n",
"6 7\n",
"5 7\n",
"3 2\n",
"3 4\n",
"5 6\n",
"2 1\n",
"2 1\n",
"5 6\n",
"6 7\n",
"6 7\n",
"1 0\n",
"6 7\n",
"3 4\n",
"5 6\n",
"3 2\n",
"6 7\n",
"5 6\n",
"3 0\n",
"3 4\n",
"3 4\n",
"3 2\n",
"3 4\n",
"6 7\n",
"5 6\n",
"2 1\n",
"3 4\n",
"6 7\n",
"6 7\n",
"2 1\n",
"1 0\n",
"3 4\n",
"2 0\n",
"2 4\n",
"6 7\n",
"6 7\n",
"2 1\n",
"2 1\n",
"3 2\n",
"5 6\n",
"5 6\n",
"5 6\n",
"3 2\n",
"3 2\n",
"1 0\n",
"3 4\n",
"3 2\n",
"5 6\n",
"3 2\n",
"3 2\n",
"2 1\n",
"3 2\n",
"3 2\n",
"1 0\n",
"6 7\n",
"5 6\n",
"6 7\n",
"5 6\n",
"6 7\n",
"3 2\n",
"3 2\n",
"6 7\n",
"3 4\n",
"2 1\n",
"5 6\n",
"6 7\n",
"3 2\n",
"5 6\n",
"3 2\n",
"2 1\n",
"3 2\n",
"5 6\n",
"6 7\n",
"3 2\n",
"1 0\n",
"6 7\n",
"2 1\n",
"1 0\n",
"2 1\n",
"1 0\n",
"2 4\n",
"6 7\n",
"5 6\n",
"3 2\n",
"2 1\n",
"5 6\n",
"3 2\n",
"3 2\n",
"5 6\n",
"2 1\n",
"5 6\n",
"5 6\n",
"2 1\n",
"2 1\n",
"6 7\n",
"3 1\n",
"5 7\n",
"2 1\n",
"6 7\n",
"3 4\n",
"3 2\n",
"6 7\n",
"2 1\n",
"3 4\n",
"2 0\n",
"3 2\n",
"6 7\n",
"2 1\n",
"6 7\n",
"5 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"2 1\n",
"6 7\n",
"3 2\n",
"6 7\n",
"3 2\n",
"2 1\n",
"2 0\n",
"6 7\n",
"3 4\n",
"1 0\n",
"6 7\n",
"6 7\n",
"5 6\n",
"3 1\n",
"3 2\n",
"6 7\n",
"2 4\n",
"2 4\n",
"6 7\n",
"3 2\n",
"2 0\n",
"2 1\n",
"3 4\n",
"3 2\n",
"3 2\n",
"1 0\n",
"3 2\n",
"2 1\n",
"3 4\n",
"5 7\n",
"2 1\n",
"1 0\n",
"5 6\n",
"3 2\n",
"3 2\n",
"5 6\n",
"5 7\n",
"3 2\n",
"2 0\n",
"6 7\n",
"6 7\n",
"5 6\n",
"3 4\n",
"2 4\n",
"2 1\n",
"2 4\n",
"1 0\n",
"6 7\n",
"2 0\n",
"2 4\n",
"5 6\n",
"3 2\n",
"5 6\n",
"5 7\n",
"2 1\n",
"3 2\n",
"6 7\n",
"6 7\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 4\n",
"2 1\n",
"3 2\n",
"5 7\n",
"6 7\n",
"5 7\n",
"3 2\n",
"5 6\n",
"1 0\n",
"1 0\n",
"3 4\n",
"1 0\n",
"2 1\n",
"5 6\n",
"3 1\n",
"3 2\n",
"3 4\n",
"5 6\n",
"5 6\n",
"5 7\n",
"5 6\n",
"1 0\n",
"6 7\n",
"6 7\n",
"6 7\n",
"1 2\n",
"5 6\n",
"3 4\n",
"3 2\n",
"5 6\n",
"2 0\n",
"2 1\n",
"6 7\n",
"3 2\n",
"6 7\n",
"3 2\n",
"1 0\n",
"5 6\n",
"3 2\n",
"6 7\n",
"5 6\n",
"1 0\n",
"3 4\n",
"6 7\n",
"1 0\n",
"5 6\n",
"2 1\n",
"1 0\n",
"5 6\n",
"5 6\n",
"1 0\n",
"1 0\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 4\n",
"3 2\n",
"3 2\n",
"2 0\n",
"3 4\n",
"2 1\n",
"5 7\n",
"2 1\n",
"6 7\n",
"5 6\n",
"5 6\n",
"3 2\n",
"1 0\n",
"6 7\n",
"5 6\n",
"1 0\n",
"3 2\n",
"6 7\n",
"1 0\n",
"5 6\n",
"6 7\n",
"1 0\n",
"2 1\n",
"5 6\n",
"1 0\n",
"6 7\n",
"5 6\n",
"6 7\n",
"2 1\n",
"6 7\n",
"3 4\n",
"6 7\n",
"5 6\n",
"3 4\n",
"2 4\n",
"6 7\n",
"1 0\n",
"2 1\n",
"3 2\n",
"2 1\n",
"6 7\n",
"3 2\n",
"1 0\n",
"6 7\n",
"3 2\n",
"6 7\n",
"5 6\n",
"2 1\n",
"3 4\n",
"3 2\n",
"5 6\n",
"2 0\n",
"2 1\n",
"3 4\n",
"2 1\n",
"3 2\n",
"6 7\n",
"2 1\n",
"5 6\n",
"5 6\n",
"5 6\n",
"3 4\n",
"1 0\n",
"3 2\n",
"3 2\n",
"3 2\n",
"5 6\n",
"3 4\n",
"6 7\n",
"3 2\n",
"2 1\n",
"5 6\n",
"3 2\n",
"2 4\n",
"3 2\n",
"3 0\n",
"2 1\n",
"6 7\n",
"2 0\n",
"2 1\n",
"3 4\n",
"3 2\n",
"6 7\n",
"3 2\n",
"5 6\n",
"2 4\n",
"6 7\n",
"2 0\n",
"6 7\n",
"6 7\n",
"6 7\n",
"5 6\n",
"2 1\n",
"2 4\n",
"2 1\n",
"6 7\n",
"3 0\n",
"3 4\n",
"5 6\n",
"5 7\n",
"5 6\n",
"5 6\n",
"5 6\n",
"1 0\n",
"3 4\n",
"2 0\n",
"3 2\n",
"5 6\n",
"6 7\n",
"1 0\n",
"2 1\n",
"5 6\n",
"1 0\n",
"3 4\n",
"5 6\n",
"2 1\n",
"5 4\n",
"3 4\n",
"5 7\n",
"3 2\n",
"2 0\n",
"1 0\n",
"2 4\n",
"3 1\n",
"2 1\n",
"5 7\n",
"3 2\n",
"6 7\n",
"3 4\n",
"5 6\n",
"1 2\n",
"6 7\n",
"1 2\n",
"6 7\n",
"5 6\n",
"6 7\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 4\n",
"5 6\n",
"5 7\n",
"5 6\n",
"6 7\n",
"3 4\n",
"6 7\n",
"2 1\n",
"1 0\n",
"3 4\n",
"5 6\n",
"6 7\n",
"5 6\n",
"5 6\n",
"1 0\n",
"1 0\n",
"3 2\n",
"5 6\n",
"5 6\n",
"5 6\n",
"3 2\n",
"5 7\n",
"3 2\n",
"3 4\n",
"2 1\n",
"3 2\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 2\n",
"2 1\n",
"2 1\n",
"5 6\n",
"5 6\n",
"1 0\n",
"6 7\n",
"2 1\n",
"3 4\n",
"5 6\n",
"3 2\n",
"3 0\n",
"2 1\n",
"2 4\n",
"3 2\n",
"1 0\n",
"3 2\n",
"3 2\n",
"2 0\n",
"3 2\n",
"1 0\n",
"3 2\n",
"2 1\n",
"5 6\n",
"3 4\n",
"5 6\n",
"5 6\n",
"5 4\n",
"5 7\n",
"1 0\n",
"1 2\n",
"2 1\n",
"2 1\n",
"1 2\n",
"6 7\n",
"3 4\n",
"3 2\n",
"5 6\n",
"5 6\n",
"1 0\n",
"5 6\n",
"6 7\n",
"3 4\n",
"6 7\n",
"2 1\n",
"1 0\n",
"5 4\n",
"3 2\n",
"1 0\n",
"3 2\n",
"2 1\n",
"3 4\n",
"2 4\n",
"3 2\n",
"2 1\n",
"3 4\n",
"6 7\n",
"2 0\n",
"1 0\n",
"3 2\n",
"5 6\n",
"5 7\n",
"2 4\n",
"5 6\n",
"5 6\n",
"6 7\n",
"6 7\n",
"1 0\n",
"6 7\n",
"3 2\n",
"5 7\n",
"6 7\n",
"6 7\n",
"5 6\n",
"2 1\n",
"2 1\n",
"5 6\n",
"5 6\n",
"2 1\n",
"5 6\n",
"1 0\n",
"3 2\n",
"3 4\n",
"3 2\n",
"3 4\n",
"1 0\n",
"2 0\n",
"2 1\n",
"2 0\n",
"1 0\n",
"3 4\n",
"2 4\n",
"5 6\n",
"2 0\n",
"3 2\n",
"3 2\n",
"5 6\n",
"6 7\n",
"3 2\n",
"3 2\n",
"6 7\n",
"5 6\n",
"3 2\n",
"5 6\n",
"1 2\n",
"2 4\n",
"2 1\n",
"3 6\n",
"3 2\n",
"5 6\n",
"3 4\n",
"3 1\n",
"1 0\n",
"6 7\n",
"6 7\n",
"2 1\n",
"6 7\n",
"6 7\n",
"1 0\n",
"1 0\n",
"2 1\n",
"5 6\n",
"5 7\n",
"2 0\n",
"3 2\n",
"3 2\n",
"3 2\n",
"6 7\n",
"3 2\n",
"3 2\n",
"6 7\n",
"2 1\n",
"5 6\n",
"5 7\n",
"3 4\n",
"2 1\n",
"2 0\n",
"2 1\n",
"5 6\n",
"6 7\n",
"5 6\n",
"1 0\n",
"6 7\n",
"6 7\n",
"2 1\n",
"6 7\n",
"2 1\n",
"3 4\n",
"2 1\n",
"3 4\n",
"6 7\n",
"2 1\n",
"3 2\n",
"5 6\n",
"5 7\n",
"3 2\n",
"5 7\n",
"5 6\n",
"3 4\n",
"5 6\n",
"5 6\n",
"3 2\n",
"2 0\n",
"3 2\n",
"6 7\n",
"2 1\n",
"1 0\n",
"5 6\n",
"6 7\n",
"2 1\n",
"1 0\n",
"3 4\n",
"1 0\n",
"5 6\n",
"5 6\n",
"3 1\n",
"3 4\n",
"6 7\n",
"6 7\n",
"2 1\n",
"5 6\n",
"6 7\n",
"3 2\n",
"2 1\n",
"5 6\n",
"1 0\n",
"3 2\n",
"5 7\n",
"2 1\n",
"6 7\n",
"3 2\n",
"5 7\n",
"2 0\n",
"3 2\n",
"2 0\n",
"2 1\n",
"2 1\n",
"6 7\n",
"3 2\n",
"5 6\n",
"3 4\n",
"1 0\n",
"6 7\n",
"3 4\n",
"2 1\n",
"6 7\n",
"2 0\n",
"1 4\n",
"2 1\n",
"3 4\n",
"5 6\n",
"2 1\n",
"3 4\n",
"6 7\n",
"5 6\n",
"5 6\n",
"6 7\n",
"3 4\n",
"2 1\n",
"5 6\n",
"3 2\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 4\n",
"3 2\n",
"3 2\n",
"2 1\n",
"3 0\n",
"2 4\n",
"5 6\n",
"5 6\n",
"5 6\n",
"5 6\n",
"1 0\n",
"5 6\n",
"3 0\n",
"3 4\n",
"5 6\n",
"3 1\n",
"3 2\n",
"2 1\n",
"2 1\n",
"3 1\n",
"3 1\n",
"3 2\n",
"2 1\n",
"1 0\n",
"5 6\n",
"2 1\n",
"5 7\n",
"1 0\n",
"5 6\n",
"5 7\n",
"3 2\n",
"1 2\n",
"5 6\n",
"3 4\n",
"5 6\n",
"5 6\n",
"1 0\n",
"3 4\n",
"5 6\n",
"5 6\n",
"1 0\n",
"6 7\n",
"5 6\n",
"3 4\n",
"1 0\n",
"2 4\n",
"5 6\n",
"5 7\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 1\n",
"3 4\n",
"6 7\n",
"2 4\n",
"6 7\n",
"3 2\n",
"2 1\n",
"1 0\n",
"3 2\n",
"3 2\n",
"3 2\n",
"3 2\n",
"5 6\n",
"3 4\n",
"6 7\n",
"5 6\n",
"5 6\n",
"3 4\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"2 4\n",
"3 2\n",
"1 2\n",
"2 1\n",
"2 4\n",
"5 7\n",
"3 4\n",
"3 4\n",
"5 6\n",
"3 2\n",
"6 7\n",
"2 1\n",
"5 7\n",
"2 0\n",
"3 2\n",
"2 1\n",
"6 7\n",
"2 1\n",
"3 4\n",
"3 2\n",
"5 6\n",
"5 6\n",
"1 0\n",
"2 4\n",
"2 1\n",
"3 2\n",
"2 1\n",
"2 0\n",
"2 0\n",
"1 2\n",
"2 1\n",
"1 0\n",
"5 6\n",
"1 0\n",
"3 4\n",
"2 1\n",
"5 6\n",
"2 1\n",
"5 6\n",
"5 6\n",
"2 1\n",
"2 1\n",
"3 2\n",
"3 4\n",
"2 1\n",
"1 0\n",
"6 7\n",
"3 4\n",
"3 2\n",
"6 7\n",
"2 1\n",
"1 0\n",
"3 2\n",
"5 6\n",
"3 4\n",
"3 2\n",
"3 2\n",
"5 6\n",
"2 1\n",
"6 7\n",
"2 0\n",
"5 6\n",
"6 7\n",
"3 4\n",
"3 4\n",
"5 6\n",
"3 2\n",
"6 7\n",
"5 6\n",
"3 4\n",
"2 1\n",
"5 6\n",
"6 7\n",
"5 6\n",
"5 6\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 7\n",
"3 2\n",
"2 1\n",
"3 2\n",
"5 6\n",
"5 7\n",
"6 7\n",
"3 0\n",
"5 4\n",
"6 7\n",
"2 0\n",
"5 6\n",
"6 7\n",
"6 7\n",
"2 1\n",
"6 7\n",
"6 7\n",
"1 0\n",
"3 2\n",
"5 6\n",
"3 4\n",
"6 7\n",
"3 4\n",
"1 0\n",
"5 6\n",
"5 6\n",
"5 6\n",
"5 7\n",
"2 1\n",
"2 1\n",
"6 7\n",
"6 7\n",
"3 2\n",
"6 7\n",
"2 1\n",
"6 7\n",
"6 7\n",
"5 6\n",
"3 2\n",
"3 4\n",
"5 6\n",
"2 1\n",
"6 7\n",
"6 7\n",
"2 1\n",
"6 7\n",
"5 7\n",
"2 4\n",
"5 6\n",
"6 7\n",
"3 2\n",
"3 2\n",
"5 6\n",
"2 0\n",
"3 0\n",
"5 6\n",
"2 0\n",
"6 7\n",
"3 2\n",
"5 7\n",
"3 2\n",
"6 7\n",
"5 4\n",
"5 6\n",
"3 2\n",
"2 1\n",
"5 6\n",
"5 6\n",
"3 2\n",
"6 7\n",
"2 1\n",
"2 0\n",
"2 4\n",
"1 0\n",
"2 1\n",
"1 0\n",
"2 0\n",
"1 0\n",
"3 4\n",
"5 7\n",
"1 0\n",
"6 7\n",
"2 1\n",
"5 6\n",
"3 2\n",
"3 4\n",
"3 2\n",
"5 6\n",
"6 7\n",
"1 0\n",
"3 2\n",
"1 4\n",
"3 4\n",
"3 2\n",
"5 6\n",
"5 6\n",
"5 6\n",
"6 7\n",
"1 0\n",
"2 1\n",
"6 7\n",
"5 6\n",
"5 6\n",
"3 4\n",
"2 1\n",
"1 0\n",
"5 6\n",
"1 0\n",
"2 1\n",
"3 2\n",
"3 4\n",
"1 0\n",
"3 4\n",
"1 0\n",
"2 1\n",
"2 1\n",
"5 6\n",
"3 4\n",
"3 1\n",
"2 1\n",
"3 0\n",
"6 7\n",
"3 4\n",
"6 7\n",
"3 4\n",
"1 0\n",
"5 6\n",
"3 2\n",
"1 0\n",
"3 2\n",
"5 6\n",
"2 1\n",
"2 1\n",
"6 7\n",
"5 6\n",
"3 4\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"2 4\n",
"2 1\n",
"5 6\n",
"3 1\n",
"3 2\n",
"3 4\n",
"5 6\n",
"5 6\n",
"3 2\n",
"1 0\n",
"3 2\n",
"3 2\n",
"5 6\n",
"1 0\n",
"5 6\n",
"2 1\n",
"2 0\n",
"6 7\n",
"2 4\n",
"2 1\n",
"1 0\n",
"5 6\n",
"1 0\n",
"5 6\n",
"2 1\n",
"3 4\n",
"6 7\n",
"5 6\n",
"6 7\n",
"3 2\n",
"3 2\n",
"6 7\n",
"6 7\n",
"3 4\n",
"3 2\n",
"5 6\n",
"3 2\n",
"6 7\n",
"5 7\n",
"6 7\n",
"3 4\n",
"5 6\n",
"3 2\n",
"1 0\n",
"5 6\n",
"3 2\n",
"3 2\n",
"3 2\n",
"6 7\n",
"5 6\n",
"2 1\n",
"3 4\n",
"2 1\n",
"6 7\n",
"2 1\n",
"5 6\n",
"5 6\n",
"5 6\n",
"3 2\n",
"3 2\n",
"3 2\n",
"5 7\n",
"3 2\n",
"3 4\n",
"6 7\n",
"3 2\n",
"6 7\n",
"1 0\n",
"3 4\n",
"6 7\n",
"6 7\n",
"5 7\n",
"2 0\n",
"3 2\n",
"5 6\n",
"6 7\n",
"2 0\n",
"6 7\n",
"2 1\n",
"6 7\n",
"2 1\n",
"5 6\n",
"3 4\n",
"5 6\n",
"6 7\n",
"2 0\n",
"6 7\n",
"5 6\n",
"6 7\n",
"3 2\n",
"1 0\n",
"3 2\n",
"3 1\n",
"5 6\n",
"5 6\n",
"6 7\n",
"6 7\n",
"2 1\n",
"6 7\n",
"3 4\n",
"3 4\n",
"6 7\n",
"6 7\n",
"5 6\n",
"3 2\n",
"1 2\n",
"5 6\n",
"3 2\n",
"6 7\n",
"2 1\n",
"2 1\n",
"3 4\n",
"6 7\n",
"6 7\n",
"3 2\n",
"1 0\n",
"2 0\n",
"1 0\n",
"6 7\n",
"6 7\n",
"3 1\n",
"6 7\n",
"2 1\n",
"5 6\n",
"2 0\n",
"6 7\n",
"5 6\n",
"5 6\n",
"5 6\n",
"6 7\n",
"1 0\n",
"5 7\n",
"5 7\n",
"3 4\n",
"1 0\n",
"3 2\n",
"2 4\n",
"3 2\n",
"5 6\n",
"2 1\n",
"6 7\n",
"6 7\n",
"6 7\n",
"1 0\n",
"2 4\n",
"6 7\n",
"6 7\n",
"2 1\n",
"3 4\n",
"2 1\n",
"6 7\n",
"2 1\n",
"5 7\n",
"5 6\n",
"2 4\n",
"5 6\n",
"6 7\n",
"2 1\n",
"6 7\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 4\n",
"2 1\n",
"3 4\n",
"1 0\n",
"2 1\n",
"3 4\n",
"5 6\n",
"2 4\n",
"5 6\n",
"3 2\n",
"1 0\n",
"1 0\n",
"1 0\n",
"3 4\n",
"5 6\n",
"5 6\n",
"2 1\n",
"5 6\n",
"6 7\n",
"3 2\n",
"2 0\n",
"3 4\n",
"5 6\n",
"5 6\n",
"3 1\n",
"5 7\n",
"5 6\n",
"2 4\n",
"4 6\n",
"5 7\n",
"3 2\n",
"3 2\n",
"3 2\n",
"6 7\n",
"5 6\n",
"6 7\n",
"3 4\n",
"3 2\n",
"3 4\n",
"6 7\n",
"3 4\n",
"5 6\n",
"2 1\n",
"5 7\n",
"1 0\n",
"2 0\n",
"3 2\n",
"2 1\n",
"1 0\n",
"1 2\n",
"2 4\n",
"2 0\n",
"3 4\n",
"2 1\n",
"5 6\n",
"3 2\n",
"5 6\n",
"2 1\n",
"3 4\n",
"2 1\n",
"2 4\n",
"5 6\n",
"6 7\n",
"5 7\n",
"3 4\n",
"5 6\n",
"2 1\n",
"5 7\n",
"2 4\n",
"3 2\n",
"6 7\n",
"5 6\n",
"5 6\n",
"2 1\n",
"1 0\n",
"5 6\n",
"5 7\n",
"5 6\n",
"2 4\n",
"2 4\n",
"1 0\n",
"5 6\n",
"5 6\n",
"5 6\n",
"1 2\n",
"6 7\n",
"3 2\n",
"2 1\n",
"5 6\n",
"3 4\n",
"2 0\n",
"5 7\n",
"3 4\n",
"6 7\n",
"1 0\n",
"3 2\n",
"3 2\n",
"3 2\n",
"5 7\n",
"1 0\n",
"5 6\n",
"6 7\n",
"6 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"3 4\n",
"5 6\n",
"3 4\n",
"6 7\n",
"6 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"1 0\n",
"5 6\n",
"2 4\n",
"1 0\n",
"1 2\n",
"5 6\n",
"5 6\n",
"3 2\n",
"2 1\n",
"2 1\n",
"5 6\n",
"6 7\n",
"3 2\n",
"6 7\n",
"6 7\n",
"3 1\n",
"5 6\n",
"5 6\n",
"1 0\n",
"6 7\n",
"2 1\n",
"3 4\n",
"1 4\n",
"2 4\n",
"3 2\n",
"5 6\n",
"2 1\n",
"3 2\n",
"1 0\n",
"3 0\n",
"6 7\n",
"3 4\n",
"6 7\n",
"1 0\n",
"6 7\n",
"3 4\n",
"3 2\n",
"5 6\n",
"6 7\n",
"2 1\n",
"3 1\n",
"2 1\n",
"2 1\n",
"6 7\n",
"3 4\n",
"3 4\n",
"2 4\n",
"3 2\n",
"5 6\n",
"3 4\n",
"5 6\n",
"3 2\n",
"2 1\n",
"5 6\n",
"1 0\n",
"6 7\n",
"2 0\n",
"2 1\n",
"5 6\n",
"2 1\n",
"5 6\n",
"6 7\n",
"1 0\n",
"5 6\n",
"1 0\n",
"3 2\n",
"6 7\n",
"3 4\n",
"3 2\n",
"5 7\n",
"1 0\n",
"3 4\n",
"5 6\n",
"2 1\n",
"2 4\n",
"5 6\n",
"3 2\n",
"1 0\n",
"5 6\n",
"1 2\n",
"3 4\n",
"3 2\n",
"3 2\n",
"3 4\n",
"6 7\n",
"3 2\n",
"1 0\n",
"3 2\n",
"6 7\n",
"6 7\n",
"2 1\n",
"3 2\n",
"3 4\n",
"3 4\n",
"6 7\n",
"1 0\n",
"1 0\n",
"5 6\n",
"2 4\n",
"5 6\n",
"1 0\n",
"2 1\n",
"5 6\n",
"2 1\n",
"5 6\n",
"2 4\n",
"3 2\n",
"3 4\n",
"5 7\n",
"3 4\n",
"3 4\n",
"2 0\n",
"1 0\n",
"2 0\n",
"5 6\n",
"3 2\n",
"2 1\n",
"5 6\n",
"2 1\n",
"6 7\n",
"5 7\n",
"6 7\n",
"3 4\n",
"1 0\n",
"5 6\n",
"6 7\n",
"2 1\n",
"5 6\n",
"2 1\n",
"5 7\n",
"5 6\n",
"3 2\n",
"5 6\n",
"6 7\n",
"5 6\n",
"1 0\n",
"2 1\n",
"3 4\n",
"6 7\n",
"3 2\n",
"3 4\n",
"5 6\n",
"2 1\n",
"5 6\n",
"3 2\n",
"5 6\n",
"6 7\n",
"5 6\n",
"1 0\n",
"5 6\n",
"6 7\n",
"5 7\n",
"5 6\n",
"3 0\n",
"6 7\n",
"1 2\n",
"6 7\n",
"6 7\n",
"1 0\n",
"3 2\n",
"6 7\n",
"2 1\n",
"3 4\n",
"3 2\n",
"2 1\n",
"1 0\n",
"3 2\n",
"3 4\n",
"6 7\n",
"2 0\n",
"2 1\n",
"6 7\n",
"5 6\n",
"5 7\n",
"1 0\n",
"6 7\n",
"5 6\n",
"1 0\n",
"6 7\n",
"6 7\n",
"3 2\n",
"3 2\n",
"2 4\n",
"1 0\n",
"6 7\n",
"6 7\n",
"2 1\n",
"2 4\n",
"1 0\n",
"3 4\n",
"2 1\n",
"2 4\n",
"4 6\n",
"2 1\n",
"5 6\n",
"1 0\n",
"2 1\n",
"5 6\n",
"5 6\n",
"5 6\n",
"3 2\n",
"3 4\n",
"3 2\n",
"5 6\n",
"3 2\n",
"5 6\n",
"3 2\n",
"5 6\n",
"3 4\n",
"6 7\n",
"3 4\n",
"6 7\n",
"2 1\n",
"2 4\n",
"1 0\n",
"6 7\n",
"5 6\n",
"5 6\n",
"3 4\n",
"6 7\n",
"6 7\n",
"5 6\n",
"2 4\n",
"2 4\n",
"2 1\n",
"6 7\n",
"6 7\n",
"3 2\n",
"3 2\n",
"3 2\n",
"6 7\n",
"2 0\n",
"6 7\n",
"6 7\n",
"3 2\n",
"2 4\n",
"6 7\n",
"2 1\n",
"5 6\n",
"1 0\n",
"6 7\n",
"3 2\n",
"5 6\n",
"1 0\n",
"5 6\n",
"5 6\n",
"3 2\n",
"3 2\n",
"6 7\n",
"2 1\n",
"3 2\n",
"6 7\n",
"6 7\n",
"3 2\n",
"5 6\n",
"3 4\n",
"5 6\n",
"6 7\n",
"2 1\n",
"2 1\n",
"2 0\n",
"1 0\n",
"2 1\n",
"1 0\n",
"2 1\n",
"6 7\n",
"5 7\n",
"2 1\n",
"6 7\n",
"3 1\n",
"3 1\n",
"2 1\n",
"6 7\n",
"3 2\n",
"1 0\n",
"1 0\n",
"5 6\n",
"3 4\n",
"3 2\n",
"3 4\n",
"2 0\n",
"2 1\n",
"3 2\n",
"3 4\n",
"2 1\n",
"3 2\n",
"2 4\n",
"6 7\n",
"5 6\n",
"6 7\n",
"3 4\n",
"5 6\n",
"6 7\n",
"6 7\n",
"3 2\n",
"6 7\n",
"5 6\n",
"6 7\n",
"3 4\n",
"3 2\n",
"6 7\n",
"3 2\n",
"1 0\n",
"2 1\n",
"5 6\n",
"3 4\n",
"2 1\n",
"5 6\n",
"3 2\n",
"3 4\n",
"3 2\n",
"3 4\n",
"2 4\n",
"1 0\n",
"1 0\n",
"3 4\n",
"6 7\n",
"3 4\n",
"2 1\n",
"1 0\n",
"3 2\n",
"5 6\n",
"6 7\n",
"3 2\n",
"5 6\n",
"2 0\n",
"1 0\n",
"2 0\n",
"2 0\n",
"3 4\n",
"3 4\n",
"6 7\n",
"2 4\n",
"5 6\n",
"3 2\n",
"3 2\n",
"6 7\n",
"5 6\n",
"6 7\n",
"2 1\n",
"3 2\n",
"6 7\n",
"6 7\n",
"1 0\n",
"5 7\n",
"1 0\n",
"3 4\n",
"6 7\n",
"6 7\n",
"6 7\n",
"2 4\n",
"3 4\n",
"5 6\n",
"5 6\n",
"3 2\n",
"1 0\n",
"6 7\n",
"2 0\n",
"2 1\n",
"2 0\n",
"5 6\n",
"5 7\n",
"3 4\n",
"6 7\n",
"3 2\n",
"3 2\n",
"6 7\n",
"5 6\n",
"3 4\n",
"2 1\n",
"3 4\n",
"3 4\n",
"5 6\n",
"3 2\n",
"6 7\n",
"3 4\n",
"6 7\n",
"5 6\n",
"5 6\n",
"5 6\n",
"3 2\n",
"2 1\n",
"5 6\n",
"3 2\n",
"1 0\n",
"3 4\n",
"3 2\n",
"1 0\n",
"5 6\n",
"3 2\n",
"1 0\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 2\n",
"1 0\n",
"3 4\n",
"6 7\n",
"1 0\n",
"5 6\n",
"2 1\n",
"1 0\n",
"1 0\n",
"6 7\n",
"2 1\n",
"1 6\n",
"3 4\n",
"3 2\n",
"6 7\n",
"3 4\n",
"3 4\n",
"2 1\n",
"5 6\n",
"6 7\n",
"5 7\n",
"6 7\n",
"2 1\n",
"2 1\n",
"2 1\n",
"6 7\n",
"1 0\n",
"3 2\n",
"5 7\n",
"6 7\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"5 6\n",
"3 4\n",
"6 7\n",
"3 4\n",
"3 2\n",
"6 7\n",
"6 7\n",
"5 7\n",
"3 2\n",
"1 0\n",
"6 7\n",
"3 2\n",
"3 4\n",
"3 0\n",
"3 2\n",
"5 6\n",
"1 0\n",
"6 7\n",
"6 7\n",
"6 7\n",
"4 6\n",
"6 7\n",
"5 6\n",
"2 1\n",
"2 1\n",
"2 1\n",
"2 1\n",
"1 0\n",
"1 0\n",
"3 4\n",
"3 2\n",
"2 1\n",
"3 2\n",
"3 2\n",
"3 4\n",
"2 1\n",
"3 4\n",
"1 2\n",
"3 4\n",
"3 4\n",
"2 1\n",
"6 7\n",
"3 4\n",
"5 7\n",
"5 6\n",
"3 2\n",
"6 7\n",
"6 7\n",
"3 4\n",
"3 2\n",
"3 4\n",
"6 7\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 2\n",
"3 2\n",
"3 2\n",
"3 2\n",
"3 2\n",
"3 2\n",
"5 6\n",
"2 0\n",
"2 1\n",
"3 4\n",
"1 0\n",
"5 6\n",
"3 2\n",
"2 4\n",
"3 2\n",
"6 7\n",
"5 6\n",
"5 6\n",
"5 6\n",
"3 2\n",
"6 7\n",
"3 4\n",
"6 7\n",
"5 6\n",
"3 2\n",
"5 6\n",
"2 1\n",
"2 1\n",
"3 4\n",
"5 6\n",
"5 6\n",
"2 1\n",
"3 4\n",
"2 1\n",
"3 4\n",
"5 6\n",
"6 7\n",
"1 4\n",
"3 4\n",
"2 4\n",
"3 2\n",
"5 6\n",
"2 1\n",
"3 2\n",
"2 1\n",
"6 7\n",
"3 0\n",
"2 0\n",
"2 1\n",
"5 6\n",
"2 4\n",
"5 6\n",
"1 0\n",
"6 7\n",
"2 1\n",
"5 6\n",
"3 2\n",
"6 7\n",
"6 7\n",
"3 2\n",
"5 6\n",
"3 4\n",
"6 7\n",
"5 6\n",
"1 0\n",
"2 1\n",
"6 7\n",
"6 7\n",
"3 4\n",
"3 2\n",
"3 4\n",
"1 0\n",
"2 1\n",
"2 4\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 2\n",
"1 0\n",
"5 6\n",
"3 0\n",
"3 2\n",
"3 4\n",
"1 0\n",
"1 0\n",
"3 2\n",
"3 2\n",
"3 2\n",
"3 2\n",
"5 6\n",
"2 1\n",
"3 4\n",
"2 1\n",
"6 7\n",
"1 0\n",
"2 1\n",
"5 6\n",
"6 7\n",
"5 7\n",
"2 1\n",
"3 2\n",
"2 4\n",
"5 6\n",
"5 6\n",
"5 6\n",
"2 1\n",
"5 6\n",
"3 2\n",
"2 1\n",
"5 6\n",
"3 4\n",
"1 0\n",
"6 7\n",
"2 1\n",
"3 2\n",
"2 4\n",
"3 2\n",
"5 6\n",
"2 0\n",
"2 1\n",
"2 0\n",
"5 7\n",
"5 6\n",
"5 7\n",
"1 0\n",
"2 1\n",
"3 4\n",
"2 1\n",
"6 7\n",
"5 6\n",
"2 1\n",
"5 6\n",
"5 6\n",
"5 6\n",
"2 1\n",
"5 6\n",
"1 0\n",
"3 2\n",
"5 6\n",
"6 7\n",
"5 6\n",
"1 0\n",
"2 4\n",
"1 0\n",
"3 4\n",
"5 6\n",
"6 7\n",
"2 1\n",
"3 4\n",
"6 7\n",
"2 0\n",
"3 4\n",
"5 6\n",
"3 1\n",
"5 7\n",
"5 6\n",
"3 2\n",
"6 7\n",
"2 1\n",
"3 2\n",
"3 2\n",
"5 4\n",
"3 4\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 2\n",
"5 6\n",
"2 0\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 4\n",
"2 1\n",
"3 2\n",
"2 0\n",
"5 6\n",
"2 1\n",
"3 4\n",
"5 7\n",
"5 6\n",
"6 7\n",
"2 4\n",
"1 0\n",
"2 4\n",
"6 7\n",
"5 6\n",
"3 4\n",
"2 4\n",
"6 7\n",
"3 2\n",
"6 7\n",
"3 2\n",
"3 2\n",
"3 2\n",
"2 0\n",
"5 6\n",
"3 2\n",
"2 1\n",
"5 6\n",
"5 6\n",
"3 4\n",
"6 7\n",
"2 1\n",
"6 7\n",
"3 4\n",
"3 4\n",
"6 7\n",
"2 4\n",
"1 0\n",
"2 1\n",
"6 7\n",
"2 0\n",
"2 1\n",
"2 0\n",
"3 1\n",
"6 7\n",
"1 0\n",
"3 4\n",
"6 7\n",
"6 7\n",
"2 1\n",
"5 6\n",
"6 7\n",
"3 4\n",
"3 2\n",
"6 7\n",
"2 4\n",
"1 0\n",
"2 0\n",
"5 6\n",
"6 7\n",
"5 6\n",
"2 1\n",
"1 0\n",
"6 7\n",
"3 2\n",
"3 2\n",
"5 6\n",
"3 4\n",
"6 7\n",
"4 2\n",
"6 7\n",
"5 6\n",
"3 2\n",
"6 7\n",
"1 0\n",
"3 4\n",
"5 6\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"5 6\n",
"3 4\n",
"3 4\n",
"2 1\n",
"3 4\n",
"5 6\n",
"3 4\n",
"3 4\n",
"6 7\n",
"2 1\n",
"1 0\n",
"5 6\n",
"6 7\n",
"3 4\n",
"5 6\n",
"6 7\n",
"3 4\n",
"6 7\n",
"1 0\n",
"3 4\n",
"1 0\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 2\n",
"2 4\n",
"5 7\n",
"6 7\n",
"6 7\n",
"3 2\n",
"3 4\n",
"2 1\n",
"3 2\n",
"3 2\n",
"3 0\n",
"2 0\n",
"2 4\n",
"6 7\n",
"2 0\n",
"2 1\n",
"6 7\n",
"3 2\n",
"6 7\n",
"3 2\n",
"5 7\n",
"5 7\n",
"6 7\n",
"3 2\n",
"6 7\n",
"3 4\n",
"2 4\n",
"5 7\n",
"3 2\n",
"6 7\n",
"6 7\n",
"5 6\n",
"2 4\n",
"1 0\n",
"3 4\n",
"5 7\n",
"5 6\n",
"2 0\n",
"1 0\n",
"5 6\n",
"1 0\n",
"2 1\n",
"5 6\n",
"1 0\n",
"6 7\n",
"3 4\n",
"3 2\n",
"6 7\n",
"1 0\n",
"3 4\n",
"5 6\n",
"5 6\n",
"2 1\n",
"6 7\n",
"3 1\n",
"3 2\n",
"3 2\n",
"5 7\n",
"5 6\n",
"6 7\n",
"1 0\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 2\n",
"6 7\n",
"1 0\n",
"6 7\n",
"5 6\n",
"5 6\n",
"5 6\n",
"2 0\n",
"6 7\n",
"3 2\n",
"6 7\n",
"5 6\n",
"1 0\n",
"6 7\n",
"6 7\n",
"5 6\n",
"1 0\n",
"2 1\n",
"3 4\n",
"3 4\n",
"3 2\n",
"2 4\n",
"6 7\n",
"6 7\n",
"5 6\n",
"5 6\n",
"5 6\n",
"2 1\n",
"5 6\n",
"6 7\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"1 0\n",
"5 6\n",
"3 2\n",
"5 6\n",
"3 4\n",
"6 7\n",
"1 0\n",
"1 0\n",
"5 6\n",
"5 6\n",
"3 4\n",
"5 6\n",
"5 6\n",
"5 6\n",
"2 0\n",
"6 7\n",
"2 4\n",
"5 6\n",
"3 4\n",
"1 0\n",
"3 2\n",
"3 2\n",
"6 7\n",
"2 0\n",
"2 1\n",
"2 1\n",
"2 1\n",
"1 0\n",
"3 1\n",
"1 0\n",
"6 7\n",
"5 6\n",
"5 6\n",
"5 6\n",
"3 2\n",
"5 7\n",
"6 7\n",
"2 1\n",
"5 7\n",
"3 2\n",
"6 7\n",
"1 0\n",
"2 1\n",
"3 4\n",
"2 1\n",
"3 4\n",
"6 7\n",
"3 2\n",
"2 1\n",
"5 6\n",
"6 7\n",
"3 4\n",
"6 7\n",
"5 6\n",
"3 4\n",
"2 0\n",
"3 4\n",
"6 7\n",
"5 6\n",
"5 6\n",
"5 6\n",
"2 0\n",
"2 4\n",
"5 6\n",
"2 1\n",
"3 4\n",
"5 6\n",
"5 7\n",
"5 6\n",
"6 7\n",
"2 1\n",
"6 7\n",
"3 2\n",
"6 7\n",
"1 0\n",
"1 0\n",
"2 0\n",
"2 4\n",
"1 0\n",
"3 4\n",
"2 1\n",
"3 2\n",
"2 4\n",
"2 0\n",
"3 1\n",
"6 7\n",
"6 7\n",
"2 1\n",
"2 1\n",
"5 6\n",
"3 1\n",
"3 2\n",
"2 4\n",
"3 2\n",
"2 0\n",
"5 6\n",
"3 4\n",
"5 6\n",
"6 7\n",
"5 6\n",
"6 7\n",
"3 4\n",
"1 0\n",
"6 7\n",
"2 1\n",
"2 0\n",
"5 6\n",
"3 4\n",
"5 6\n",
"6 7\n",
"2 1\n",
"6 7\n",
"6 7\n",
"2 1\n",
"1 0\n",
"3 2\n",
"2 4\n",
"5 6\n",
"2 1\n",
"1 0\n",
"2 0\n",
"3 0\n",
"2 4\n",
"3 0\n",
"6 7\n",
"1 0\n",
"2 4\n",
"2 4\n",
"1 0\n",
"5 6\n",
"2 4\n",
"5 6\n",
"3 2\n",
"6 7\n",
"1 0\n",
"6 7\n",
"6 7\n",
"6 7\n",
"1 0\n",
"5 6\n",
"3 2\n",
"5 6\n",
"2 1\n",
"2 4\n",
"2 0\n",
"3 2\n",
"3 2\n",
"2 0\n",
"5 6\n",
"5 6\n",
"3 2\n",
"5 7\n",
"6 7\n",
"5 6\n",
"3 4\n",
"1 0\n",
"2 1\n",
"5 6\n",
"1 0\n",
"3 2\n",
"5 6\n",
"2 1\n",
"3 2\n",
"1 0\n",
"3 2\n",
"5 7\n",
"5 6\n",
"1 0\n",
"1 0\n",
"6 7\n",
"3 2\n",
"3 2\n",
"3 2\n",
"6 7\n",
"3 4\n",
"3 2\n",
"3 2\n",
"5 6\n",
"3 4\n",
"5 6\n",
"6 7\n",
"2 1\n",
"3 4\n",
"5 6\n",
"6 7\n",
"3 4\n",
"5 6\n",
"3 4\n",
"2 1\n",
"3 4\n",
"5 6\n",
"6 7\n",
"3 4\n",
"2 1\n",
"3 4\n",
"3 2\n",
"6 7\n",
"2 4\n",
"5 6\n",
"6 7\n",
"3 2\n",
"3 4\n",
"6 7\n",
"1 0\n",
"6 7\n",
"6 7\n",
"6 7\n",
"5 6\n",
"3 2\n",
"2 1\n",
"3 1\n",
"2 0\n",
"3 4\n",
"2 1\n",
"3 0\n",
"2 4\n",
"2 1\n",
"3 2\n",
"5 6\n",
"3 4\n",
"5 6\n",
"6 7\n",
"3 2\n",
"3 4\n",
"5 7\n",
"2 1\n",
"3 4\n",
"3 2\n",
"6 7\n",
"5 6\n",
"3 2\n",
"3 4\n",
"5 6\n",
"3 2\n",
"3 2\n",
"3 2\n",
"5 6\n",
"5 6\n",
"3 2\n",
"5 6\n",
"1 0\n",
"5 6\n",
"6 7\n",
"3 4\n",
"5 6\n",
"3 2\n",
"3 4\n",
"5 6\n",
"5 6\n",
"3 4\n",
"3 4\n",
"2 1\n",
"3 2\n",
"2 1\n",
"6 7\n",
"2 0\n",
"3 2\n",
"5 6\n",
"5 6\n",
"5 6\n",
"1 0\n",
"2 1\n",
"6 7\n",
"5 6\n",
"3 2\n",
"2 1\n",
"5 6\n",
"3 2\n",
"5 6\n",
"2 1\n",
"2 1\n",
"5 7\n",
"2 1\n",
"1 0\n",
"5 6\n",
"1 0\n",
"5 6\n",
"3 2\n",
"1 0\n",
"3 4\n",
"2 4\n",
"2 1\n",
"5 6\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 0\n",
"3 4\n",
"3 4\n",
"6 7\n",
"6 7\n",
"2 1\n",
"3 2\n",
"1 0\n",
"6 7\n",
"2 0\n",
"5 6\n",
"5 6\n",
"2 0\n",
"6 7\n",
"6 7\n",
"1 0\n",
"3 4\n",
"5 6\n",
"3 4\n",
"3 2\n",
"2 1\n",
"2 1\n",
"2 1\n",
"3 4\n",
"6 7\n",
"3 2\n",
"1 0\n",
"2 1\n",
"2 0\n",
"3 2\n",
"3 4\n",
"2 4\n",
"5 7\n",
"3 4\n",
"3 2\n",
"6 7\n",
"3 2\n",
"1 0\n",
"4 6\n",
"6 7\n",
"3 2\n",
"2 1\n",
"6 7\n",
"5 6\n",
"3 2\n",
"1 0\n",
"6 7\n",
"3 2\n",
"6 7\n",
"6 7\n",
"2 1\n",
"2 1\n",
"1 0\n",
"1 0\n",
"2 4\n",
"5 7\n",
"3 2\n",
"2 1\n",
"6 7\n",
"6 7\n",
"3 4\n",
"3 4\n",
"1 0\n",
"2 0\n",
"6 7\n",
"2 4\n",
"6 7\n",
"1 0\n",
"2 0\n",
"6 7\n",
"2 1\n",
"3 4\n",
"6 7\n",
"3 2\n",
"3 2\n",
"3 2\n",
"6 7\n",
"2 1\n",
"1 2\n",
"5 6\n",
"3 2\n",
"6 7\n",
"2 1\n",
"5 6\n",
"3 2\n",
"6 7\n",
"3 4\n",
"2 0\n",
"6 7\n",
"3 4\n",
"3 2\n",
"6 7\n",
"3 4\n",
"6 7\n",
"2 1\n",
"2 1\n",
"2 0\n",
"3 4\n",
"6 7\n",
"6 7\n",
"3 4\n",
"6 7\n",
"5 6\n",
"5 6\n",
"2 4\n",
"5 6\n",
"6 7\n",
"6 7\n",
"2 1\n",
"6 7\n",
"2 1\n",
"5 6\n",
"2 1\n",
"2 4\n",
"2 4\n",
"6 7\n",
"2 4\n",
"3 2\n",
"3 4\n",
"3 4\n",
"1 0\n",
"5 6\n",
"2 1\n",
"6 7\n",
"1 0\n",
"5 6\n",
"6 7\n",
"5 7\n",
"3 2\n",
"6 7\n",
"5 6\n",
"1 0\n",
"2 0\n",
"3 4\n",
"2 1\n",
"5 7\n",
"6 7\n",
"3 2\n",
"5 6\n",
"3 2\n",
"5 6\n",
"5 6\n",
"6 7\n",
"3 4\n",
"1 0\n",
"6 7\n",
"2 4\n",
"2 0\n",
"1 0\n",
"5 6\n",
"5 6\n",
"2 0\n",
"6 7\n",
"6 7\n",
"5 6\n",
"5 6\n",
"2 0\n",
"5 6\n",
"3 0\n",
"5 7\n",
"3 4\n",
"3 2\n",
"2 1\n",
"6 7\n",
"6 7\n",
"2 1\n",
"6 7\n",
"3 2\n",
"5 6\n",
"5 6\n",
"5 6\n",
"5 6\n",
"6 7\n",
"2 1\n",
"5 6\n",
"3 2\n",
"3 2\n",
"1 4\n",
"2 1\n",
"2 1\n",
"5 6\n",
"6 7\n",
"2 0\n",
"6 7\n",
"6 7\n",
"5 6\n",
"3 4\n",
"6 7\n",
"5 6\n",
"3 2\n",
"5 6\n",
"2 1\n",
"1 0\n",
"2 1\n",
"3 2\n",
"3 4\n",
"3 4\n",
"3 4\n",
"5 7\n",
"1 0\n",
"3 1\n",
"5 6\n",
"6 7\n",
"6 7\n",
"3 2\n",
"1 0\n",
"2 0\n",
"3 2\n",
"6 7\n",
"5 6\n",
"6 7\n",
"3 2\n",
"2 1\n",
"2 0\n",
"6 7\n",
"6 7\n",
"2 0\n",
"5 6\n",
"5 6\n",
"2 1\n",
"1 4\n",
"5 6\n",
"2 0\n",
"6 7\n",
"3 2\n",
"2 4\n",
"5 6\n",
"2 4\n",
"3 1\n",
"5 7\n",
"5 7\n",
"2 0\n",
"5 7\n",
"3 2\n",
"2 1\n",
"5 6\n",
"3 2\n",
"2 0\n",
"3 1\n",
"6 7\n",
"2 1\n",
"2 1\n",
"2 4\n",
"1 0\n",
"1 0\n",
"2 0\n",
"6 7\n",
"2 1\n",
"5 6\n",
"5 6\n",
"3 2\n",
"3 1\n",
"5 7\n",
"2 1\n",
"6 7\n",
"5 6\n",
"3 2\n",
"2 1\n",
"6 7\n",
"6 7\n",
"1 0\n",
"5 6\n",
"6 7\n",
"5 6\n",
"1 0\n",
"2 4\n",
"2 1\n",
"1 0\n",
"6 7\n",
"1 0\n",
"5 6\n",
"1 0\n",
"2 1\n",
"1 0\n",
"2 1\n",
"5 7\n",
"3 4\n",
"2 1\n",
"5 7\n",
"5 6\n",
"3 2\n",
"5 6\n",
"3 2\n",
"5 7\n",
"6 7\n",
"3 2\n",
"5 6\n",
"2 6\n",
"5 6\n",
"3 4\n",
"3 2\n",
"1 4\n",
"2 1\n",
"3 4\n",
"6 7\n",
"6 7\n",
"5 7\n",
"3 2\n",
"5 6\n",
"3 4\n",
"6 7\n",
"2 1\n",
"2 1\n",
"2 4\n",
"2 1\n",
"2 0\n",
"5 6\n",
"5 6\n",
"5 7\n",
"5 6\n",
"3 2\n",
"2 1\n",
"5 6\n",
"5 6\n",
"6 7\n",
"2 0\n",
"3 2\n",
"5 6\n",
"6 7\n",
"5 6\n",
"6 7\n",
"3 2\n",
"6 7\n",
"2 1\n",
"1 0\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 2\n",
"3 2\n",
"4 6\n",
"5 6\n",
"2 0\n",
"2 1\n",
"3 1\n",
"6 7\n",
"5 7\n",
"6 7\n",
"5 6\n",
"3 0\n",
"3 2\n",
"6 7\n",
"6 7\n",
"1 0\n",
"6 7\n",
"2 0\n",
"1 0\n",
"2 1\n",
"6 7\n",
"6 7\n",
"6 7\n",
"2 1\n",
"1 0\n",
"3 4\n",
"3 4\n",
"6 7\n",
"2 1\n",
"2 0\n",
"2 4\n",
"2 1\n",
"5 6\n",
"3 4\n",
"3 4\n",
"5 6\n",
"5 6\n",
"3 2\n",
"5 6\n",
"3 2\n",
"3 2\n",
"2 1\n",
"6 7\n",
"3 4\n",
"2 0\n",
"1 6\n",
"1 0\n",
"2 1\n",
"1 2\n",
"6 7\n",
"3 2\n",
"3 4\n",
"1 0\n",
"5 6\n",
"1 0\n",
"6 7\n",
"3 4\n",
"1 0\n",
"2 1\n",
"2 0\n",
"2 1\n",
"3 4\n",
"5 6\n",
"2 1\n",
"5 6\n",
"6 7\n",
"6 7\n",
"3 4\n",
"2 1\n",
"2 1\n",
"2 1\n",
"6 7\n",
"5 6\n",
"3 4\n",
"2 0\n",
"2 0\n",
"2 1\n",
"5 7\n",
"2 0\n",
"2 1\n",
"1 0\n",
"3 4\n",
"6 7\n",
"6 7\n",
"6 7\n",
"2 1\n",
"5 6\n",
"1 0\n",
"5 6\n",
"6 7\n",
"3 4\n",
"2 1\n",
"6 7\n",
"6 7\n",
"3 2\n",
"6 7\n",
"5 7\n",
"3 2\n",
"2 0\n",
"2 1\n",
"3 2\n",
"1 0\n",
"3 4\n",
"3 2\n",
"2 0\n",
"2 0\n",
"6 7\n",
"3 4\n",
"3 4\n",
"3 2\n",
"5 6\n",
"6 7\n",
"3 4\n",
"3 2\n",
"5 7\n",
"5 6\n",
"3 1\n",
"2 1\n",
"6 7\n",
"1 0\n",
"3 2\n",
"2 4\n",
"6 7\n",
"5 6\n",
"2 1\n",
"2 1\n",
"2 1\n",
"2 1\n",
"5 6\n",
"2 1\n",
"5 6\n",
"5 6\n",
"6 7\n",
"3 4\n",
"2 1\n",
"3 4\n",
"2 1\n",
"3 4\n",
"6 7\n",
"1 0\n",
"2 1\n",
"5 6\n",
"3 4\n",
"3 4\n",
"6 7\n",
"3 2\n",
"5 6\n",
"2 1\n",
"3 1\n",
"5 6\n",
"6 7\n",
"2 0\n",
"5 6\n",
"3 1\n",
"3 1\n",
"2 1\n",
"6 7\n",
"2 4\n",
"5 4\n",
"5 6\n",
"6 7\n",
"2 1\n",
"3 2\n",
"3 1\n",
"2 0\n",
"6 7\n",
"5 7\n",
"2 1\n",
"5 6\n",
"5 6\n",
"3 2\n",
"5 6\n",
"2 4\n",
"6 7\n",
"5 6\n",
"3 4\n",
"5 6\n",
"3 2\n",
"1 0\n",
"6 7\n",
"3 4\n",
"6 7\n",
"5 6\n",
"3 4\n",
"3 4\n",
"2 1\n",
"6 7\n",
"5 6\n",
"3 4\n",
"2 0\n",
"2 1\n",
"5 6\n",
"2 4\n",
"3 2\n",
"5 6\n",
"2 1\n",
"3 2\n",
"3 2\n",
"1 0\n",
"3 4\n",
"2 1\n",
"2 0\n",
"5 7\n",
"6 7\n",
"3 1\n",
"2 4\n",
"2 1\n",
"3 4\n",
"5 6\n",
"3 4\n",
"5 6\n",
"2 1\n",
"3 4\n",
"5 6\n",
"3 4\n",
"6 7\n",
"2 4\n",
"3 2\n",
"6 7\n",
"1 0\n",
"5 6\n",
"6 7\n",
"6 7\n",
"2 0\n",
"5 6\n",
"5 6\n",
"5 6\n",
"5 6\n",
"5 6\n",
"5 6\n",
"2 1\n",
"2 1\n",
"6 7\n",
"2 0\n",
"3 4\n",
"6 7\n",
"2 1\n",
"5 6\n",
"2 0\n",
"2 4\n",
"6 7\n",
"5 6\n",
"6 7\n",
"5 6\n",
"2 0\n",
"3 4\n",
"2 0\n",
"2 1\n",
"2 0\n",
"5 7\n",
"3 0\n",
"3 2\n",
"3 4\n",
"6 7\n",
"2 1\n",
"3 4\n",
"6 7\n",
"5 6\n",
"3 4\n",
"5 6\n",
"2 1\n",
"6 7\n",
"2 0\n",
"3 4\n",
"5 6\n",
"6 7\n",
"5 6\n",
"2 4\n",
"5 7\n",
"5 6\n",
"3 4\n",
"5 6\n",
"5 6\n",
"2 1\n",
"1 4\n",
"3 2\n",
"1 0\n",
"5 6\n",
"6 7\n",
"2 4\n",
"6 7\n",
"3 0\n",
"6 7\n",
"2 1\n",
"1 0\n",
"3 2\n",
"2 1\n",
"5 6\n",
"2 0\n",
"2 1\n",
"3 1\n",
"5 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"6 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"3 4\n",
"5 6\n",
"3 2\n",
"5 6\n",
"6 7\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 2\n",
"3 2\n",
"3 4\n",
"6 7\n",
"2 1\n",
"5 6\n",
"3 2\n",
"6 7\n",
"6 7\n",
"1 0\n",
"2 0\n",
"1 0\n",
"6 7\n",
"5 7\n",
"2 0\n",
"1 0\n",
"5 6\n",
"2 1\n",
"3 4\n",
"1 0\n",
"3 4\n",
"1 0\n",
"3 4\n",
"5 7\n",
"2 1\n",
"3 1\n",
"5 7\n",
"6 7\n",
"6 7\n",
"2 1\n",
"3 4\n",
"3 0\n",
"5 6\n",
"1 0\n",
"5 6\n",
"2 1\n",
"2 0\n",
"3 2\n",
"6 7\n",
"3 4\n",
"6 7\n",
"3 2\n",
"5 6\n",
"2 4\n",
"1 0\n",
"2 4\n",
"3 4\n",
"6 7\n",
"2 1\n",
"2 0\n",
"6 7\n",
"5 6\n",
"5 6\n",
"3 2\n",
"2 1\n",
"3 2\n",
"2 4\n",
"5 6\n",
"3 2\n",
"6 7\n",
"3 4\n",
"6 7\n",
"3 4\n",
"3 2\n",
"5 7\n",
"3 4\n",
"3 2\n",
"6 7\n",
"3 4\n",
"5 7\n",
"6 7\n",
"6 7\n",
"2 0\n",
"2 4\n",
"2 4\n",
"3 0\n",
"3 2\n",
"2 4\n",
"2 1\n",
"3 2\n",
"5 6\n",
"2 1\n",
"5 7\n",
"5 6\n",
"3 2\n",
"6 7\n",
"5 6\n",
"1 0\n",
"3 0\n",
"3 1\n",
"2 4\n",
"3 2\n",
"6 7\n",
"2 1\n",
"2 1\n",
"6 7\n",
"1 0\n",
"3 2\n",
"3 4\n",
"2 1\n",
"6 7\n",
"2 0\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 2\n",
"3 1\n",
"6 7\n",
"5 6\n",
"2 0\n",
"6 7\n",
"6 7\n",
"3 4\n",
"1 0\n",
"5 6\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"2 4\n",
"2 1\n",
"5 6\n",
"3 2\n",
"6 7\n",
"5 6\n",
"2 0\n",
"3 2\n",
"6 7\n",
"3 4\n",
"2 1\n",
"3 2\n",
"3 2\n",
"2 0\n",
"6 7\n",
"6 7\n",
"5 6\n",
"3 4\n",
"6 7\n",
"2 1\n",
"3 2\n",
"3 2\n",
"2 1\n",
"3 2\n",
"3 1\n",
"5 6\n",
"1 0\n",
"3 4\n",
"5 6\n",
"2 0\n",
"2 1\n",
"5 6\n",
"1 0\n",
"3 4\n",
"5 6\n",
"2 1\n",
"5 6\n",
"2 0\n",
"3 1\n",
"2 1\n",
"3 4\n",
"2 4\n",
"3 2\n",
"5 6\n",
"3 2\n",
"5 6\n",
"3 2\n",
"6 7\n",
"6 7\n",
"6 7\n",
"2 1\n",
"6 7\n",
"5 6\n",
"2 1\n",
"3 4\n",
"2 4\n",
"2 1\n",
"5 6\n",
"5 6\n",
"3 2\n",
"5 6\n",
"2 4\n",
"5 6\n",
"3 2\n",
"1 0\n",
"6 7\n",
"2 1\n",
"6 7\n",
"2 1\n",
"1 0\n",
"5 6\n",
"5 6\n",
"1 4\n",
"2 1\n",
"3 2\n",
"2 1\n",
"3 4\n",
"2 0\n",
"1 0\n",
"5 6\n",
"3 2\n",
"3 6\n",
"3 4\n",
"3 2\n",
"2 1\n",
"3 4\n",
"6 7\n",
"3 4\n",
"2 4\n",
"6 7\n",
"6 7\n",
"1 0\n",
"2 0\n",
"3 2\n",
"3 2\n",
"1 0\n",
"3 4\n",
"3 4\n",
"1 0\n",
"1 0\n",
"5 6\n",
"5 7\n",
"2 1\n",
"5 6\n",
"3 4\n",
"5 6\n",
"5 6\n",
"3 4\n",
"6 7\n",
"6 7\n",
"2 4\n",
"3 6\n",
"2 0\n",
"2 1\n",
"3 4\n",
"2 0\n",
"3 4\n",
"5 6\n",
"6 7\n",
"5 6\n",
"2 1\n",
"5 6\n",
"2 4\n",
"5 6\n",
"3 2\n",
"3 4\n",
"6 7\n",
"6 7\n",
"3 2\n",
"2 1\n",
"3 4\n",
"6 7\n",
"2 4\n",
"6 7\n",
"5 6\n",
"5 6\n",
"1 0\n",
"1 0\n",
"5 6\n",
"5 7\n",
"3 2\n",
"3 4\n",
"3 4\n",
"6 7\n",
"3 1\n",
"5 6\n",
"6 7\n",
"1 0\n",
"5 6\n",
"3 2\n",
"2 1\n",
"2 0\n",
"5 6\n",
"1 0\n",
"3 4\n",
"2 1\n",
"3 1\n",
"3 2\n",
"5 6\n",
"2 0\n",
"3 4\n",
"6 7\n",
"5 6\n",
"5 6\n",
"3 0\n",
"2 0\n",
"6 7\n",
"6 7\n",
"3 2\n",
"5 6\n",
"1 0\n",
"6 7\n",
"3 1\n",
"3 2\n",
"1 2\n",
"3 2\n",
"6 7\n",
"3 4\n",
"5 7\n",
"5 6\n",
"2 1\n",
"3 4\n",
"5 6\n",
"3 2\n",
"2 1\n",
"2 1\n",
"6 7\n",
"1 0\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 4\n",
"6 7\n",
"2 1\n",
"6 7\n",
"6 7\n",
"5 6\n",
"5 6\n",
"6 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"5 6\n",
"5 6\n",
"3 2\n",
"6 7\n",
"5 6\n",
"3 2\n",
"1 0\n",
"2 1\n",
"3 4\n",
"6 7\n",
"3 2\n",
"3 4\n",
"2 4\n",
"1 0\n",
"2 1\n",
"5 6\n",
"5 6\n",
"3 2\n",
"6 7\n",
"3 2\n",
"2 1\n",
"1 0\n",
"6 7\n",
"1 0\n",
"6 7\n",
"6 7\n",
"1 0\n",
"2 4\n",
"6 7\n",
"3 4\n",
"1 0\n",
"3 2\n",
"5 6\n",
"2 0\n",
"1 4\n",
"6 7\n",
"5 6\n",
"2 1\n",
"2 4\n",
"6 7\n",
"5 7\n",
"1 2\n",
"6 7\n",
"3 2\n",
"6 7\n",
"5 7\n",
"2 4\n",
"5 6\n",
"6 7\n",
"5 7\n",
"3 4\n",
"1 2\n",
"2 0\n",
"5 6\n",
"3 2\n",
"3 2\n",
"2 4\n",
"2 1\n",
"2 4\n",
"1 0\n",
"2 4\n",
"5 7\n",
"2 0\n",
"5 6\n",
"1 0\n",
"3 2\n",
"6 7\n",
"3 2\n",
"2 0\n",
"2 1\n",
"3 2\n",
"3 2\n",
"3 2\n",
"2 0\n",
"6 7\n",
"2 1\n",
"3 2\n",
"5 6\n",
"3 2\n",
"1 0\n",
"3 2\n",
"6 7\n",
"6 7\n",
"5 6\n",
"5 6\n",
"1 0\n",
"3 2\n",
"6 7\n",
"2 1\n",
"2 1\n",
"5 6\n",
"3 4\n",
"5 6\n",
"3 4\n",
"3 4\n",
"5 6\n",
"1 0\n",
"1 0\n",
"3 2\n",
"1 0\n",
"5 6\n",
"2 1\n",
"3 2\n",
"1 0\n",
"2 4\n",
"3 4\n",
"5 6\n",
"2 0\n",
"3 2\n",
"5 7\n",
"6 7\n",
"3 2\n",
"6 7\n",
"2 1\n",
"3 4\n",
"5 6\n",
"3 4\n",
"5 6\n",
"3 2\n",
"5 6\n",
"1 0\n",
"3 1\n",
"6 7\n",
"5 6\n",
"6 7\n",
"5 6\n",
"1 0\n",
"5 6\n",
"2 0\n",
"1 0\n",
"5 6\n",
"5 7\n",
"1 0\n",
"6 7\n",
"5 6\n",
"3 2\n",
"6 7\n",
"3 1\n",
"2 1\n",
"1 0\n",
"5 6\n",
"3 2\n",
"6 7\n",
"1 0\n",
"3 2\n",
"5 7\n",
"2 1\n",
"5 6\n",
"3 4\n",
"6 7\n",
"2 4\n",
"5 7\n",
"5 6\n",
"5 6\n",
"6 7\n",
"6 7\n",
"5 6\n",
"5 6\n",
"6 7\n",
"2 4\n",
"6 7\n",
"5 6\n",
"3 4\n",
"3 2\n",
"5 7\n",
"1 0\n",
"2 0\n",
"3 1\n",
"3 4\n",
"6 7\n",
"2 0\n",
"5 6\n",
"3 4\n",
"3 4\n",
"5 6\n",
"6 7\n",
"3 4\n",
"3 1\n",
"2 4\n",
"1 0\n",
"2 1\n",
"3 4\n",
"5 6\n",
"1 0\n",
"3 2\n",
"5 7\n",
"5 6\n",
"6 7\n",
"3 2\n",
"5 6\n",
"5 7\n",
"2 1\n",
"1 0\n",
"3 0\n",
"2 0\n",
"5 6\n",
"1 0\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 4\n",
"3 1\n",
"6 7\n",
"5 6\n",
"2 1\n",
"6 7\n",
"5 6\n",
"5 6\n",
"2 0\n",
"1 0\n",
"2 4\n",
"3 2\n",
"6 7\n",
"1 4\n",
"1 0\n",
"5 6\n",
"2 1\n",
"2 4\n",
"3 2\n",
"3 2\n",
"5 6\n",
"3 1\n",
"2 4\n",
"3 2\n",
"1 0\n",
"1 0\n",
"6 7\n",
"4 6\n",
"3 4\n",
"6 7\n",
"1 2\n",
"5 6\n",
"5 7\n",
"3 2\n",
"5 6\n",
"2 0\n",
"2 1\n",
"2 1\n",
"3 2\n",
"3 2\n",
"6 7\n",
"1 0\n",
"1 0\n",
"5 6\n",
"6 7\n",
"2 0\n",
"1 0\n",
"5 6\n",
"1 0\n",
"5 6\n",
"6 7\n",
"5 6\n",
"5 6\n",
"5 6\n",
"3 2\n",
"5 6\n",
"3 4\n",
"6 7\n",
"5 7\n",
"5 6\n",
"5 7\n",
"5 6\n",
"2 4\n",
"3 2\n",
"2 1\n",
"5 6\n",
"5 6\n",
"2 1\n",
"6 7\n",
"3 4\n",
"2 0\n",
"6 7\n",
"5 6\n",
"6 7\n",
"3 4\n",
"5 6\n",
"3 2\n",
"5 6\n",
"2 1\n",
"2 1\n",
"6 7\n",
"2 0\n",
"1 0\n",
"6 7\n",
"1 2\n",
"3 2\n",
"6 7\n",
"2 4\n",
"1 0\n",
"6 7\n",
"2 1\n",
"3 4\n",
"1 0\n",
"5 6\n",
"3 1\n",
"5 6\n",
"6 7\n",
"3 4\n",
"2 1\n",
"5 7\n",
"2 0\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 2\n",
"2 1\n",
"3 4\n",
"6 7\n",
"5 6\n",
"5 6\n",
"2 0\n",
"2 1\n",
"5 6\n",
"3 4\n",
"1 0\n",
"5 6\n",
"2 1\n",
"6 7\n",
"2 0\n",
"2 1\n",
"2 1\n",
"6 7\n",
"3 2\n",
"2 1\n",
"2 1\n",
"5 7\n",
"1 0\n",
"3 4\n",
"2 1\n",
"5 6\n",
"6 7\n",
"2 0\n",
"3 4\n",
"2 0\n",
"5 6\n",
"6 7\n",
"2 1\n",
"2 1\n",
"5 6\n",
"1 0\n",
"3 4\n",
"1 0\n",
"5 7\n",
"2 1\n",
"5 6\n",
"1 0\n",
"2 1\n",
"1 2\n",
"6 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"3 4\n",
"5 6\n",
"3 4\n",
"5 6\n",
"1 0\n",
"6 7\n",
"2 1\n",
"6 7\n",
"5 6\n",
"1 0\n",
"5 6\n",
"5 6\n",
"3 2\n",
"2 1\n",
"2 0\n",
"1 0\n",
"6 7\n",
"1 0\n",
"1 0\n",
"5 6\n",
"3 0\n",
"6 7\n",
"2 1\n",
"6 7\n",
"3 4\n",
"3 4\n",
"6 7\n",
"2 4\n",
"6 7\n",
"5 7\n",
"2 4\n",
"3 4\n",
"5 6\n",
"6 7\n",
"5 6\n",
"2 1\n",
"5 6\n",
"3 4\n",
"2 1\n",
"3 4\n",
"2 1\n",
"5 6\n",
"1 0\n",
"6 7\n",
"6 7\n",
"6 7\n",
"2 0\n",
"3 2\n",
"3 0\n",
"3 4\n",
"5 7\n",
"1 0\n",
"3 2\n",
"5 6\n",
"5 6\n",
"5 7\n",
"1 2\n",
"3 4\n",
"6 7\n",
"5 6\n",
"3 4\n",
"2 1\n",
"3 4\n",
"2 1\n",
"2 1\n",
"5 6\n",
"2 1\n",
"1 0\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 2\n",
"3 4\n",
"3 2\n",
"3 1\n",
"6 7\n",
"6 7\n",
"3 4\n",
"6 7\n",
"5 6\n",
"3 4\n",
"2 1\n",
"2 1\n",
"3 2\n",
"3 2\n",
"2 0\n",
"6 7\n",
"5 7\n",
"2 0\n",
"5 6\n",
"6 7\n",
"6 7\n",
"3 2\n",
"3 4\n",
"2 1\n",
"3 2\n",
"2 1\n",
"3 2\n",
"3 4\n",
"5 6\n",
"3 2\n",
"3 4\n",
"6 7\n",
"3 2\n",
"2 1\n",
"6 7\n",
"6 7\n",
"2 1\n",
"3 4\n",
"3 2\n",
"3 2\n",
"2 1\n",
"2 0\n",
"5 7\n",
"2 1\n",
"5 6\n",
"1 4\n",
"2 0\n",
"3 4\n",
"2 1\n",
"3 2\n",
"2 1\n",
"2 1\n",
"3 2\n",
"2 1\n",
"1 0\n",
"3 2\n",
"2 1\n",
"6 7\n",
"6 7\n",
"2 0\n",
"6 7\n",
"5 6\n",
"3 4\n",
"6 7\n",
"3 2\n",
"1 0\n",
"5 6\n",
"3 4\n",
"1 0\n",
"3 4\n",
"6 7\n",
"6 7\n",
"2 1\n",
"2 1\n",
"5 6\n",
"6 7\n",
"5 6\n",
"5 6\n",
"5 6\n",
"1 0\n",
"5 6\n",
"5 6\n",
"2 0\n",
"3 2\n",
"5 6\n",
"3 2\n",
"5 6\n",
"6 7\n",
"5 6\n",
"2 1\n",
"3 2\n",
"2 1\n",
"1 0\n",
"5 6\n",
"5 6\n",
"3 2\n",
"5 6\n",
"2 0\n",
"2 0\n",
"2 1\n",
"5 6\n",
"2 1\n",
"2 0\n",
"5 6\n",
"3 2\n",
"3 0\n",
"3 2\n",
"1 0\n",
"2 1\n",
"5 6\n",
"6 7\n",
"6 7\n",
"2 1\n",
"3 2\n",
"2 0\n",
"5 6\n",
"6 7\n",
"5 6\n",
"5 6\n",
"3 4\n",
"5 6\n",
"6 7\n",
"3 2\n",
"3 4\n",
"3 4\n",
"6 7\n",
"2 1\n",
"5 6\n",
"1 0\n",
"3 2\n",
"5 6\n",
"3 4\n",
"1 0\n",
"5 6\n",
"2 0\n",
"3 2\n",
"1 2\n",
"6 7\n",
"5 4\n",
"2 1\n",
"5 4\n",
"2 1\n",
"6 7\n",
"5 7\n",
"2 0\n",
"3 2\n",
"5 6\n",
"2 4\n",
"3 2\n",
"3 4\n",
"1 0\n",
"3 2\n",
"6 7\n",
"2 1\n",
"3 1\n",
"2 0\n",
"5 7\n",
"5 6\n",
"5 4\n",
"6 7\n",
"6 7\n",
"5 6\n",
"1 0\n",
"6 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"5 6\n",
"3 2\n",
"2 0\n",
"2 1\n",
"2 4\n",
"6 7\n",
"3 2\n",
"5 6\n",
"1 0\n",
"5 6\n",
"3 4\n",
"6 7\n",
"5 6\n",
"5 6\n",
"2 1\n",
"1 0\n",
"5 6\n",
"3 4\n",
"3 4\n",
"5 6\n",
"5 6\n",
"1 0\n",
"2 1\n",
"6 7\n",
"3 2\n",
"2 0\n",
"2 1\n",
"3 2\n",
"3 4\n",
"5 6\n",
"6 7\n",
"6 7\n",
"3 4\n",
"1 0\n",
"5 7\n",
"5 6\n",
"1 0\n",
"2 1\n",
"2 0\n",
"5 4\n",
"3 2\n",
"3 4\n",
"6 7\n",
"3 0\n",
"3 2\n",
"5 6\n",
"3 4\n",
"5 4\n",
"5 6\n",
"3 4\n",
"2 1\n",
"2 0\n",
"2 1\n",
"2 1\n",
"2 0\n",
"6 7\n",
"6 7\n",
"3 2\n",
"5 6\n",
"5 6\n",
"3 2\n",
"6 7\n",
"2 4\n",
"1 0\n",
"6 7\n",
"2 1\n",
"6 7\n",
"3 2\n",
"2 0\n",
"3 2\n",
"2 0\n",
"2 4\n",
"5 7\n",
"2 1\n",
"3 2\n",
"3 4\n",
"3 4\n",
"5 6\n",
"3 2\n",
"2 1\n",
"2 1\n",
"2 1\n",
"3 4\n",
"6 7\n",
"2 1\n",
"3 4\n",
"6 7\n",
"3 4\n",
"5 6\n",
"5 7\n",
"3 4\n",
"5 7\n",
"5 6\n",
"1 0\n",
"3 4\n",
"5 6\n",
"3 4\n",
"5 6\n",
"3 1\n",
"3 2\n",
"3 4\n",
"3 2\n",
"5 6\n",
"6 7\n",
"3 2\n",
"3 2\n",
"2 1\n",
"3 2\n",
"2 1\n",
"2 1\n",
"5 6\n",
"6 7\n",
"2 0\n",
"3 4\n",
"5 6\n",
"3 2\n",
"6 7\n",
"1 0\n",
"6 7\n",
"5 6\n",
"5 6\n",
"1 0\n",
"3 4\n",
"2 1\n",
"3 4\n",
"3 2\n",
"3 2\n",
"1 0\n",
"5 6\n",
"3 2\n",
"2 1\n",
"2 1\n",
"2 4\n",
"1 0\n",
"5 6\n",
"2 4\n",
"2 1\n",
"5 6\n",
"3 2\n",
"6 7\n",
"3 4\n",
"6 7\n",
"2 0\n",
"5 6\n",
"3 2\n",
"3 2\n",
"3 4\n",
"6 7\n",
"2 1\n",
"3 4\n",
"6 7\n",
"2 1\n",
"5 6\n",
"1 0\n",
"2 1\n",
"5 6\n",
"3 1\n",
"5 6\n",
"3 2\n",
"3 2\n",
"5 6\n",
"3 0\n",
"3 2\n",
"2 1\n",
"6 7\n",
"3 4\n",
"3 2\n",
"3 4\n",
"3 1\n",
"3 4\n",
"5 6\n",
"3 2\n",
"3 2\n",
"2 0\n",
"2 4\n",
"3 2\n",
"5 6\n",
"2 1\n",
"1 0\n",
"2 0\n",
"6 7\n",
"3 2\n",
"3 4\n",
"6 7\n",
"3 1\n",
"3 2\n",
"5 7\n",
"3 4\n",
"2 0\n",
"3 2\n",
"3 2\n",
"6 7\n",
"2 1\n",
"2 6\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"3 2\n",
"3 2\n",
"6 7\n",
"2 1\n",
"6 7\n",
"2 1\n",
"2 4\n",
"6 7\n",
"6 7\n",
"5 6\n",
"3 2\n",
"3 4\n",
"1 0\n",
"2 1\n",
"5 6\n",
"6 7\n",
"6 7\n",
"3 2\n",
"3 2\n",
"2 0\n",
"5 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"1 4\n",
"1 0\n",
"3 4\n",
"6 7\n",
"5 6\n",
"5 6\n",
"2 1\n",
"2 1\n",
"5 6\n",
"2 0\n",
"5 6\n",
"2 6\n",
"6 7\n",
"2 0\n",
"2 1\n",
"5 7\n",
"6 7\n",
"6 7\n",
"1 0\n",
"5 6\n",
"2 4\n",
"6 7\n",
"2 0\n",
"2 0\n",
"2 1\n",
"2 1\n",
"2 1\n",
"2 0\n",
"5 6\n",
"6 7\n",
"6 7\n",
"2 0\n",
"1 0\n",
"1 0\n",
"6 7\n",
"3 2\n",
"2 1\n",
"2 1\n",
"2 4\n",
"3 4\n",
"3 2\n",
"2 1\n",
"1 0\n",
"3 4\n",
"5 6\n",
"3 4\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 1\n",
"2 0\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 2\n",
"2 1\n",
"2 0\n",
"3 4\n",
"1 0\n",
"3 1\n",
"3 4\n",
"2 1\n",
"1 0\n",
"2 0\n",
"1 0\n",
"1 0\n",
"3 4\n",
"5 6\n",
"5 6\n",
"1 0\n",
"5 6\n",
"5 6\n",
"2 4\n",
"5 6\n",
"3 2\n",
"2 4\n",
"5 6\n",
"3 2\n",
"6 7\n",
"5 6\n",
"2 0\n",
"3 2\n",
"2 1\n",
"3 4\n",
"5 6\n",
"5 7\n",
"2 0\n",
"3 2\n",
"1 0\n",
"1 0\n",
"6 7\n",
"5 6\n",
"3 4\n",
"1 0\n",
"5 6\n",
"3 4\n",
"2 4\n",
"1 0\n",
"6 7\n",
"3 2\n",
"3 2\n",
"5 6\n",
"5 6\n",
"3 2\n",
"5 6\n",
"6 7\n",
"3 4\n",
"5 6\n",
"1 0\n",
"3 2\n",
"3 2\n",
"3 4\n",
"5 6\n",
"3 2\n",
"5 6\n",
"3 2\n",
"2 1\n",
"5 6\n",
"6 7\n",
"6 7\n",
"6 7\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 4\n",
"3 0\n",
"2 0\n",
"5 6\n",
"2 0\n",
"2 1\n",
"6 7\n",
"6 7\n",
"3 2\n",
"6 7\n",
"5 6\n",
"6 7\n",
"5 6\n",
"2 0\n",
"3 2\n",
"5 6\n",
"6 7\n",
"6 7\n",
"6 7\n",
"5 6\n",
"6 7\n",
"3 4\n",
"2 4\n",
"6 7\n",
"6 7\n",
"3 4\n",
"5 6\n",
"2 1\n",
"3 4\n",
"3 4\n",
"6 7\n",
"3 2\n",
"5 6\n",
"2 1\n",
"5 6\n",
"3 2\n",
"2 1\n",
"3 2\n",
"1 0\n",
"1 0\n",
"6 7\n",
"3 4\n",
"5 6\n",
"6 7\n",
"3 4\n",
"3 6\n",
"6 7\n",
"2 1\n",
"5 6\n",
"2 1\n",
"2 1\n",
"3 4\n",
"3 2\n",
"2 1\n",
"3 4\n",
"2 0\n",
"6 7\n",
"2 0\n",
"3 2\n",
"5 6\n",
"3 2\n",
"3 2\n",
"6 7\n",
"3 4\n",
"1 0\n",
"3 2\n",
"5 6\n",
"2 0\n",
"6 7\n",
"5 6\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 4\n",
"5 6\n",
"6 7\n",
"5 4\n",
"5 6\n",
"5 6\n",
"2 1\n",
"3 4\n",
"5 7\n",
"3 4\n",
"3 2\n",
"1 0\n",
"2 1\n",
"6 7\n",
"2 1\n",
"2 0\n",
"5 6\n",
"2 1\n",
"1 0\n",
"2 0\n",
"5 6\n",
"2 4\n",
"1 0\n",
"3 0\n",
"3 4\n",
"3 4\n",
"6 7\n",
"2 1\n",
"2 1\n",
"5 6\n",
"2 1\n",
"2 4\n",
"6 7\n",
"2 4\n",
"5 7\n",
"1 0\n",
"5 6\n",
"1 0\n",
"5 6\n",
"2 0\n",
"6 7\n",
"6 7\n",
"2 1\n",
"3 4\n",
"3 4\n",
"2 1\n",
"5 6\n",
"5 4\n",
"2 1\n",
"2 1\n",
"5 6\n",
"2 1\n",
"2 1\n",
"3 2\n",
"6 7\n",
"3 2\n",
"2 4\n",
"6 7\n",
"3 2\n",
"6 7\n",
"3 2\n",
"5 6\n",
"5 6\n",
"5 6\n",
"1 0\n",
"6 7\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 2\n",
"5 7\n",
"2 1\n",
"5 7\n",
"2 1\n",
"3 4\n",
"3 2\n",
"3 2\n",
"3 2\n",
"2 0\n",
"1 0\n",
"5 6\n",
"3 4\n",
"5 6\n",
"2 0\n",
"3 4\n",
"6 7\n",
"6 7\n",
"3 4\n",
"5 6\n",
"3 2\n",
"5 7\n",
"3 2\n",
"2 4\n",
"6 7\n",
"6 7\n",
"5 6\n",
"3 2\n",
"3 1\n",
"2 1\n",
"6 7\n",
"5 6\n",
"6 7\n",
"5 6\n",
"5 7\n",
"6 7\n",
"5 7\n",
"5 6\n",
"5 6\n",
"2 1\n",
"3 4\n",
"2 1\n",
"6 7\n",
"3 2\n",
"2 1\n",
"1 2\n",
"3 2\n",
"6 7\n",
"2 1\n",
"3 2\n",
"5 6\n",
"3 4\n",
"5 6\n",
"5 6\n",
"3 2\n",
"6 7\n",
"5 7\n",
"3 2\n",
"3 4\n",
"2 0\n",
"6 7\n",
"2 1\n",
"5 6\n",
"6 7\n",
"5 6\n",
"2 0\n",
"3 2\n",
"5 6\n",
"6 7\n",
"3 2\n",
"3 0\n",
"6 7\n",
"5 6\n",
"2 0\n",
"3 4\n",
"2 1\n",
"6 7\n",
"3 4\n",
"6 7\n",
"5 6\n",
"3 4\n",
"5 6\n",
"1 0\n",
"2 1\n",
"6 7\n",
"6 7\n",
"6 7\n",
"6 7\n",
"6 7\n",
"6 7\n",
"6 7\n",
"2 1\n",
"3 4\n",
"6 7\n",
"5 7\n",
"2 1\n",
"5 6\n",
"1 0\n",
"2 1\n",
"5 6\n",
"5 6\n",
"3 4\n",
"5 6\n",
"3 2\n",
"5 7\n",
"2 0\n",
"3 2\n",
"3 2\n",
"2 1\n",
"3 2\n",
"3 2\n",
"5 6\n",
"2 0\n",
"3 2\n",
"2 1\n",
"6 7\n",
"2 1\n",
"2 4\n",
"2 0\n",
"2 1\n",
"3 4\n",
"5 6\n",
"1 0\n",
"6 7\n",
"3 2\n",
"6 7\n",
"1 0\n",
"2 1\n",
"3 4\n",
"1 0\n",
"5 6\n",
"3 2\n",
"5 6\n",
"3 2\n",
"5 6\n",
"2 0\n",
"6 7\n",
"3 4\n",
"6 7\n",
"2 4\n",
"1 0\n",
"6 7\n",
"2 0\n",
"2 1\n",
"2 1\n",
"5 6\n",
"3 4\n",
"3 1\n",
"5 6\n",
"5 6\n",
"6 7\n",
"2 4\n",
"5 6\n",
"5 6\n",
"5 6\n",
"3 1\n",
"5 6\n",
"3 4\n",
"3 2\n",
"3 4\n",
"5 6\n",
"3 2\n",
"6 7\n",
"5 6\n",
"5 6\n",
"3 2\n",
"6 7\n",
"6 7\n",
"6 7\n",
"3 2\n",
"5 6\n",
"3 4\n",
"3 4\n",
"3 2\n",
"6 7\n",
"6 7\n",
"1 0\n",
"2 0\n",
"2 0\n",
"5 6\n",
"2 1\n",
"5 6\n",
"5 6\n",
"1 0\n",
"6 7\n",
"5 6\n",
"1 0\n",
"5 6\n",
"5 7\n",
"3 2\n",
"1 0\n",
"1 0\n",
"3 2\n",
"1 0\n",
"3 2\n",
"2 1\n",
"5 6\n",
"3 1\n",
"2 1\n",
"2 4\n",
"6 7\n",
"5 7\n",
"6 7\n",
"3 2\n",
"2 1\n",
"5 6\n",
"6 7\n",
"2 1\n",
"3 4\n",
"5 6\n",
"3 4\n",
"1 0\n",
"6 7\n",
"1 0\n",
"1 0\n",
"1 0\n",
"2 1\n",
"1 0\n",
"2 4\n",
"6 7\n",
"6 7\n",
"6 7\n",
"5 6\n",
"6 7\n",
"5 6\n",
"6 7\n",
"5 6\n",
"3 4\n",
"1 0\n",
"2 1\n",
"9472 0 6170\n"
]
}
],
"source": [
"from sklearn.metrics import accuracy_score\n",
"pred = model.predict(test_features_np)\n",
"print(pred[0:10])\n",
"preds = []\n",
"for i,score in enumerate(pred):\n",
" preds.append(np.argmax(score) +1) \n",
" \n",
"\n",
"print(preds[1010:1020])\n",
"print(test_labels[1010:1020])\n",
"score = accuracy_score(preds,test_labels)\n",
"print(\"accuracy:\",score)\n",
"\n",
"test_labels_np = np.ndarray(test_labels.shape,dtype= np.int32)\n",
"test_labels_np = test_labels.values\n",
"all_counter = 0\n",
"counter = 0\n",
"for i in range(0 ,len(preds) ):\n",
" if (preds[i] == 0 or (preds[i] == 0 and test_labels_np[i] ==0 )or test_labels_np[i] ==0 ) :\n",
" all_counter = all_counter + 1\n",
" if preds[i] != test_labels_np[i] :\n",
" counter = counter+1\n",
" print(preds[i] , test_labels_np[i])\n",
"print(len(preds),all_counter, counter) \n",
"all_counter = 0\n",
"counter = 0\n",
"for i in range(0 ,len(preds) ):\n",
" if preds[i] != test_labels_np[i] :\n",
" counter = counter+1\n",
" print(preds[i] , test_labels_np[i])\n",
"print(len(preds),all_counter, counter) "
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"epoch: 0 , acc: 0.325468\n",
"epoch: 1 , acc: 0.450964\n",
"epoch: 2 , acc: 0.469173\n",
"epoch: 3 , acc: 0.480048\n",
"epoch: 4 , acc: 0.532453\n",
"epoch: 5 , acc: 0.548405\n",
"epoch: 6 , acc: 0.545706\n",
"epoch: 7 , acc: 0.548792\n",
"epoch: 8 , acc: 0.549921\n",
"epoch: 9 , acc: 0.540529\n",
"epoch: 10 , acc: 0.553439\n",
"epoch: 11 , acc: 0.5217\n",
"epoch: 12 , acc: 0.553162\n",
"epoch: 13 , acc: 0.557787\n",
"epoch: 14 , acc: 0.566548\n",
"epoch: 15 , acc: 0.554213\n",
"epoch: 16 , acc: 0.569513\n",
"epoch: 17 , acc: 0.565475\n",
"epoch: 18 , acc: 0.558893\n",
"epoch: 19 , acc: 0.567721\n",
"epoch: 20 , acc: 0.559546\n",
"epoch: 21 , acc: 0.551591\n",
"epoch: 22 , acc: 0.566681\n",
"epoch: 23 , acc: 0.569148\n",
"epoch: 24 , acc: 0.560431\n",
"epoch: 25 , acc: 0.56417\n",
"epoch: 26 , acc: 0.563451\n",
"epoch: 27 , acc: 0.575089\n",
"epoch: 28 , acc: 0.575553\n",
"epoch: 29 , acc: 0.572998\n",
"epoch: 30 , acc: 0.572102\n",
"epoch: 31 , acc: 0.565088\n",
"epoch: 32 , acc: 0.56573\n",
"epoch: 33 , acc: 0.531446\n",
"epoch: 34 , acc: 0.566471\n",
"epoch: 35 , acc: 0.569104\n",
"epoch: 36 , acc: 0.561581\n",
"epoch: 37 , acc: 0.575266\n",
"epoch: 38 , acc: 0.576394\n",
"epoch: 39 , acc: 0.57885\n",
"epoch: 40 , acc: 0.572223\n",
"epoch: 41 , acc: 0.57219\n",
"epoch: 42 , acc: 0.563351\n",
"epoch: 43 , acc: 0.576372\n",
"epoch: 44 , acc: 0.560143\n",
"epoch: 45 , acc: 0.574469\n",
"epoch: 46 , acc: 0.565829\n",
"epoch: 47 , acc: 0.577954\n",
"epoch: 48 , acc: 0.545286\n",
"epoch: 49 , acc: 0.57042\n"
]
}
],
"source": [
"import tensorflow as tf\n",
"\n",
"tf.reset_default_graph()\n",
"with tf.name_scope(\"input\"):\n",
" x = tf.placeholder(tf.float32, [None, 81])\n",
" y = tf.placeholder(tf.float32,[None,8])\n",
" \n",
"with tf.name_scope(\"weigh_init\"):\n",
" W1 = tf.get_variable(name=\"w_1\" ,shape=[81,64],dtype=tf.float32,initializer=tf.contrib.layers.xavier_initializer())\n",
" b1 = tf.Variable(tf.zeros(64))\n",
" W2 = tf.get_variable(name=\"w_2\" ,shape=[64,64],dtype=tf.float32,initializer=tf.contrib.layers.xavier_initializer())\n",
" tf.add_to_collection(\"W2_l1\",tf.contrib.layers.l1_regularizer(0.00005)(W2))\n",
" b2 = tf.Variable(tf.zeros(64))\n",
" tf.add_to_collection(\"b2_l1\",tf.contrib.layers.l1_regularizer(0.00005)(b2))\n",
" W3 = tf.get_variable(name=\"w_3\" ,shape=[64,8],dtype=tf.float32,initializer=tf.contrib.layers.xavier_initializer())\n",
" b3 = tf.Variable(tf.zeros(8))\n",
" tf.summary.histogram(\"W1\",W1)\n",
" tf.summary.histogram(\"W2\",W2)\n",
" tf.summary.histogram(\"W3\",W3)\n",
" tf.summary.histogram(\"b1\",b1)\n",
" tf.summary.histogram(\"b2\",b2)\n",
" tf.summary.histogram(\"b3\",b3)\n",
" \n",
" \n",
"with tf.name_scope(\"input_layer\"):\n",
" output1 = tf.nn.sigmoid(tf.add(tf.matmul(x,W1) , b1))\n",
" tf.summary.histogram(\"layer1_output\",output1)\n",
" \n",
"with tf.name_scope(\"high_layer\"): \n",
" output2 = tf.nn.sigmoid(tf.add(tf.matmul(output1,W2) , b2))\n",
" tf.summary.histogram(\"layer2_output\",output2)\n",
" \n",
"with tf.name_scope(\"output_layer\"): \n",
" y_pred = tf.nn.softmax(tf.add(tf.matmul(output2,W3) , b3))\n",
" tf.summary.histogram(\"layer3_output\",y_pred)\n",
" \n",
"with tf.name_scope(\"cost\"):\n",
" cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits = y_pred, labels = y)\n",
" cost = tf.reduce_mean(cross_entropy)\n",
" tf.summary.scalar(\"cost\",cost)\n",
" \n",
"with tf.name_scope(\"opt\"):\n",
" train_step = tf.train.AdamOptimizer().minimize(cost)\n",
" \n",
"with tf.name_scope(\"acc\"):\n",
" correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_pred,1))\n",
" accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n",
" tf.summary.scalar(\"accuracy\",accuracy)\n",
" \n",
"init = tf.global_variables_initializer()\n",
"saver = tf.train.Saver()\n",
"batch_size = 512\n",
"merge_all = tf.summary.merge_all()\n",
"with tf.Session() as sess:\n",
" summary_writer = tf.summary.FileWriter(\"./logs\",sess.graph)\n",
" sess.run(init)\n",
" for i in range(0 ,50):\n",
" for start in range(0,len(train_features_np),batch_size):\n",
" end = min(start + batch_size ,len(train_features_np))\n",
" _ , merge_op = sess.run([train_step,merge_all], feed_dict={x: train_features_np[start:end], y: train_labels_np[start:end]})\n",
" print(\"epoch: \",i ,\", acc: \" ,sess.run(accuracy, feed_dict={x: train_features_np, y: train_labels_np}))\n",
" summary_writer.add_summary(merge_op,i)\n",
" summary_writer.close()\n",
" saver.save(sess, 'ov-model')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}