{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# sklearnの基本" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "あらかじめ読み込んでおくモジュール" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true, "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "%matplotlib inline\n", "import pandas as pd\n", "from matplotlib import pyplot as plt\n", "import seaborn as sns" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Dataset" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from sklearn.datasets import load_iris\n", "iris=load_iris()\n", "data=iris.data\n", "target=iris.target" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "slideshow": { "slide_type": "-" } }, "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", "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
05.13.51.40.2
14.93.01.40.2
24.73.21.30.2
34.63.11.50.2
45.03.61.40.2
55.43.91.70.4
64.63.41.40.3
75.03.41.50.2
84.42.91.40.2
94.93.11.50.1
\n", "
" ], "text/plain": [ " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n", "0 5.1 3.5 1.4 0.2\n", "1 4.9 3.0 1.4 0.2\n", "2 4.7 3.2 1.3 0.2\n", "3 4.6 3.1 1.5 0.2\n", "4 5.0 3.6 1.4 0.2\n", "5 5.4 3.9 1.7 0.4\n", "6 4.6 3.4 1.4 0.3\n", "7 5.0 3.4 1.5 0.2\n", "8 4.4 2.9 1.4 0.2\n", "9 4.9 3.1 1.5 0.1" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(data,columns=iris.feature_names).head(10)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "slideshow": { "slide_type": "skip" } }, "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", "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
count150.000000150.000000150.000000150.000000
mean5.8433333.0540003.7586671.198667
std0.8280660.4335941.7644200.763161
min4.3000002.0000001.0000000.100000
25%5.1000002.8000001.6000000.300000
50%5.8000003.0000004.3500001.300000
75%6.4000003.3000005.1000001.800000
max7.9000004.4000006.9000002.500000
\n", "
" ], "text/plain": [ " sepal length (cm) sepal width (cm) petal length (cm) \\\n", "count 150.000000 150.000000 150.000000 \n", "mean 5.843333 3.054000 3.758667 \n", "std 0.828066 0.433594 1.764420 \n", "min 4.300000 2.000000 1.000000 \n", "25% 5.100000 2.800000 1.600000 \n", "50% 5.800000 3.000000 4.350000 \n", "75% 6.400000 3.300000 5.100000 \n", "max 7.900000 4.400000 6.900000 \n", "\n", " petal width (cm) \n", "count 150.000000 \n", "mean 1.198667 \n", "std 0.763161 \n", "min 0.100000 \n", "25% 0.300000 \n", "50% 1.300000 \n", "75% 1.800000 \n", "max 2.500000 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(data,columns=iris.feature_names).describe()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# scikit-learn使い方Template\n", "@hamukazuさんの[計算機統計学会第30回大会での資料](http://www.slideshare.net/hamukazu/python-62212519)より" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "教師あり学習\n", "```\n", "model = SomeAlgorithm(hyperparameters)\n", "model.fit(data,target)\n", "prediction = model.predict(unknown)\n", "```\n", "教師なし学習\n", "```\n", "model = SomeAlgorithm(hyperparameters)\n", "model.fit(data)\n", "prediction = model.predict(unknown)\n", "```\n", "変換(PCAやノルム化など)\n", "```\n", "model = SomeAlgorithm(hyperparameters)\n", "model.fit(data) \n", "prediction = model.transform(data)\n", "```" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "**インスタンス作ってfitして、predict or transform!**\n", "**これだけ**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## SVMの場合" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "- sklearnのSVMはSVC(support vector classfier)とSVR(support vector regression)の2つに分かれている\n", "\n", "- svcはprobabilityをTrueにしなければスコアが計算できない" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "from sklearn.svm import SVC\n", "clf_svc=SVC(probability=True) #モデルのインスタンス作成" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "before=dir(clf_svc) #モデルインスタンスが持つメソッドリスト" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "フィッティングと予測" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n", " decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',\n", " max_iter=-1, probability=True, random_state=None, shrinking=True,\n", " tol=0.001, verbose=False)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf_svc.fit(data[:-5],target[:-5]) #最後の5レコード以外を使って学習する" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "array([2, 2, 2, 2, 2])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf_svc.predict(data[-5:]) #最後の5レコードについて予測を行う\n", "# ラスト5レコードは全部2なので正解" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "after=dir(clf_svc) #学習済みのモデルインスタンスが持つメソッドリスト" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "学習前後でモデルのメソッドが増える。 \n", "増えるメソッドの殆どは最後に\"_\"がついているはず。 \n", "学習結果のCoefficientとか確認可能。" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'probA_', 'n_support_', 'probB_', '_intercept_', 'classes_', 'fit_status_', 'shape_fit_', 'intercept_', 'dual_coef_', '_dual_coef_', 'support_', 'support_vectors_', 'class_weight_', '_gamma', '_sparse'}\n" ] } ], "source": [ "print(set(after) - set(before))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "メソッドチェーンでのワンライナーも可能" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "array([2, 2, 2, 2, 2])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SVC(probability=True).fit(data[:-5],target[:-5]).predict(data[-5:])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "予測結果のスコア \n", "0-1で正規化された値" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "scrolled": true, "slideshow": { "slide_type": "-" } }, "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", "
setosaversicolorvirginica
00.0113400.0224540.966206
10.0120910.0980050.889904
20.0103480.0531400.936512
30.0129520.0101920.976856
40.0113740.0992460.889380
\n", "
" ], "text/plain": [ " setosa versicolor virginica\n", "0 0.011340 0.022454 0.966206\n", "1 0.012091 0.098005 0.889904\n", "2 0.010348 0.053140 0.936512\n", "3 0.012952 0.010192 0.976856\n", "4 0.011374 0.099246 0.889380" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "score_svc=clf_svc.predict_proba(data[-5:])\n", "pd.DataFrame(score_svc,columns=iris.target_names)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "array([[ 0.38354193, 1.06620179, 1.55025628],\n", " [ 0.41971932, 0.92873543, 1.65154525],\n", " [ 0.41020748, 0.98579653, 1.60399599],\n", " [ 0.3576206 , 1.1423794 , 1.5 ],\n", " [ 0.42293297, 0.92995685, 1.64711017]])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf_svc.decision_function_shape=\"ovr\"\n", "clf_svc.decision_function(data[-5:])\n", "# SVMは識別境界面からの距離もスコアリングに使える\n", "# でもちょっと使いにくいかも?" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# RFの場合" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "基本はSVMと同じ" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true, "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "# RFはensembleというモジュールの中に入っている\n", "from sklearn.ensemble import RandomForestClassifier as RFC\n", "clf_rfc=RFC()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "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_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=None, verbose=0,\n", " warm_start=False)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf_rfc.fit(data[:-5],target[:-5])" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "array([2, 2, 2, 2, 2])" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf_rfc.predict(data[-5:])" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0. , 0. , 1. ],\n", " [ 0. , 0. , 1. ],\n", " [ 0. , 0. , 1. ],\n", " [ 0. , 0. , 1. ],\n", " [ 0. , 0.1, 0.9]])" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# スコア\n", "clf_rfc.predict_proba(data[-5:])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## sklearn準拠のモデルであれば、\n", "## 同じ操作で予測モデルが作れる \n", "sklearn準拠の話は[この辺](http://yamaguchiyuto.hatenablog.com/entry/python-advent-calendar-2014)参照" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# 線形回帰の場合" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "線形回帰用のDataset(糖尿病トイデータ)の読み込み" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false, "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "from sklearn.datasets import load_diabetes\n", "diabetes=load_diabetes()\n", "diab_dat=diabetes.data\n", "diab_target=diabetes.target" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "こんな感じ" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false, "slideshow": { "slide_type": "-" } }, "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", "
0123456789
00.0380760.0506800.0616960.021872-0.044223-0.034821-0.043401-0.0025920.019908-0.017646
1-0.001882-0.044642-0.051474-0.026328-0.008449-0.0191630.074412-0.039493-0.068330-0.092204
20.0852990.0506800.044451-0.005671-0.045599-0.034194-0.032356-0.0025920.002864-0.025930
3-0.089063-0.044642-0.011595-0.0366560.0121910.024991-0.0360380.0343090.022692-0.009362
40.005383-0.044642-0.0363850.0218720.0039350.0155960.008142-0.002592-0.031991-0.046641
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 \\\n", "0 0.038076 0.050680 0.061696 0.021872 -0.044223 -0.034821 -0.043401 \n", "1 -0.001882 -0.044642 -0.051474 -0.026328 -0.008449 -0.019163 0.074412 \n", "2 0.085299 0.050680 0.044451 -0.005671 -0.045599 -0.034194 -0.032356 \n", "3 -0.089063 -0.044642 -0.011595 -0.036656 0.012191 0.024991 -0.036038 \n", "4 0.005383 -0.044642 -0.036385 0.021872 0.003935 0.015596 0.008142 \n", "\n", " 7 8 9 \n", "0 -0.002592 0.019908 -0.017646 \n", "1 -0.039493 -0.068330 -0.092204 \n", "2 -0.002592 0.002864 -0.025930 \n", "3 0.034309 0.022692 -0.009362 \n", "4 -0.002592 -0.031991 -0.046641 " ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(diab_dat).head() # 記述子は10個の検査値" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "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", "
0123456789...432433434435436437438439440441
0151.075.0141.0206.0135.097.0138.063.0110.0310.0...173.072.049.064.048.0178.0104.0132.0220.057.0
\n", "

1 rows × 442 columns

\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 7 8 9 ... \\\n", "0 151.0 75.0 141.0 206.0 135.0 97.0 138.0 63.0 110.0 310.0 ... \n", "\n", " 432 433 434 435 436 437 438 439 440 441 \n", "0 173.0 72.0 49.0 64.0 48.0 178.0 104.0 132.0 220.0 57.0 \n", "\n", "[1 rows x 442 columns]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.DataFrame(diab_target).T # 被説明変数は1年後の血糖値" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "基本は一緒" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true, "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "from sklearn.linear_model import LinearRegression" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reg=LinearRegression()\n", "reg.fit(diab_dat[:-20],diab_target[:-20]) #最後の20個以外で学習" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 197.61846908, 155.43979328, 172.88665147, 111.53537279,\n", " 164.80054784, 131.06954875, 259.12237761, 100.47935157,\n", " 117.0601052 , 124.30503555, 218.36632793, 61.19831284,\n", " 132.25046751, 120.3332925 , 52.54458691, 194.03798088,\n", " 102.57139702, 123.56604987, 211.0346317 , 52.60335674])" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "reg.predict(diab_dat[-20:]) #最後の20個を予測" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false, "scrolled": true, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 実測値と予測値の比較\n", "plt.scatter(reg.predict(diab_dat[-20:]),diab_target[-20:])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# **回帰の場合も基本的には一緒**" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# クラスタリングの場合" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "これも一緒" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false, "scrolled": true, "slideshow": { "slide_type": "-" } }, "outputs": [ { "data": { "text/plain": [ "array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", " 1, 1, 1, 1, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", " 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", " 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2,\n", " 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,\n", " 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 2], dtype=int32)" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.cluster import KMeans\n", "Kcluster=KMeans(n_clusters=3).fit(data).predict(data) #メソッドチェーン\n", "Kcluster" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# 次元削減" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "次元削減の時はpredictじゃなくてtransformになる" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from sklearn.decomposition import PCA\n", "pc=PCA(n_components=2).fit(data).transform(data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "PCAの結果の表示" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "PCA_result=pd.DataFrame(pc,columns=[\"pc1\",\"pc2\"])\n", "PCA_result.plot(kind='scatter',x=\"pc1\",y=\"pc2\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "おまけ \n", "PCAで二次元に圧縮してKmeansの結果を見る" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#実際のラベル、Kmeansのクラス分け結果、PCAの結果をconcatenateする\n", "rslt=pd.concat(\n", " [pd.DataFrame(target,columns=['target']),\n", " pd.DataFrame(Kcluster,columns=['class']),\n", " PCA_result],\n", " axis=1)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false, "scrolled": true, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAESCAYAAADqoDJEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xmc3GWV7/FP9ZqkaUIgnchmWCJHljEsCjosIawBwyoM\nIIyjyHLHy8gyOo4K6BDmDuIMiY56HRCjbK8wErYkhiRe2RoIMkDUQDhsEpMQYiB7Or2k+3f/qKqm\nurqq+1fdVfX7Vff3/XrxSlfVr7pOukOdep7zPOdJBEGAiIhIWFVRByAiIpVFiUNERAqixCEiIgVR\n4hARkYIocYiISEGUOEREpCA1UQdgZncC04C17v6JHI9PBh4B3k7d9aC731zGEEVEJEPkiQOYBfwn\ncFcf1zzl7meWKR4REelD5FNV7t4MbOjnskQ5YhERkf7FYcQRxmfMbCmwGvi6u78adUAiIsNV5COO\nEF4EPuruhwI/Ah6OOB4RkWEtEYdeVWY2AZibqzie49o/AUe4+/q+rguCIEgkNMMlIlKAUG+acZmq\nSpAnYDMb7+5rU18fCST6SxoAiUSCdeu2FDfKQWpqalRMISim8OIYl2IKJ64xhRF54jCz+4Djgd3M\n7M/Ad4A6IHD324HzzOzvgQ5gO3BBVLGKiEgMEoe7f76fx38M/LhM4YiISD8qoTguIiIxosQhIiIF\nUeIQEZGCKHGIiEhBlDhERKQgShwiIlIQJQ4RESmIEoeIiBREiUNERAqixCFDTtuOtwmCTgCCoJO2\nHW/38wwRKYQShww5ddUTaO14la6gndaOV6mrnhB1SCJDihKHDDmJRDX1tcamlgeprzUSieqoQxIZ\nUpQ4ZMgJgk7aOpzRo86lrcO7p61EpDiUOGTIae9cwYjag6hK1DGi9iDaO1dEHVIPQRBw24wbiMMh\naiIDocQhQ059zX7d01OJRDX1NftFHFFPzc2P8aljOml+ZmHUoYgMiBKHSBkFQcCq95ZgHx/LqjXP\nadQhFUmJQ6SMmpsfY9InawGYdESNRh1SkSI/AVBkOHnx5SfZe0MN0ArAynee4NhjpkYblEiBlDhE\nyuiar94SdQgig6apKhERKYgSh4iIFESJQ0RECqLEISIiBYm8OG5mdwLTgLXu/ok81/wQOA3YBnzR\n3ZeWMUQREckQhxHHLODUfA+a2WnA/u7+MeBK4KflCkxERHqLPHG4ezOwoY9LzgLuSl37PDDazMaX\nIzaJn/RZG2073qarq73HbREpj8gTRwh7Aiszbq9O3SfDUPqsjZqq3dnS9ltqq3bXmRsiZRZ5jaOU\nmpoaow6hF8UUTl8xdXZ9khVr7mHCHn/DyrX/zYTdL6G6qi7SmKIUx7gUUzhxjCmMSkgcq4G9M27v\nlbqvX+vWbSlJQAPV1NSomELoK6Yg6KS141VG1UxjxbsLaKyfxuo1/8OI2oNKemBTHH9OEM+4FFM4\ncY0pjLhMVSVS/+XyKPAFADP7NLDR3deWKzCJl/RZGzu61tBYfwIdXWtieeaGyFAW+YjDzO4Djgd2\nM7M/A98B6oDA3W9391+b2elm9ibJ5bhfii7a4lm/cQM3L5zP2pEjGNeynRunTmPMLmOiDiv20mdr\ndP9Z1fO2iJRe5InD3T8f4pqryhFLOd28cD4vnnYKiUSCVUHA9AXzue2CS6IOS0SkX3GZqhp21o4c\nQSKRnJ1LJBKsHTki4ohERMJR4ojIuJbt3ae/BUHA+O2tEUckIhJO5FNVw9WNU6cxfUGyxjF+eys3\nnPrZqEMSEQlFiSMiY3YZo5qGiFQkTVWJiEhBlDhEBijdJwtQvywZVpQ4RAYo3TerK2hXvywZVpQ4\nRAYokaimvtbY1PIg9bVW0pYnInGixCEyQEHQSVuHM3rUubR1ePe0VVwFQcBtM27oXgYuMlBKHBJb\nca8hpPtmVSXqYt8vKwgC/vmbl/LJo3fQ/MzCqMORCqfEIbEV9xpCfc1+3dNTiUR1rPtlPd28gNPP\nbmLL5m2sWvOcRh0yKEocEltxqCHEfdQTRhAEvPrarznw4I/wwftb+cTh1Rp1yKAocUhsRVlDSCeM\nuuoJbG9fxqatr8Ry1BNGc/NjHHtCEwCHf3ICj817hxdfeiLaoKSiaee4xFa6hpBIVHfXEMo1HZSe\nJquvNUgEvL9xCTvVnV2RK6defPlJ9t5Qw2uvrAegOjGOa756S8RRSSVT4pDYykwSpawhtO14m7rq\nCSQS1QRBZ3eCqq81NrbMYUTNx9lnj7/tcdJgvufEkZKEFJumqmTYy1WET0+Tjao7AhJVPUY9+Z7T\nl6FQKxFJU+KQYS9XET49TTai9gBG1h7Ctpa3eox6Ci3cx32FmEghlDhk2MtVhM9eatvYcEC/z+lL\nHFaIiRSLEocMewPZyFfocyptl7lIX5Q4ZNgbyEa+Qp9T7l3mai8ipaTEIRLClm2vD6q4Xe5d5s3N\nj/GpYzq10U9KQokjAus3buC6++/h4kcf4NrZd7Nh44aoQ5J+NIzav2KK20EQsOq9JdjHx+ZtL9LV\n1cWll51OV1dXBBFKpVPiiMDNC+fz4mmnsHrKZF46/VSmL5wfdUjSj6p+ittxWm7b3PwYkz5ZC8Ck\nI2pyjjru/PmtfPHyQ/j5rO+XOzwZAiJPHGY21cxeM7PXzewbOR6fbGYbzeyl1H/XRxFnMa0dOYJE\nIgFAIpFg7cgREUck/enqp7hdjuW2YZPTiy8/yfI/tvL04+tZvqytV3uRrq4uWtpe5eMHfYRtra/0\nGHWoNiJhRLpz3MyqgB8BJwLvAi+Y2SPu/lrWpU+5+5llD7BExrVsZ1UQkEgkCIKA8dtbow5J+rGt\n5a0+259kLrcdPerckiy3zWyD0tbhjKg9KOd1/e0Uv/Pnt3LSafsDcNLU/fn5rO9z2ZeTn9kyayPH\nHjO1uH8BGTKibjlyJPCGu68AMLPZwFlAduJIlDuwsNZv3MDNC+ezduQIxrVs58ap0xizy5g+n3Pj\n1GlMX5B8zvjtrdxw6mfLFK0MVGPDAbS2bAFyF7ezl9smEiO6C+LFaklSrOT0+z80U10/vvv20t+v\nBb7RXRs5cepY/t9jzxEEp3aPjNOCIGD6tTO5YcY1vR6T4SPqxLEnsDLj9iqSySTbZ8xsKbAa+Lq7\nv1qO4MJI1ysSiQSrgoDpC+Zz2wWX9PmcMbuM6fcaqSzZDRnbdvypz9HBQHpdZSenfCOO/vzoh/N6\n3L70b5N/5qqNZI86Fj/4DMw5i8XHPcsp5x49oNeXyhd14gjjReCj7t5iZqcBDwMH9PMcAJqaGksa\nGMAHOzf0qFd8sHNDr9f9YMMGvjFnDu/W1bFHWxu3nnceu47pe1RSTuX4ORWq8mKalHX7MDq72lmx\n5h4m7H4J1VV1PR7tCg5h05bfs/NOh7B56zLGNk6iqp8RxJZtrzN21FFUJarpCo5iW8tbwC5F+1kt\ne/UZ9thSxRu0A/DuymbOPef87seDIGDp/VsY2zaJpbOdz1+xU95RR+X9/qIRx5jCiDpxrAY+mnF7\nr9R93dx9a8bXC8zsJ2a2q7uv7++br1u3pWiB5rPrpq28k1Gv2G3ztl6ve939s7tHJe8EAVffOzs2\nI46mpsay/JwKMRRiCoJOWjtepaH2rB5ddTN1BRN4a/0vGT3qXD5oawnxXXentaWlx+3GhuL9O//7\nK2/udV/m9140p5mqp48DIPH0sdx3+8Kco46h8Psrh7jGFEbUieMFYKKZTQDWABcCF2VeYGbj3X1t\n6usjgUSYpFEuYeoVWkU1/PR3lkiuaae4969qnreUGmsjnbqa5y7XdNUwFWnicPdOM7sKWERyafCd\n7r7czK4EAne/HTjPzP4e6AC2AxdEF3FvYeoVWkU1/PR3lkhUh1QN5hyRm2ZdlXXPicUPUCpCYgiv\n1w7iMgzcsHED0xfO54OdG9ht8zZuOPWz/a68Kpe4DpeHS0yDPRBqoFNomUX7Yo90htPvbzBiGlOo\npXJRT1UNC+lRSRz/ocjgDebNP+zejGIpx34TGfoi3zkuUukGs2u83Od05Gvvrh3jUgglDhl2it1X\najBv/n2d01GK/lf52rurm64UQolDhp1i95VKv/mPrDuM1vblBEFn6Df69s4VJBIjSPDhxsH080rR\n/ypXe/cw3XRFMilxlEG6jfrpd92lNuoxUOzpoW3tz1NfY9TXTAQCtrY9G/qNvr5mP+pr9qO141UC\nOgmC7d3PK1ac/Y1cwnTTFcmk4ngZZLYleSdPW5KB9LySgRnsHorsYnhNVRNtO5z6WgMCOjpX0VB/\nVOjvma9gXay9Hv0V4F98+Un23lADJJeJr3znCTU4lD4pcZRBmA2AA+l5JQMz2D0Uud6IAzrZuG0O\nI+oOZJdRnyvojT5fgijWXo/+VlL1101XJJumqspgXMv27nnjfBsAtbu8fAZ7jGv2FBJAW4czqv5w\nCBIkqCaRGNk9JdRfvSNfwbpYx81mJ6aurh1aQSWDosRRBjdOncYRCxYxobmZIxYsytmWJExykXjI\nfiPe2vYc9TXGiFpjRO2BqZrHvgRBa6jCdqnPI89OTE88da9WUMmgaKqqDMJsANQZHdEqZBNfrhbq\n6RpH2w6noe6oWG206/n3qGLturc58Yj8Z26I9EcjjpgYs8sYrj/1s4zf3srakSO46bF5Wn1VRoUs\nfc0eIYyondhr9VNf+zOiFLcVVEEQcNM1MzRtVmGUOCKUXqZ7wUP3c8L3b+a0//sDXjztFFZPmcxL\np5/K9IXzow5x2Cj2Jr58dYuo9XceeX8G+kaf73ndB0M99GxB30+ipcQRofRKqrUnnUDnlVewrb5O\nBfKIDGaEkJ0ktrU/P6jGhaV0zVdv4dwzprPirQTnnjG94BVVhb7RpxPG4jnNvZ4XBAEv3LOBsW2T\neOHu9Rp1VBAljghlr6SqHjOmR4F8zevO+bPvYsr3/5ULHrpfmwdLaDAjhOypq4a6o4q+47uYBtpe\nZCBv9IsffIbggTNZOHNFr+ctfvAZ6pecAEDdkikadVQQJY4IZa+kSiQSbJo7l02zZ7N55kzaL7yA\nNzs76LryctaedIKmr0qomCubStW4cCC9q7KbFw6mvUh/b/TZ01HpRLO1fSPjXj+71/Oa5y2lxZbw\n/kEPs92ep3nuy6FjkWhpVVWE0iupVtfVsu6tNxnVMIqW2lp2Ov10tv3ud9SMHk1VQ4OmrypMsXZ8\nZ6/0ynWWRu7XD5gx80auveamHqOLY4+ZmrM4HnaXeH8nAKanseZPe4qjTjq8O9G8yz20sp4Re26n\ncXRD9/N0MFTlUuKIQI/2IkHAT6ecwphzLuDiRx9g9ZTJAAQtLQRBQNe2bd2jkfT01cWPPqC2JDFW\nrB3f+Xao97fEtztZND/GqveWcOLUD5feZrYXCYKABfNmcszR4Zbk9vVG/+E01mk8eft/c+SJQXei\nMSYCsGPfP3PjrKtQgqh8ShwRyNdeJPOI2YbJk6m+/Q4m7rU3H9x+B037T2TdW2/SfuEFrB49Wm1J\nYqy/Y2PDyt4LAqS68B5Oa8dyRtYeQldqyir9GumpqBOnjuXB2fM59sTxwIeji8xi+NNPL+CLVwQF\njTryyZzGSjx9HIsfelYjiiFMiSMC+dqLpKeu/P11rFi7htp99mGDv8as8y7g0IMnJUcko0f3ep4M\nTdlTXonEyO7pqe3ty2jb8SabtlRRV/1hYsqcijpmShOPzf0TE/bZnaeeeJl999nanSAyE0wxNgJm\nTmPV1FTTPHdZj2ksGVqUOCKQObLIbC+S3mF++E3fYrevfa378UtnzuSlgyflfZ5UhkKPmM015ZWe\nnhpRdyCbWh5kj53+jvVtbd3Pye50W50Yx/hdj+H8zwfQdlz3dYOpdeSSObpIdkg4fsDfS+JPiSMC\n6ZHFyqCLD1atZPX+E7l29t3dNYtgr717jEiCvfbu8Ty1JalMhZ4vnm/KK3MksnnrMoJgP9o7V1BX\nPYFrvnpLj6QUBAGzH/hur5GFWqnLYChxRCA9srju/nv4yxWXszaR4L3MmsXKlT0K4olVK3s8T+Iv\n3+iiGP2rMkcioxsn8e62ZXmTUr6RhVqpy2AocUQoX61j1nkXcOnMmcmRx6qV/PxzF0QZpgxAzhVR\nRVqmmzkSqcoYieRKShpZSClEnjjMbCowk+RmxDvd/Xs5rvkhcBqwDfiiuy8tb5Slka9mcejBk3jp\n4Emhv49OD4yfXN1x23a8PaBlumFqI/mSUiWMLIIgYPq1M7lhxjXq1FshIt05bmZVwI+AU4GDgYvM\n7ONZ15wG7O/uHwOuBH5a9kBLJH1Ox56PP5n3nI4w0st71RwxPnL1vhro7vQwnXvj2lQxDDU6rDxR\ntxw5EnjD3Ve4ewcwGzgr65qzgLsA3P15YLSZjS9vmKWRrlnce+Z53HbBJQMeJej0wPgp5ht5mBYm\npT4MqlT663+ltuvxFHXi2BNYmXF7Veq+vq5ZneOaYU2nB8ZP2DfyMP2n4nq2RzH01/9Ko5F4irzG\nUUpNTY1Rh9BLITF9sGED35gzh3fr6tijrY1bzzuPXcf0HpX88JKL+Kf0de3t3Hrxhew6JvzrVPrP\nqVxKEVNXcAibtvyenXc6hM1blzG2cRJVWSOKLdteZ+yoo6hKVNMVHMW2lrdobDigpHENVtiYfrf4\nFaoO3kF7+vYi5+IrP9ykuPT+LYxtm8TS2c7nr9hpUDWQSv45xU3UiWM18NGM23ul7su+Zu9+rskp\n3zGtUenr6Nhcrrt/dndrkneCgKvvnZ1nOW4N/3bWhyuvOneE/7sXGlM5DLeYuoIJvLX+l4wedS4f\ntLXkuGJ3Wltasm5vKXlcYaQL29ffdjU3X/cDbphxDePG7Rw6put/emXWPcd3P3fRnGaqnk5uWkw8\nfSz33b5wwLvRo/455RLXmMKIeqrqBWCimU0wszrgQuDRrGseBb4AYGafBja6+9ryhhkN1S6Gvkqf\nhkpPJc345qyiTymp7Xp8RTricPdOM7sKWMSHy3GXm9mVQODut7v7r83sdDN7k+Ry3C9FGXOxhFlC\nqxYjQ18xOukW2spkoLKXzWZ2xF0650kmtX2CF+5+hc9fUZxCtpokxldiCK9WCOI4DEzHdN3993RP\nQwVBwBELFvWahtqwcQPTF/ZsMVLs/RlxHS4rpnCamhr5y1829tpsWKzDozItmtPMkmv24NM/WMMp\n5x7NojnN/OGqwxjV+RG2sIYPeJ2m6gM47u7XOeqkw4v++oMRx99fTGMKVUSKusYxbIWZhiq0xYg2\nAg5PuTYbFlvm6OKFu1/h5HM+PG/j7ZXvk2iv5y91L7PT3sex+IE3Y5c4pLiUOCKSbxpqMG/++c75\nkKGtWK1M+pJr2exNs66iq6uLz/31Fcx59naqqpLHwzY1nR27T9JSXEocRTCQN/t8nW7DvPnnez0V\n04enYp042Jd8x8bO+OYs/urtbzLjW7/gH2+5NOdz1VJk6FHiKIKBfNLPNw0V5s0/zAmCKqZXnoEW\nuYt14mBfchWqu7q68DlVHMqhLH3gKbr+TxdVVb0XanZv4jvuWR3uNEREvRx3SCjmJ/3sXeDpM8av\nnX03GzZu6PP1itX7SqIRpidVnMz45iz23/w3AOy/+XxmfOsXva7pr6WIVKY+Rxxmti9wB8lNeo8C\n17t7a+qx59z9M6UPMf6K+Uk/cwprzeue84zx/k4QlMpUjiJ3MT27YBkfqV+cvBGA39fMdf/Wc7V8\nrtpIetShKazK1d+I46fAQyQ35u0K/NbMRqce0wR6SjE/6Wc2Ptz9AKMmxxnj6ddrmr+A6tvvYHVd\nbY8RiVSmzCL3ttZmurraP7w/Rw+rqM35wwx+vPJsfrzybM76wViOC67vtQGwr0186kNVufqrcYxz\n9x+nvr7UzP4JeNzMTgY05kwp1Sf9/kYWeU8QlIqUWeRuqD+Gbe3NNNQfE+qY2ShlL9XN3ACYro2k\nRxf/MuOanM85+ZxAo44K0t+Io8eowt1vBWYBjwOjcz5DiubGqdM4ZM7DtP/sTroefJD29vYeowqt\nohpaMjvqVlXV0VB/TJ+t1Nt2vE1XP511yyF7Omr+7KdyXpM5uuivK67EW3+J4xUzm5Z5h7v/J/Bj\nYJ9SBSVJY3YZQ/2oUdR++VKqP/c5/njWtB6HNKmd+tAVpodVXfUENm35fahiepj27b1jCHcWRvZ0\n1OIHXuj1fbIL5MOhD9VQPkukv6mq83Pd6e7/ZWb3liAeydLXqCLfXhCpfGH2ZiQS1ey80yHdnXX7\nKqbnOgM90zuLqtn7+E6q66CzHVY+Uc3rW54MtYw2e6lu9gbAfJsHexp6faiG8jLkPkcc7h64e2Bm\nJ2UUxTGzXUie3idFsH7jBq67/55ey26h71FFsU4QlPgJcxBUEHSyeesyRtYdTmvHcoKgM+9oor9T\nBPc+vhP/VS0dW8F/Vctek3cUbRntYEcXlfjJfagvQw67AfD7QGbzmc3Av2fdJwPU1wZCjSokn/bO\nFYxtnERH6xa2ty+jbcebBEF7zkJ6f21JquvgY2d1MPeCUZxxfwu/nZd/GW2hBju6qMRP7n0tQx4K\nwm4ATLh7d8p09y4g3ovMK0hf01EaVUg+9TX7UZWoTk5n1R3I9vaX8xbS+zsDvbMd3nikljPub+GN\nR2p5em75axC5RhaV+sl9qNdwwo44tpjZUe7+PICZHUXybAwpguxlt7ts3sJlP/kBv/tgHTV77kHj\nuvf5xUV/y74f3TfqUCUiyeJ2F/U1+3bfTiaISaGaHPbXlmTlE9XY+R1U14Gd38GXm65mn1MyC/Kl\nr0HkGllU6if3oV7DCZs4/gl42MxeARLAgcC5JYtqmElPR62uq2XdW2/ycsMoNr6/jqZrPjww58u3\n38Fvv/btqEOViNRVT2B7xzK2t/8BEgkIEoysOwQoTpPDzCRRXUdW0ii+vg6FytzXkd1c8Y6bH+Xk\nc/5aez4iFmqqyt2fAw4CbgP+AzjY3ZeUMrDhJD0dtWd7B51XXE7dJZdQO2FCj+mrlnHjIo5SopRM\nCgfSumM5re2vMqLuwO5RRZhCetyE3ddx06yruPGJE7nxiRP59D/U81frrg6156MSC+qVpJAmh9Wp\n66tQfaMkMmsdnWvX9lhN1f7On3KuupLhIQg6ae1YzoiaAxlRdxCt7csr4nzysHWLzJrAO43zeDqr\nJhCm1pH5WmpnUlqhEoeZnQu8BvwD8FXgVTM7u5SBDUeZS28bzziDdf9xG5t/9Ss2zZzJqEsvZfWU\nybx0+qk9NgHK8NDeuYKqRAMj6z7ByNq/oqpqVK8CdxzlegPPt68jPaoYv/1Ijj3jsF7fp7+d5t2v\n9eAzFVlQryRhRxz/Cvy1u5/q7qcARwP/VrqwhqfMZomf+cMrPHPtN3jp0q9w8KGH52x2mKmvvSBS\n+epr9mNE7UQS6VVUtR/rc0pqIDvFByrftFC+UUK+FUd9jSr6W6WU+dyFt71D3XNTALUzKZWwxfFW\nd389fcPd3zCz7SWKadjK1ywxzDGza/w12i+6kJqsFuwyPPW3U7yY8u2zyLciKt+Ko75WUPW3Sinz\nuePeOJO39ryXPUZPBJKnFV585dRi/FUlJWzieMTMvg3cSXJV1ZdIrrIaSXKPR0ufz5ZBuXHqNK5/\n9GH+sKONzg0baR09hg2ppJHeOBgcfxzb5s5l9JlnkkgkWBl0cd399wzo7HKpfOU62yPXaqi0fMfN\n5lPo9X09d9y+Hdw4K51chtZS2DgImzhuTP05Pev+75Jsr65ieQmN2WUM9bW1VJ35WaoTCV5JjSiy\nNw4mRo0Ckv8zf7BqJX+54vKCjrOVoSPM3o5iyDVKSH+6L3Qvw2D2PpRr34QOn0oKlTjcvehHzJrZ\nGOB+YALwDvA37r4px3XvAJuALqDD3Ydlj6xcu8t7bRx86212r36S8dtbWb3/RNaq5fqQkutMcpiU\n89pi7O0II9coYSDTQpXyhlyJ7U9KIeyIoxT+GfiNu99qZt8Avpm6L1sXcLy7D+tqb646xw3Zfawu\n+0r3dNS1s+/mvSIdZyvxUEjdor+d4sVSrE/6lfCGrMOnPhRl4jgLmJz6+pfAE+ROHAkK228yJOVq\ndtjXyYNqjjj0FLtukauVeql3jOdSKW/Ildr+pBSiTBzj3H0tgLu/Z2b5tkYHwGIz6wRud/c7yhZh\nDKRXTq0Munh/5UrGTZwYal16qY6zlejkqlsMRrqV+sfO6uCNR2qx8zuKFGlhKuUNeTDF+6EmUcrN\nMWa2GBif+XokE8H1wC/cfdeMaz9w991yfI/d3X2NmTUBi4Gr3L05xMsPiV0/l/3sZzw7ZQqb585l\n5zPO6J56+uvHH+dnl10WdXhSRlu2vU7DqP2pSlTTFXSyreUtGhsOGNT3bN8K95wKlyyEup2KFGiB\nrv7cv1P1pnXf7pro/GDO16IJRkIN9Uo64nD3k/M9ZmZrzWy8u681s48Af8nzPdak/lxnZg+RPEAq\nTOLocQpZHDQ1NRYc058T1SQSCaoaGnoUx/+cqC7K328gMZWaYspnd1pbWnrcbmwY+L/zzvbkoU1T\n7+nguZ/VdnfHHaxCf1bX//TKrHuOL/rPeqC/v1IW7ePxb6qnpqbGUNdFWTt4FPhi6uu/Ax7JvsDM\nRpnZTqmvG4BTgGXlCjAO0m1IurZt0/niUlTpVuq1OyVbqa98It6r6qNoXKieV7lFmTi+B5xsZk5y\nKcYtkJyaMrN5qWvGA81m9jKwBJjr7osiiTYi6TYkE6trqb79Dsb/5rccsWCRit0yaPuc0tk9wihH\nK/XBKvebeKUeIlUOkRXH3X09cFKO+9cA01Jf/wk4tMyhxUq6yN3dXqS6miBojzoskbKKYuVVpRTt\noxDlqirpR2Yvqnfd6bpSO8FleIriTVyrqPJT4oixzF5Umzs72Fk7wWWYiuJNfKgf/zoYShwxltlm\nJGhpIdBOcBmm9CYeL0ocMZbZZqRh8mT46X/ROa6pR4dcdbwVkXJT4oix7LYhbU3jWXbu2T065KrO\nISLlNux7QMVZekXVvWeex20XXMLG3Xbt1SFXpC/lPAmwEkSxF2QoUuKoIJlnkqvOIWGkO+p2Be20\ndrxKXfXKG+vGAAALRklEQVSEqEOKlDb0FYcSRwXJPJNcmwAljMyOuvW1VrKTACuBNvQVj2ocFUQd\nb6VQ5ToJsBJoQ1/xKHEMMZmbBnXWuJTrJMBKoA19xaPEMcRkbhrUDnMp10mAlUB7QYpHNY4hJtfZ\n5CLDjVZPlZYSxxCjlVciWj1VapqqirGB1Ct01rgMd7k66UpxKXHE1PqNGzjvZz9h4/77EWzZxIrJ\nk5m+sP96hVZeyXCXa/XUxVdOjTiqoUWJI6ZuXjifzisuZ+dUU8PNc+eytnF01GGJxF6u1VNKHMWl\nxBFT2UXuxKhRqleIhKDVU6WnxBFTmZ1xgyBgl7fe5obLvlLQ99CeDhEpBSWOmOpV5L7sKwW/6WtP\nh4iUghJHTBWjyK09HSJSCtrHMYRpT4eIlIJGHEOY9nSISCkocQxh2tMhIqUQWeIws/OA7wIHAp9y\n95fyXDcVmElyWu1Od/9e2YIUEZFeoqxx/BE4B3gy3wVmVgX8CDgVOBi4yMw+Xp7wREQkl8hGHO7u\nAGaW6OOyI4E33H1F6trZwFnAa6WPUEREcon7qqo9gZUZt1el7hMRkYiUdMRhZouB8Rl3JYAA+La7\nzy3lawM0NTWW+iUKppjCUUzhxTEuxRROHGMKo6SJw91PHuS3WA18NOP2Xqn7Qlm3bssgX764mpoa\nFVMIiim8OMalmMKJa0xhxGU5br46xwvARDObAKwBLgQuKltUIiLSS2Q1DjM728xWAp8G5pnZgtT9\nu5vZPAB37wSuAhYBrwCz3X15VDGLiEi0q6oeBh7Ocf8aYFrG7ccAK2NosaIOtyISN3GZqpI81OFW\nROIm7stxhz11uBWRuFHiiDl1uBWRuNFUVcypw62IxI0SR8ypw61IPARBwPRrZ3LDjGu6p4+HKyWO\nmNJqKpF4WfzgMzDnLBYf9yynnHt01OFESjWOmEqvplo9ZTIvnX4q0xfOjzokkWErCAJeuGcDY9sm\n8cLd67vrjsOVEkdMaTWVSHwsfvAZ6pecAEDdkiksfujZiCOKlqaqYmpcy3ZWBQGJREKrqUQi1jxv\nKTXWRkv69tzlw3q6SokjprSaSiQ+bpp1VdY9J0YSR1woccSUVlOJSFypxiEiIgVR4hARkYIocYiI\nSEGUOEREpCAqjlc47TAXkXJT4qhwOq9DRMpNU1UVTjvMRQYvCAJuumbGsG8lEpYSR4XTeR0ig9fd\nwHCYtxIJS4mjwt04dRpHLFjEno8/yRELFmmHuUiB1MCwcKpxVDjtMBcZnFwNDIdzH6owlDhEZFhT\nA8PCKXGIyLCmBoaFiyxxmNl5wHeBA4FPuftLea57B9gEdAEd7n5kmUIUEZEcohxx/BE4B/ivfq7r\nAo539w2lD0lERPoTWeJwdwcws/5OfU+g1V8iIrFRCW/IAbDYzF4ws8ujDkZEZLgr6YjDzBYD4zPu\nSpBMBN9297khv83R7r7GzJpIJpDl7t4c5olNTY2FBVwGiikcxRReHONSTOHEMaYwSpo43P3kInyP\nNak/15nZQ8CRQKjEsW7dlsG+fFE1NTUqphAUU3hxjEsxhRPXmMKIy1RVzjqHmY0ys51SXzcApwDL\nyhmYiIj0FFniMLOzzWwl8GlgnpktSN2/u5nNS102Hmg2s5eBJcBcd18UTcQiIgLRrqp6GHg4x/1r\ngGmpr/8EHFrm0EREpA9xmaoSEZEKocQhIiIFUeIQEZGCKHGIiEhBlDhERKQgShwiIlIQJQ4RESmI\nEoeIiBREiUNERAqixCEiIgVR4hARkYIocYiISEGUOEREpCBKHCIiUhAlDhERKYgSh4iIFESJQ0RE\nCqLEISIiBVHiEBGRgihxiIhIQZQ4RESkIEocIiJSkJqoXtjMbgXOANqAt4AvufvmHNdNBWaSTHJ3\nuvv3yhqoiIj0EOWIYxFwsLsfCrwBfDP7AjOrAn4EnAocDFxkZh8va5QiItJDZCMOd/9Nxs0lwOdy\nXHYk8Ia7rwAws9nAWcBrpY9QRERyiUuN41JgQY779wRWZtxelbpPREQiUtIRh5ktBsZn3JUAAuDb\n7j43dc23gQ53v6+UsYiISHGUNHG4+8l9PW5mXwROB07Ic8lq4KMZt/dK3RdGoqmpMeSl5aOYwlFM\n4cUxLsUUThxjCiPKVVVTga8Dx7l7W57LXgAmmtkEYA1wIXBRmUIUEZEcoqxx/CewE7DYzF4ys58A\nmNnuZjYPwN07gatIrsB6BZjt7sujClhERCARBEHUMYiISAWJy6oqERGpEEocIiJSECUOEREpSGSr\nqsrFzP4R+D4w1t3XxyCem0jufu8C1gJfdPf3Io4pVN+wMsd0HvBd4EDgU+7+UoSxxK5fmpndCUwD\n1rr7J2IQz17AXST3bXUBd7j7D6ONCsysHngKqCP5fveAu/9LtFF1t1P6H2CVu58ZdTwAZvYOsInk\n76/D3Y/Md+2QHnGk/jGfDKyIOpYMt7r7JHc/DJgPfCfqgAjRNywCfwTOAZ6MMogY90ubRTKmuNgB\nXOfuBwOfAf53HH5OqaX+U1L/vx0KnGZmed8Qy+hq4NWog8jSBRzv7of1lTRgiCcOYAbJvSKx4e5b\nM242kPxlRcrdf+Pu6TiWkNxoGSlPeoNkt4EodfdLc/cOIN0vLVLu3gxsiDqONHd/z92Xpr7eCiwn\nJu2B3L0l9WU9yVFHpEtJUx9oTwd+FmUcOSQImROG7FSVmZ0JrHT3P5pZ1OH0YGY3A18ANgJTIg4n\n26Uk3xwlKVe/tDh8Yo0tM9uH5Kf75yMOBegeNb4I7A/82N1fiDik9Afa0RHHkS0gua+uE7jd3e/I\nd2FFJ44+emFdD3yL5DRV5mNRx/Vtd5/r7tcD15vZN4B/IDmXH2lMqWvK2jcsTExSWcxsJ+AB4Oqs\n0XVkUqPpw8xsZ+BhMzvI3SOZJjKzz5KsSy01s+OJfkSd6Wh3X2NmTSQTyPLUyLaXik4c+Xphmdkh\nwD7A780sQXLq5UUzO9Ld/xJVXDncB/yaMiSOIvQNK7oCfk5RGky/tGHFzGpIJo273f2RqOPJ5u6b\nzexxYCrR1ReOBs40s9OBkUCjmd3l7l+IKJ5u7r4m9ec6M3uI5Mh66CWOfNx9GfCR9G0z+xNwuLtH\nPidsZhPd/c3UzbNJzgVHKmTfsChF+akszv3SEsTrE+vPgVfd/QdRB5JmZmNJjqI3mdlIkrMQt0QV\nj7t/i+RsCGY2GfjHOCQNMxsFVLn7VjNrAE4B8q4+G5KJI4eA+PwPdouZHUCyKL4C+F8RxwPJvmF1\nJIenAEvc/StRBmRmZ6fiGgvMM7Ol7n5aueNw904zS/dLSy/HjUOyvw84HtjNzP4MfMfdZ0UYz9HA\nxcAfzexlkv/PfcvdH4sqppTdgV+m6hxVwP3u/uuIY4qj8cBDZhaQzAv3uvuifBerV5WIiBRkqC/H\nFRGRIlPiEBGRgihxiIhIQZQ4RESkIEocIiJSECUOEREpyHDZxyESW6nW/5cDHwPO0D4DiTuNOESi\n9wRwGhG3kBcJSyMOkSIysy4gfVjXCJINGx9MPfYZ4FagkeTO6q+nWtq/mHo8Lt0NRPqkxCFSfB3u\nfliqtcyzZvYU0Ak8CJzt7s+nksTOkUYpMkBKHCLFdyeAu79uZi8CnybZm+wVd38+9VhA8phOkYqj\nGodI8SVCfC1SsZQ4RIrvSwBm9jGSJ+EtAZ4DDjSzo1KPVZnZLtGFKDJwmqoSKb4aM3uJ5EE9V7j7\n+wBmdi4wI3XeQSfwNeC3ZvY14GqSLeR/YWatwEFxOUFPJJvaqosUUWpVVYO7b486FpFS0VSVSHHF\n6dAwkZLQiENERAqiEYeIiBREiUNERAqixCEiIgVR4hARkYIocYiISEGUOEREpCD/H09P03Tn2fQu\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1, 1)\n", "cmap = plt.get_cmap('rainbow')\n", "marker=[\"o\",\"x\",\"^\"]\n", "for i in range(3):\n", " tmp=rslt[rslt[\"class\"]==i]\n", " for j in range(3):\n", " tmp2=tmp[tmp[\"target\"]==j]\n", " if tmp2.shape[0]!=0:\n", " tmp2.plot(\n", " kind=\"scatter\",x=\"pc1\",y=\"pc2\",ax=ax,c=cmap(i/3),marker=marker[j]\n", " )" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# その他\n", "- scikit-learnはpandasのDataframeを入力に使えるが、**出力はnumpyのarray**になってしまう。\n", "- そのためpandas-mlというパッケージもあるが今回は省略。" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "df_iris=pd.DataFrame(iris.data)\n", "print(type(df_iris))" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "pca_iris=PCA().fit(df_iris).transform(df_iris)\n", "print(type(pca_iris))" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "# pandasについて\n", "- sklearnにも前処理の機能はありますが、pandasを使ったほうがいいことも多いです。\n", "- 長くなるのでpandasの説明も割愛します。\n", "- matplotlibのwrapper APIもあるので、pandasで簡単な描画も可能です。\n", "- pandasは今のところ、[このページ](http://sinhrks.hatenablog.com/entry/2015/04/28/235430)が一番まとまっていると思います。" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# 終わり\n", "@y__sama\n" ] } ], "metadata": { "celltoolbar": "Slideshow", "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.1" } }, "nbformat": 4, "nbformat_minor": 0 }