{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "이 노트북의 코드에 대한 설명은 [MLPClassifier의 다중 레이블 분류](https://tensorflow.blog/2018/02/18/mlpclassifier%EC%9D%98-%EB%8B%A4%EC%A4%91-%EB%A0%88%EC%9D%B4%EB%B8%94-%EB%B6%84%EB%A5%98/) 글을 참고하세요." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPython 3.5.6\n", "IPython 6.5.0\n", "\n", "sklearn 0.20.1\n", "numpy 1.15.2\n", "scipy 1.1.0\n", "matplotlib 3.0.0\n" ] } ], "source": [ "%load_ext watermark\n", "%watermark -v -p sklearn,numpy,scipy,matplotlib" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from preamble import *" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((75,),\n", " array([1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1,\n", " 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1,\n", " 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0,\n", " 0, 0, 0, 1, 0, 0, 1, 0, 0]))" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.datasets import make_moons\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.neural_network import MLPClassifier\n", "\n", "X, y = make_moons(n_samples=100, noise=0.25, random_state=3)\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42)\n", "y_train.shape, y_train" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "이진 데이터셋을 멀티 클래스로 변경" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([[0., 1.],\n", " [0., 1.],\n", " [1., 0.],\n", " [0., 1.],\n", " [0., 1.],\n", " [1., 0.],\n", " [0., 1.],\n", " [1., 0.],\n", " [1., 0.],\n", " [0., 1.]]), array([[0., 1.],\n", " [0., 1.],\n", " [0., 1.],\n", " [1., 0.],\n", " [0., 1.],\n", " [0., 1.],\n", " [1., 0.],\n", " [0., 1.],\n", " [0., 1.],\n", " [0., 1.]]))" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Y_train = np.zeros((y_train.shape[0], 2))\n", "for index, x in np.ndenumerate(y_train):\n", " Y_train[index, x] = 1\n", "\n", "Y_test = np.zeros((y_test.shape[0], 2))\n", "for index, x in np.ndenumerate(y_test):\n", " Y_test[index, x] = 1\n", "\n", "Y_train[:10], Y_test[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "MLPClassifier는 출력값의 두번째 차원을 보고 멀티 클래스 문제인지 자동으로 인식합니다." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mlp_multi = MLPClassifier(solver='lbfgs', random_state=0).fit(X_train, Y_train)\n", "mglearn.plots.plot_2d_separator(mlp_multi, X_train, fill=True, alpha=.3)\n", "\n", "mglearn.discrete_scatter(X_train[:, 0], X_train[:, 1], y_train)\n", "plt.xlabel(\"특성 0\")\n", "plt.ylabel(\"특성 1\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "책의 예제처럼 이진 분류일 경우" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mlp = MLPClassifier(solver='lbfgs', random_state=0).fit(X_train, y_train)\n", "mglearn.plots.plot_2d_separator(mlp, X_train, fill=True, alpha=.3)\n", "\n", "mglearn.discrete_scatter(X_train[:, 0], X_train[:, 1], y_train)\n", "plt.xlabel(\"특성 0\")\n", "plt.ylabel(\"특성 1\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.88, 0.88)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mlp_multi.score(X_test, Y_test), mlp.score(X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Yeast 데이터셋으로 다중 분류 테스트" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "from sklearn.datasets import fetch_openml\n", "yeast = fetch_openml('yeast', version=4)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((2417, 103),\n", " array([[False, True, True, True, False, False, False, False, False,\n", " True, True, True, True, False],\n", " [ True, True, False, False, False, True, True, False, False,\n", " False, False, True, True, False],\n", " [False, True, True, True, True, True, False, False, False,\n", " False, False, False, False, False],\n", " [False, False, False, False, False, False, True, True, False,\n", " False, False, True, True, False],\n", " [ True, True, False, False, False, False, False, False, False,\n", " False, False, True, True, False],\n", " [False, False, False, False, False, False, False, True, True,\n", " False, False, False, False, False],\n", " [False, False, False, True, True, False, False, False, False,\n", " False, False, True, True, False],\n", " [False, False, False, False, False, False, False, False, False,\n", " False, True, True, True, False],\n", " [False, False, False, False, True, True, False, False, False,\n", " False, False, True, True, False],\n", " [False, False, False, False, True, True, True, True, False,\n", " False, False, True, True, False]]))" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X = yeast['data']\n", "Y = yeast['target']\n", "Y = Y == 'TRUE'\n", "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=42)\n", "X.shape, Y_train[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "정확도는 각 행의 모든 클래스가 정확히 맞아야 됩니다." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.12396694214876033" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mlp_multilabel = MLPClassifier(hidden_layer_sizes=(300,100), max_iter=10000, random_state=42).fit(X_train, Y_train)\n", "mlp_multilabel.score(X_test, Y_test)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0],\n", " [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0],\n", " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n", " [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0],\n", " [1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],\n", " [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0],\n", " [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0],\n", " [0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0],\n", " [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0],\n", " [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Y_pred = mlp_multilabel.predict(X_test)\n", "Y_pred[:10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "각 행에서 하나의 클래스라도 맞은 경우를 헤아려 봅니다." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.890495867768595" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(np.sum(Y_test.astype(int) & Y_pred, axis=1) > 0)/Y_test.shape[0]" ] } ], "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.5.6" } }, "nbformat": 4, "nbformat_minor": 2 }