Skip to content

Instantly share code, notes, and snippets.

@kkweon
Created August 12, 2017 07:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kkweon/060ca222250f50d87b53521d874aca49 to your computer and use it in GitHub Desktop.
Save kkweon/060ca222250f50d87b53521d874aca49 to your computer and use it in GitHub Desktop.
레진 데이터 챌린지 with 파이콘 한국 2017
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import itertools\n",
"import matplotlib.pyplot as plt\n",
"\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import confusion_matrix\n",
"\n",
"%matplotlib inline\n",
"\n",
"np.random.seed(0)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Download data"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"%%bash\n",
"mkdir -p datasets\n",
"wget https://storage.googleapis.com/lz-insight/pycon17/dataset/lezhin_dataset_training.tar.gz -q -O - | tar -xz -C datasets > /dev/null 2>&1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Read data"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/kkweon/.pyenv/versions/3.6.1/envs/general/lib/python3.6/site-packages/IPython/core/interactiveshell.py:2698: DtypeWarning: Columns (7,8) have mixed types. Specify dtype option on import or set low_memory=False.\n",
" interactivity=interactivity, compiler=compiler, result=result)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>label</th>\n",
" <th>feature1</th>\n",
" <th>feature2</th>\n",
" <th>feature3</th>\n",
" <th>feature4</th>\n",
" <th>feature5</th>\n",
" <th>feature6</th>\n",
" <th>feature7</th>\n",
" <th>feature8</th>\n",
" <th>feature9</th>\n",
" <th>...</th>\n",
" <th>feature167</th>\n",
" <th>feature168</th>\n",
" <th>feature169</th>\n",
" <th>feature170</th>\n",
" <th>feature171</th>\n",
" <th>feature172</th>\n",
" <th>feature173</th>\n",
" <th>feature174</th>\n",
" <th>feature175</th>\n",
" <th>feature176</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.000</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.000</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.000</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.000</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.1681</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.374</td>\n",
" <td>0.1035</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 177 columns</p>\n",
"</div>"
],
"text/plain": [
" label feature1 feature2 feature3 feature4 feature5 feature6 feature7 \\\n",
"0 0 0 0 0 0 0 0 0 \n",
"1 0 0 0 0 0 0 0 0 \n",
"2 0 0 0 0 0 0 0 0 \n",
"3 0 0 0 0 0 0 0 0 \n",
"4 0 0 0 0 0 0 0 0 \n",
"\n",
" feature8 feature9 ... feature167 feature168 feature169 \\\n",
"0 0 0 ... 0.0 0.0 0.0000 \n",
"1 0 0 ... 0.0 0.0 0.0000 \n",
"2 0 0 ... 0.0 0.0 0.0000 \n",
"3 0 0 ... 0.0 0.0 0.0000 \n",
"4 0 0 ... 0.0 0.0 0.1681 \n",
"\n",
" feature170 feature171 feature172 feature173 feature174 feature175 \\\n",
"0 0.0 0.0 0.0 0.000 0.0000 0.0 \n",
"1 0.0 0.0 0.0 0.000 0.0000 0.0 \n",
"2 0.0 0.0 0.0 0.000 0.0000 0.0 \n",
"3 0.0 0.0 0.0 0.000 0.0000 0.0 \n",
"4 0.0 0.0 0.0 0.374 0.1035 0.0 \n",
"\n",
" feature176 \n",
"0 0.0 \n",
"1 0.0 \n",
"2 0.0 \n",
"3 0.0 \n",
"4 0.0 \n",
"\n",
"[5 rows x 177 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_path = \"datasets/lezhin_public_dataset_training.tsv\"\n",
"df = pd.read_csv(data_path, header=None, delimiter='\\t')\n",
"df.columns = ['label'] + [\"feature{}\".format(i + 1) for i in range(df.shape[1] - 1)]\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Clean data"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>label</th>\n",
" <th>feature1</th>\n",
" <th>feature2</th>\n",
" <th>feature3</th>\n",
" <th>feature4</th>\n",
" <th>feature5</th>\n",
" <th>feature6</th>\n",
" <th>feature9</th>\n",
" <th>feature10</th>\n",
" <th>feature11</th>\n",
" <th>...</th>\n",
" <th>feature167</th>\n",
" <th>feature168</th>\n",
" <th>feature169</th>\n",
" <th>feature170</th>\n",
" <th>feature171</th>\n",
" <th>feature172</th>\n",
" <th>feature173</th>\n",
" <th>feature174</th>\n",
" <th>feature175</th>\n",
" <th>feature176</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.000</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.000</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.000</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.000</td>\n",
" <td>0.0000</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>...</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.1681</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" <td>0.374</td>\n",
" <td>0.1035</td>\n",
" <td>0.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 171 columns</p>\n",
"</div>"
],
"text/plain": [
" label feature1 feature2 feature3 feature4 feature5 feature6 \\\n",
"0 0 0 0 0 0 0 0 \n",
"1 0 0 0 0 0 0 0 \n",
"2 0 0 0 0 0 0 0 \n",
"3 0 0 0 0 0 0 0 \n",
"4 0 0 0 0 0 0 0 \n",
"\n",
" feature9 feature10 feature11 ... feature167 feature168 \\\n",
"0 0 0 0 ... 0.0 0.0 \n",
"1 0 0 0 ... 0.0 0.0 \n",
"2 0 0 0 ... 0.0 0.0 \n",
"3 0 0 0 ... 0.0 0.0 \n",
"4 0 0 0 ... 0.0 0.0 \n",
"\n",
" feature169 feature170 feature171 feature172 feature173 feature174 \\\n",
"0 0.0000 0.0 0.0 0.0 0.000 0.0000 \n",
"1 0.0000 0.0 0.0 0.0 0.000 0.0000 \n",
"2 0.0000 0.0 0.0 0.0 0.000 0.0000 \n",
"3 0.0000 0.0 0.0 0.0 0.000 0.0000 \n",
"4 0.1681 0.0 0.0 0.0 0.374 0.1035 \n",
"\n",
" feature175 feature176 \n",
"0 0.0 0.0 \n",
"1 0.0 0.0 \n",
"2 0.0 0.0 \n",
"3 0.0 0.0 \n",
"4 0.0 0.0 \n",
"\n",
"[5 rows x 171 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"hashed_columns = [8, 9, 17, 19]\n",
"hashed_columns = map(lambda x: x - 1, hashed_columns)\n",
"hashed_columns = list(map(lambda x: \"feature{}\".format(x), hashed_columns))\n",
"\n",
"drop_columns = ['feature155', 'feature156'] + hashed_columns\n",
"df_clean = df.drop(drop_columns, axis=1)\n",
"\n",
"for col in drop_columns:\n",
" assert col not in df_clean.columns\n",
"\n",
"df_clean.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Prepare data (train/test split)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(959270, 170)\n",
"(319757, 170)\n",
"(959270,)\n",
"(319757,)\n"
]
}
],
"source": [
"y_whole, X_whole = df_clean['label'], df_clean.iloc[:, 1:]\n",
"X_train, X_test, y_train, y_test = train_test_split(X_whole, y_whole, test_size=0.25, random_state=0)\n",
"\n",
"print(X_train.shape)\n",
"print(X_test.shape)\n",
"\n",
"print(y_train.shape)\n",
"print(y_test.shape)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Classifier\n",
"## BaseModel: RandomForest"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"my_classifiers = []"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
" max_depth=None, max_features='auto', max_leaf_nodes=None,\n",
" min_impurity_decrease=0.0, min_impurity_split=None,\n",
" min_samples_leaf=1, min_samples_split=2,\n",
" min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,\n",
" oob_score=False, random_state=0, verbose=0, warm_start=False)"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.ensemble import RandomForestClassifier\n",
"\n",
"clf = RandomForestClassifier(n_estimators=10, random_state=0)\n",
"clf.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.99999687262514969"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"clf.score(X_test, y_test)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def plot_confusion_matrix(cm, classes,\n",
" normalize=False,\n",
" title='Confusion matrix',\n",
" cmap=plt.cm.Blues):\n",
" \"\"\"\n",
" This function prints and plots the confusion matrix.\n",
" Normalization can be applied by setting `normalize=True`.\n",
" \"\"\"\n",
" if normalize:\n",
" cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n",
" print(\"Normalized confusion matrix\")\n",
" else:\n",
" print('Confusion matrix, without normalization')\n",
"\n",
" print(cm)\n",
"\n",
" plt.imshow(cm, interpolation='nearest', cmap=cmap)\n",
" plt.title(title)\n",
" plt.colorbar()\n",
" tick_marks = np.arange(len(classes))\n",
" plt.xticks(tick_marks, classes, rotation=45)\n",
" plt.yticks(tick_marks, classes)\n",
"\n",
" fmt = '.2f' if normalize else 'd'\n",
" thresh = cm.max() / 2.\n",
" for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n",
" plt.text(j, i, format(cm[i, j], fmt),\n",
" horizontalalignment=\"center\",\n",
" color=\"white\" if cm[i, j] > thresh else \"black\")\n",
"\n",
" plt.tight_layout()\n",
" plt.ylabel('True label')\n",
" plt.xlabel('Predicted label')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Confusion matrix, without normalization\n",
"[[250144 0]\n",
" [ 1 69612]]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f26b43e0be0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"y_pred = clf.predict(X_test)\n",
"\n",
"plot_confusion_matrix(confusion_matrix(y_test, y_pred), [0, 1])"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"my_classifiers.append(clf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Model2: GradientBoost"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.ensemble import GradientBoostingClassifier"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"GradientBoostingClassifier(criterion='friedman_mse', init=None,\n",
" learning_rate=0.1, loss='deviance', max_depth=3,\n",
" max_features=None, max_leaf_nodes=None,\n",
" min_impurity_decrease=0.0, min_impurity_split=None,\n",
" min_samples_leaf=1, min_samples_split=2,\n",
" min_weight_fraction_leaf=0.0, n_estimators=100,\n",
" presort='auto', random_state=0, subsample=1.0, verbose=0,\n",
" warm_start=False)"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"clf = GradientBoostingClassifier(random_state=0)\n",
"clf.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1.0"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"clf.score(X_test, y_test)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Confusion matrix, without normalization\n",
"[[250144 0]\n",
" [ 0 69613]]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f26b51b66a0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"y_pred = clf.predict(X_test)\n",
"plot_confusion_matrix(confusion_matrix(y_test, y_pred), [0, 1])"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"my_classifiers.append(clf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Final"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def my_ensembles(models):\n",
" \n",
" def predict_(X_):\n",
" y_pred = []\n",
" for model in models:\n",
" y_pred.append(model.predict_proba(X_))\n",
" \n",
" return np.argmax(np.sum(y_pred, axis=0), axis=1)\n",
" \n",
" return predict_\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"predict_all = my_ensembles(my_classifiers)\n",
"y_pred = predict_all(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Confusion matrix, without normalization\n",
"[[250144 0]\n",
" [ 0 69613]]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f26b68f7940>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_confusion_matrix(confusion_matrix(y_test, y_pred), [0, 1])"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Confusion matrix, without normalization\n",
"[[1001480 0]\n",
" [ 0 277547]]\n"
]
},
{
"data": {
"image/png": "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\nHMhmZl3E/wfd7ZwdPDfOzgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f26b59029e8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"y_pred_all = predict_all(X_whole)\n",
"plot_confusion_matrix(confusion_matrix(y_whole, y_pred_all), [0, 1])"
]
}
],
"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.1"
},
"toc": {
"colors": {
"hover_highlight": "#DAA520",
"navigate_num": "#000000",
"navigate_text": "#333333",
"running_highlight": "#FF0000",
"selected_highlight": "#FFD700",
"sidebar_border": "#EEEEEE",
"wrapper_background": "#FFFFFF"
},
"moveMenuLeft": true,
"nav_menu": {
"height": "156px",
"width": "252px"
},
"navigate_menu": true,
"number_sections": true,
"sideBar": true,
"threshold": 4,
"toc_cell": false,
"toc_section_display": "block",
"toc_window_display": false,
"widenNotebook": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment