{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"svd-reduction.ipynb","provenance":[],"collapsed_sections":[],"authorship_tag":"ABX9TyMWPHSlJVSaQBnCuwkCI4WT"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","metadata":{"id":"o_xCmCVJSPtU"},"source":["# SVDによる次元削減の例\n","- 全体の流れ\n","  - [iris dataset](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html)を準備。\n","  - SVDで特異値分解し、3次元に圧縮。\n","  - 比較対象としてPCAで第3主成分まで使うものを用意。\n","  - LogisticRegressionで分類学習。学習・テスト用のデータセット分割は省略。"]},{"cell_type":"code","metadata":{"id":"2m8ZkYmJLTPn","executionInfo":{"status":"ok","timestamp":1623303319003,"user_tz":-540,"elapsed":713,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}}},"source":["import numpy as np\n","import matplotlib.pyplot as plt\n","from mpl_toolkits.mplot3d import Axes3D\n","from sklearn import datasets\n","from sklearn import linear_model\n","from sklearn import decomposition\n"],"execution_count":1,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"QxRIhxcKaUGV"},"source":["## データセット準備"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"STBtnixmLjnr","executionInfo":{"status":"ok","timestamp":1623303319004,"user_tz":-540,"elapsed":28,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"d116fe96-bff4-4a94-e96e-114ede9246d2"},"source":["iris = datasets.load_iris()\n","X = iris.data\n","y = iris.target\n","\n","print(X.shape)\n","print(X[0])\n","print(len(y))\n","print(y)"],"execution_count":2,"outputs":[{"output_type":"stream","text":["(150, 4)\n","[5.1 3.5 1.4 0.2]\n","150\n","[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"," 0 0 0 0 0 0 0 0 0 0 0 0 0 1 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 1 1 1 2 2 2 2 2 2 2 2 2 2 2\n"," 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n"," 2 2]\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"1YhAgV_7aXb9"},"source":["## SVDによる特異値分解"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"lpOLgKCWL_c1","executionInfo":{"status":"ok","timestamp":1623303319004,"user_tz":-540,"elapsed":26,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"3d59bc8c-a100-4057-a59e-eabe886af998"},"source":["U, s, Vt = np.linalg.svd(X)\n","print(U.shape, s.shape, Vt.shape)"],"execution_count":3,"outputs":[{"output_type":"stream","text":["(150, 150) (4,) (4, 4)\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"PT-gf66WMLjo","executionInfo":{"status":"ok","timestamp":1623303319005,"user_tz":-540,"elapsed":22,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"fb35ac9e-373b-422b-a24f-4e70b40eb039"},"source":["print(U[0])"],"execution_count":4,"outputs":[{"output_type":"stream","text":["[-0.06161685  0.12961144  0.0021386   0.00163819 -0.07300798 -0.08134924\n"," -0.06909558 -0.07113949 -0.06195164 -0.06612256 -0.0779418  -0.06706386\n"," -0.06552289 -0.06185789 -0.08830269 -0.08976151 -0.08609401 -0.07666031\n"," -0.08279348 -0.07649756 -0.07454597 -0.07870518 -0.07197388 -0.07751697\n"," -0.06350528 -0.06858871 -0.07505083 -0.07437007 -0.07521512 -0.06493685\n"," -0.06604042 -0.08201589 -0.07386819 -0.08227844 -0.06867133 -0.07401577\n"," -0.08107661 -0.06901449 -0.06347898 -0.07258421 -0.07640179 -0.06508444\n"," -0.06416128 -0.08048951 -0.07430155 -0.07062043 -0.0727626  -0.06586452\n"," -0.07649708 -0.07198453 -0.09197854 -0.08823139 -0.09036906 -0.07299205\n"," -0.08712533 -0.07165625 -0.0873042  -0.06532195 -0.08381366 -0.07375745\n"," -0.06302969 -0.08388409 -0.07222819 -0.07795265 -0.08122842 -0.09086183\n"," -0.07599136 -0.0698583  -0.08193049 -0.07120772 -0.08509553 -0.08336609\n"," -0.07965387 -0.07251397 -0.08448281 -0.08907596 -0.08653833 -0.09104982\n"," -0.08142908 -0.07518959 -0.07060805 -0.06924548 -0.07732822 -0.0761784\n"," -0.07310193 -0.08568359 -0.08985201 -0.07980502 -0.0756386  -0.07367435\n"," -0.06672195 -0.07947999 -0.07580088 -0.06642552 -0.07342897 -0.07334836\n"," -0.07555598 -0.08159337 -0.07465988 -0.07640103 -0.09482259 -0.08093526\n"," -0.09634801 -0.08036141 -0.09141467 -0.09526824 -0.06927014 -0.08650523\n"," -0.0824033  -0.10766229 -0.09530278 -0.08723118 -0.09675863 -0.08254321\n"," -0.09402024 -0.09913198 -0.08477818 -0.10080471 -0.09688732 -0.07311009\n"," -0.10161079 -0.08330813 -0.09229571 -0.08798247 -0.09396497 -0.08964253\n"," -0.08806509 -0.08611647 -0.08911128 -0.08623509 -0.09252995 -0.10215519\n"," -0.09166004 -0.07830493 -0.06625347 -0.10774146 -0.09735974 -0.08367461\n"," -0.08585795 -0.09973069 -0.10211517 -0.1083868  -0.08093526 -0.09779369\n"," -0.10416003 -0.10397003 -0.08866275 -0.09343429 -0.09573864 -0.08085465]\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"E64zbg_QMpet","executionInfo":{"status":"ok","timestamp":1623303319005,"user_tz":-540,"elapsed":18,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"102883cc-b9dc-4772-88d4-9adba2fa5448"},"source":["print(s)"],"execution_count":5,"outputs":[{"output_type":"stream","text":["[95.95991387 17.76103366  3.46093093  1.88482631]\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"4aiKvvl5MP6x","executionInfo":{"status":"ok","timestamp":1623303319005,"user_tz":-540,"elapsed":14,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"ea9f053a-7598-4ba8-dded-7b721b9709b6"},"source":["# 対角行列に変換\n","sigma = np.zeros((U.shape[1], Vt.shape[0]))\n","for i in range(Vt.shape[0]):\n","  sigma[i, i] = s[i]\n","\n","# 特異値分解によりどのぐらい近似できているかを確認\n","approximation = np.dot(np.dot(U, sigma), Vt)\n","diff = X - approximation\n","print(np.linalg.norm(diff))"],"execution_count":6,"outputs":[{"output_type":"stream","text":["4.409066883547835e-14\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"NIkStuqwMYZy","executionInfo":{"status":"ok","timestamp":1623303319005,"user_tz":-540,"elapsed":10,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"9b01a0fb-5c63-4fad-9ccd-3a05c4c619f6"},"source":["# 特異値分解によりどのぐらい近似できているかを確認\n","np.allclose(X, approximation)"],"execution_count":7,"outputs":[{"output_type":"execute_result","data":{"text/plain":["True"]},"metadata":{"tags":[]},"execution_count":7}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":285},"id":"DTHEYGwrM7Ql","executionInfo":{"status":"ok","timestamp":1623303319305,"user_tz":-540,"elapsed":307,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"89d6195f-7359-44b3-e32b-10daa081a09b"},"source":["# 特異値の大きさを確認\n","plt.plot(s)"],"execution_count":8,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[<matplotlib.lines.Line2D at 0x7f8c1fa0f490>]"]},"metadata":{"tags":[]},"execution_count":8},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"bqxq1Q9cacoW"},"source":["## 行列Uのk=3までを採用（=次元削減）"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"OVKDrz3DNFy0","executionInfo":{"status":"ok","timestamp":1623303319305,"user_tz":-540,"elapsed":17,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"faf57975-66b9-43d4-ec73-50969cbb76fd"},"source":["k = 3\n","new_x = U[:, :k]\n","print(new_x.shape)\n","print(new_x[0])\n","print(X[0])"],"execution_count":9,"outputs":[{"output_type":"stream","text":["(150, 3)\n","[-0.06161685  0.12961144  0.0021386 ]\n","[5.1 3.5 1.4 0.2]\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"gmn4IGXwajj_"},"source":["## 比較対象用の主成分分析による次元削減"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"38x0bBzIY2FP","executionInfo":{"status":"ok","timestamp":1623303319306,"user_tz":-540,"elapsed":13,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"97e09625-d4bf-4108-d7d6-1bbe57c5cc9c"},"source":["pca = decomposition.PCA(n_components=3)\n","pca.fit(X)\n","new_x2 = pca.transform(X)\n","print(new_x2.shape)\n","print(new_x2[0])"],"execution_count":10,"outputs":[{"output_type":"stream","text":["(150, 3)\n","[-2.68412563  0.31939725 -0.02791483]\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"D8t9ODAxapdk"},"source":["## 分類学習の結果"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"3mfb24pzNLeF","executionInfo":{"status":"ok","timestamp":1623303319306,"user_tz":-540,"elapsed":9,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}},"outputId":"3a7c6151-60f8-4e63-cbe8-c76165de47b0"},"source":["scores = []\n","dataset = {\"original\":X, \"SVD(k=3)\":new_x, \"PCA(n=3)\":new_x2}\n","for label, data in dataset.items():\n","  clf = linear_model.LogisticRegression(penalty='l1', solver='liblinear',\n","                                        tol=1e-6, max_iter=int(1e6),\n","                                        warm_start=True,\n","                                        intercept_scaling=10000.)\n","  clf.fit(data, y)\n","  scores.append({label:clf.score(data, y)})\n","\n","print(scores)\n"],"execution_count":11,"outputs":[{"output_type":"stream","text":["[{'original': 0.9533333333333334}, {'SVD(k=3)': 0.8733333333333333}, {'PCA(n=3)': 0.9666666666666667}]\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"B_I3Q2gFWGsP","executionInfo":{"status":"ok","timestamp":1623303319307,"user_tz":-540,"elapsed":6,"user":{"displayName":"TOMA Naruaki","photoUrl":"","userId":"11747312442870110137"}}},"source":[""],"execution_count":11,"outputs":[]}]}