{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "이 노트북의 코드에 대한 설명은 [분류기 체인: ClassifierChain](https://tensorflow.blog/2018/02/16/%EB%B6%84%EB%A5%98%EA%B8%B0-%EC%B2%B4%EC%9D%B8-classifierchain/) 글을 참고하세요." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from sklearn.datasets import fetch_openml" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "fetch yeast dataset (https://www.openml.org/d/40597)\n", "\n", "사이킷런 0.20 버전에서 `fetch_openml`이 추가되었습니다. `fetch_mldata`는 0.22 버전에서 삭제될 예정입니다." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "yeast = fetch_openml('yeast', version=4)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "X = yeast['data']\n", "Y = yeast['target']" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((2417, 103), (2417, 14))" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X.shape, Y.shape" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Class1Class2Class3Class4Class5Class6Class7Class8Class9Class10Class11Class12Class13Class14
0FALSEFALSEFALSEFALSEFALSEFALSETRUETRUEFALSEFALSEFALSETRUETRUEFALSE
1FALSEFALSETRUETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
2FALSETRUETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSETRUETRUEFALSE
3FALSEFALSETRUETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
4FALSEFALSETRUETRUETRUETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
.............................................
2412FALSETRUETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
2413TRUETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSETRUETRUEFALSE
2414FALSEFALSEFALSEFALSEFALSETRUETRUETRUEFALSEFALSEFALSETRUETRUEFALSE
2415FALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSETRUETRUEFALSE
2416FALSETRUETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSETRUETRUEFALSE
\n", "

2417 rows × 14 columns

\n", "
" ], "text/plain": [ " Class1 Class2 Class3 Class4 Class5 Class6 Class7 Class8 Class9 Class10 \\\n", "0 FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE \n", "1 FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE \n", "2 FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE \n", "3 FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE \n", "4 FALSE FALSE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE \n", "... ... ... ... ... ... ... ... ... ... ... \n", "2412 FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE \n", "2413 TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE \n", "2414 FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE \n", "2415 FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE \n", "2416 FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE \n", "\n", " Class11 Class12 Class13 Class14 \n", "0 FALSE TRUE TRUE FALSE \n", "1 FALSE FALSE FALSE FALSE \n", "2 FALSE TRUE TRUE FALSE \n", "3 FALSE FALSE FALSE FALSE \n", "4 FALSE FALSE FALSE FALSE \n", "... ... ... ... ... \n", "2412 FALSE FALSE FALSE FALSE \n", "2413 FALSE TRUE TRUE FALSE \n", "2414 FALSE TRUE TRUE FALSE \n", "2415 FALSE TRUE TRUE FALSE \n", "2416 FALSE TRUE TRUE FALSE \n", "\n", "[2417 rows x 14 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Y" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "Y = Y == 'TRUE'" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Class1Class2Class3Class4Class5Class6Class7Class8Class9Class10Class11Class12Class13Class14
0FalseFalseFalseFalseFalseFalseTrueTrueFalseFalseFalseTrueTrueFalse
1FalseFalseTrueTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
2FalseTrueTrueFalseFalseFalseFalseFalseFalseFalseFalseTrueTrueFalse
3FalseFalseTrueTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
4FalseFalseTrueTrueTrueTrueFalseFalseFalseFalseFalseFalseFalseFalse
.............................................
2412FalseTrueTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
2413TrueTrueFalseFalseFalseFalseFalseFalseFalseFalseFalseTrueTrueFalse
2414FalseFalseFalseFalseFalseTrueTrueTrueFalseFalseFalseTrueTrueFalse
2415FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalseTrueTrueFalse
2416FalseTrueTrueFalseFalseFalseFalseFalseFalseFalseFalseTrueTrueFalse
\n", "

2417 rows × 14 columns

\n", "
" ], "text/plain": [ " Class1 Class2 Class3 Class4 Class5 Class6 Class7 Class8 Class9 \\\n", "0 False False False False False False True True False \n", "1 False False True True False False False False False \n", "2 False True True False False False False False False \n", "3 False False True True False False False False False \n", "4 False False True True True True False False False \n", "... ... ... ... ... ... ... ... ... ... \n", "2412 False True True False False False False False False \n", "2413 True True False False False False False False False \n", "2414 False False False False False True True True False \n", "2415 False False False False False False False False False \n", "2416 False True True False False False False False False \n", "\n", " Class10 Class11 Class12 Class13 Class14 \n", "0 False False True True False \n", "1 False False False False False \n", "2 False False True True False \n", "3 False False False False False \n", "4 False False False False False \n", "... ... ... ... ... ... \n", "2412 False False False False False \n", "2413 False False True True False \n", "2414 False False True True False \n", "2415 False False True True False \n", "2416 False False True True False \n", "\n", "[2417 rows x 14 columns]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Y" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split\n", "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=42)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "from sklearn.linear_model import LogisticRegression\n", "from sklearn.multiclass import OneVsRestClassifier" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "for OVR model" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "ovr = OneVsRestClassifier(LogisticRegression(solver='liblinear'))\n", "ovr.fit(X_train, Y_train)\n", "pred_ovr = ovr.predict(X_test)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.4739147749900438" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.metrics import jaccard_score\n", "ovr_score = jaccard_score(Y_test, pred_ovr, average='micro')\n", "ovr_score" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "for CC model (https://www.cs.waikato.ac.nz/ml/publications/2009/chains.pdf)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "from sklearn.multioutput import ClassifierChain" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.4618533680684779" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cc = ClassifierChain(LogisticRegression(solver='liblinear'), order='random', random_state=42)\n", "cc.fit(X_train, Y_train)\n", "pred_cc = cc.predict(X_test)\n", "cc_score = jaccard_score(Y_test, pred_cc, average='micro')\n", "cc_score" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "for CC ensemble" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "chains = [ClassifierChain(LogisticRegression(solver='liblinear'), order='random', random_state=42+i)\n", " for i in range(10)]\n", "for chain in chains:\n", " chain.fit(X_train, Y_train)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[0.4618533680684779,\n", " 0.4768186958160573,\n", " 0.47702001482579687,\n", " 0.46651785714285715,\n", " 0.4563857195436143,\n", " 0.4561075831154277,\n", " 0.4669636228656273,\n", " 0.44677769732078204,\n", " 0.46481954064892456,\n", " 0.4483288513253938]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pred_chains = np.array([chain.predict(X_test) for chain in chains])\n", "chain_scores = [jaccard_score(Y_test, pred_chain, average='micro')\n", " for pred_chain in pred_chains]\n", "chain_scores" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.bar(np.arange(11), [ovr_score]+chain_scores)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.4726443768996961" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "proba_chains = np.array([chain.predict_proba(X_test) for chain in chains])\n", "proba_ensemble = proba_chains.mean(axis=0)\n", "ensemble_score = jaccard_score(Y_test, proba_ensemble >= 0.5, average='micro')\n", "ensemble_score" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.bar(np.arange(12), [ovr_score]+chain_scores+[ensemble_score])\n", "plt.show()" ] } ], "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.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }