{"cells":[{"cell_type":"markdown","metadata":{"id":"XjTc5n2flYUu"},"source":["# 특성 공학과 규제\n","특성이 2개면 선형회귀는 평면을 학습한다\n","\n","농어의 길이 x 농어의 높이를 새로운 특성으로 만든다 기존의 특성을 사용하여 새로운 특성을 뽑아내는것을 특성공학 이라고 한다."]},{"cell_type":"markdown","metadata":{"id":"fZwhQU2l8tI6"},"source":["## 데이터 준비"]},{"cell_type":"code","execution_count":1,"metadata":{"id":"3kjaTfOqEVwY","executionInfo":{"status":"ok","timestamp":1679372973215,"user_tz":-540,"elapsed":1092,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[],"source":["import pandas as pd"]},{"cell_type":"code","execution_count":5,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"8qmTS1RzKRKT","outputId":"070bf23c-6cc0-45a4-8a6c-4a0e1b121ddc","executionInfo":{"status":"ok","timestamp":1679373126662,"user_tz":-540,"elapsed":307,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["[[ 8.4 2.11 1.41]\n"," [13.7 3.53 2. ]\n"," [15. 3.82 2.43]\n"," [16.2 4.59 2.63]\n"," [17.4 4.59 2.94]\n"," [18. 5.22 3.32]\n"," [18.7 5.2 3.12]\n"," [19. 5.64 3.05]\n"," [19.6 5.14 3.04]\n"," [20. 5.08 2.77]\n"," [21. 5.69 3.56]\n"," [21. 5.92 3.31]\n"," [21. 5.69 3.67]\n"," [21.3 6.38 3.53]\n"," [22. 6.11 3.41]\n"," [22. 5.64 3.52]\n"," [22. 6.11 3.52]\n"," [22. 5.88 3.52]\n"," [22. 5.52 4. ]\n"," [22.5 5.86 3.62]\n"," [22.5 6.79 3.62]\n"," [22.7 5.95 3.63]\n"," [23. 5.22 3.63]\n"," [23.5 6.28 3.72]\n"," [24. 7.29 3.72]\n"," [24. 6.38 3.82]\n"," [24.6 6.73 4.17]\n"," [25. 6.44 3.68]\n"," [25.6 6.56 4.24]\n"," [26.5 7.17 4.14]\n"," [27.3 8.32 5.14]\n"," [27.5 7.17 4.34]\n"," [27.5 7.05 4.34]\n"," [27.5 7.28 4.57]\n"," [28. 7.82 4.2 ]\n"," [28.7 7.59 4.64]\n"," [30. 7.62 4.77]\n"," [32.8 10.03 6.02]\n"," [34.5 10.26 6.39]\n"," [35. 11.49 7.8 ]\n"," [36.5 10.88 6.86]\n"," [36. 10.61 6.74]\n"," [37. 10.84 6.26]\n"," [37. 10.57 6.37]\n"," [39. 11.14 7.49]\n"," [39. 11.14 6. ]\n"," [39. 12.43 7.35]\n"," [40. 11.93 7.11]\n"," [40. 11.73 7.22]\n"," [40. 12.38 7.46]\n"," [40. 11.14 6.63]\n"," [42. 12.8 6.87]\n"," [43. 11.93 7.28]\n"," [43. 12.51 7.42]\n"," [43.5 12.6 8.14]\n"," [44. 12.49 7.6 ]]\n"]}],"source":["df = pd.read_csv('https://bit.ly/perch_csv_data')\n","perch_full = df.to_numpy()\n","print(perch_full)"]},{"cell_type":"code","execution_count":6,"metadata":{"id":"PsRC7rvE9SbL","executionInfo":{"status":"ok","timestamp":1679373128241,"user_tz":-540,"elapsed":5,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[],"source":["import numpy as np\n","\n","perch_weight = np.array(\n"," [5.9, 32.0, 40.0, 51.5, 70.0, 100.0, 78.0, 80.0, 85.0, 85.0, \n"," 110.0, 115.0, 125.0, 130.0, 120.0, 120.0, 130.0, 135.0, 110.0, \n"," 130.0, 150.0, 145.0, 150.0, 170.0, 225.0, 145.0, 188.0, 180.0, \n"," 197.0, 218.0, 300.0, 260.0, 265.0, 250.0, 250.0, 300.0, 320.0, \n"," 514.0, 556.0, 840.0, 685.0, 700.0, 700.0, 690.0, 900.0, 650.0, \n"," 820.0, 850.0, 900.0, 1015.0, 820.0, 1100.0, 1000.0, 1100.0, \n"," 1000.0, 1000.0]\n"," )"]},{"cell_type":"code","execution_count":7,"metadata":{"id":"cRKkoWoZ9J0m","executionInfo":{"status":"ok","timestamp":1679373159708,"user_tz":-540,"elapsed":1202,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[],"source":["from sklearn.model_selection import train_test_split\n","#훈련세트와 테스트 세트로 나누기\n","train_input, test_input, train_target, test_target = train_test_split(perch_full, perch_weight, random_state=42)"]},{"cell_type":"markdown","metadata":{"id":"y5uMFE_8V1tx"},"source":["## 사이킷런의 변환기\n","사이킷런에서는 특성을 만들거나 전처리하기위한 다양한 클래스를 제공한다. 사이킷런에서 이런 클래스를 변환기라고한다.\n"]},{"cell_type":"code","execution_count":9,"metadata":{"id":"EclugdXmSs-L","executionInfo":{"status":"ok","timestamp":1679373221748,"user_tz":-540,"elapsed":270,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[],"source":["from sklearn.preprocessing import PolynomialFeatures"]},{"cell_type":"code","execution_count":12,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"V5is7cZhKbPU","outputId":"8eee33b0-e291-4501-bef5-4a53df96384b","executionInfo":{"status":"ok","timestamp":1679373259863,"user_tz":-540,"elapsed":7,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["[[1. 2. 3. 4. 6. 9.]]\n"]}],"source":["poly = PolynomialFeatures()\n","poly.fit([[2, 3]])\n","print(poly.transform([[2, 3]]))"]},{"cell_type":"code","execution_count":13,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"bKXkK0oJc4nG","outputId":"3bbfa12c-c662-4a7f-bf6f-c6c182f14930","executionInfo":{"status":"ok","timestamp":1679373260128,"user_tz":-540,"elapsed":2,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["[[2. 3. 4. 6. 9.]]\n"]}],"source":["poly = PolynomialFeatures(include_bias=False)\n","poly.fit([[2, 3]])\n","print(poly.transform([[2, 3]]))"]},{"cell_type":"code","execution_count":14,"metadata":{"id":"__kE6eJdNZfm","executionInfo":{"status":"ok","timestamp":1679373261138,"user_tz":-540,"elapsed":2,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[],"source":["poly = PolynomialFeatures(include_bias=False)\n","\n","poly.fit(train_input)\n","train_poly = poly.transform(train_input)"]},{"cell_type":"code","execution_count":15,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"2a_lmkKle4kF","outputId":"73f9b42d-c33d-4f1a-95bc-84e031d7de7e","executionInfo":{"status":"ok","timestamp":1679373261889,"user_tz":-540,"elapsed":347,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["(42, 9)\n"]}],"source":["print(train_poly.shape)"]},{"cell_type":"code","execution_count":17,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"X6GUwfXTfKbl","outputId":"4446ab62-619e-45e8-c85e-aefdbe9066ae","executionInfo":{"status":"ok","timestamp":1679373279946,"user_tz":-540,"elapsed":250,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"execute_result","data":{"text/plain":["array(['x0', 'x1', 'x2', 'x0^2', 'x0 x1', 'x0 x2', 'x1^2', 'x1 x2',\n"," 'x2^2'], dtype=object)"]},"metadata":{},"execution_count":17}],"source":["poly.get_feature_names_out() #어떤 특성의 조합으로 만들어졌는지"]},{"cell_type":"code","execution_count":22,"metadata":{"id":"DJMPxe2mgbOo","executionInfo":{"status":"ok","timestamp":1679373380794,"user_tz":-540,"elapsed":278,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[],"source":["test_poly = poly.transform(test_input)"]},{"cell_type":"markdown","metadata":{"id":"PdDAslHzNk3H"},"source":["## 다중 회귀 모델 훈련하기\n","다중 회귀모델을 훈련하는 것은 선형회귀 모델을 훈련하는 것과 같다, 다만 여러개의 특성을 이용하여 선형회귀를 수행한다"]},{"cell_type":"code","execution_count":23,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"E9ygy-8WOvIP","outputId":"889b6ae7-4e3e-45ee-f3fd-79d8eec5db3e","executionInfo":{"status":"ok","timestamp":1679373383269,"user_tz":-540,"elapsed":374,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["0.9903183436982125\n"]}],"source":["from sklearn.linear_model import LinearRegression\n","\n","lr = LinearRegression()\n","lr.fit(train_poly, train_target)\n","print(lr.score(train_poly, train_target))"]},{"cell_type":"code","execution_count":25,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"GKKyfFcAd7zm","outputId":"dc92e8f0-8837-45c4-b8d5-aa433d01e39a","executionInfo":{"status":"ok","timestamp":1679373390094,"user_tz":-540,"elapsed":273,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["0.9714559911594111\n"]}],"source":["print(lr.score(test_poly, test_target))"]},{"cell_type":"code","execution_count":26,"metadata":{"id":"2fDt5mrReMwU","executionInfo":{"status":"ok","timestamp":1679373391849,"user_tz":-540,"elapsed":1,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[],"source":["poly = PolynomialFeatures(degree=5, include_bias=False)\n","\n","poly.fit(train_input)\n","train_poly = poly.transform(train_input)\n","test_poly = poly.transform(test_input)"]},{"cell_type":"code","execution_count":27,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"hcM8R4VHSzR8","outputId":"0a679d51-8087-471b-9fd6-e5b7bd07935a","executionInfo":{"status":"ok","timestamp":1679373394245,"user_tz":-540,"elapsed":7,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["(42, 55)\n"]}],"source":["print(train_poly.shape)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"UffVFVTGP8xj","outputId":"06a6358f-3432-4520-abf7-272ace86cc35"},"outputs":[{"output_type":"stream","name":"stdout","text":["0.9999999999996433\n"]}],"source":["lr.fit(train_poly, train_target)\n","print(lr.score(train_poly, train_target))"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"GtITdlYFg7AY","outputId":"5858264a-117c-4b42-c9d5-5f6e8861cdd1"},"outputs":[{"output_type":"stream","name":"stdout","text":["-144.40579436844948\n"]}],"source":["print(lr.score(test_poly, test_target))\n","#테스트세트에 대한 점수 : 과대적합"]},{"cell_type":"markdown","metadata":{"id":"K2YMPSelQBpO"},"source":["## 규제\n","\n","머신러닝 모델이 훈련세트를 너무 과도하게 학습하지 못하도록 훼방하는것, 선형회귀 모델의 경우 특성에 곱해지는 계수의 크기를 작게 만드는일"]},{"cell_type":"code","execution_count":29,"metadata":{"id":"hCC7wKy3QQrE","executionInfo":{"status":"ok","timestamp":1679373866766,"user_tz":-540,"elapsed":382,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[],"source":["from sklearn.preprocessing import StandardScaler\n","\n","ss = StandardScaler()\n","ss.fit(train_poly)\n","\n","train_scaled = ss.transform(train_poly)\n","test_scaled = ss.transform(test_poly)"]},{"cell_type":"markdown","metadata":{"id":"qyLI7JQsJ7RQ"},"source":["## 릿지\n","\n","계수를 제곱한 값을 기준으로 규제를 적용"]},{"cell_type":"code","execution_count":30,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"LdNuDNQGQipv","outputId":"354fc57a-a40c-466b-ca1d-3fe42e9fcd9a","executionInfo":{"status":"ok","timestamp":1679373873949,"user_tz":-540,"elapsed":371,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["0.9896101671037343\n"]}],"source":["from sklearn.linear_model import Ridge\n","\n","ridge = Ridge()\n","ridge.fit(train_scaled, train_target)\n","print(ridge.score(train_scaled, train_target))"]},{"cell_type":"code","execution_count":31,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"p5mXLecwhdnF","outputId":"344f680e-b2ff-4fdf-bd22-18f013ad9deb","executionInfo":{"status":"ok","timestamp":1679373897371,"user_tz":-540,"elapsed":309,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["0.9790693977615387\n"]}],"source":["print(ridge.score(test_scaled, test_target))"]},{"cell_type":"code","execution_count":32,"metadata":{"id":"wXd3_Kq6hlbM","executionInfo":{"status":"ok","timestamp":1679373899815,"user_tz":-540,"elapsed":283,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[],"source":["import matplotlib.pyplot as plt\n","\n","train_score = []\n","test_score = []"]},{"cell_type":"code","execution_count":39,"metadata":{"id":"9MvIvQOrhfqC","executionInfo":{"status":"ok","timestamp":1679374029398,"user_tz":-540,"elapsed":472,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[],"source":["alpha_list = [0.001, 0.01, 0.1, 1, 10, 100]\n","for alpha in alpha_list:\n"," # 릿지 모델을 만듭니다\n"," ridge = Ridge(alpha=alpha)\n"," # 릿지 모델을 훈련합니다\n"," ridge.fit(train_scaled, train_target)\n"," # 훈련 점수와 테스트 점수를 저장합니다\n"," train_score.append(ridge.score(train_scaled, train_target))\n"," test_score.append(ridge.score(test_scaled, test_target))"]},{"cell_type":"code","execution_count":40,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":279},"id":"95DjrJxlhiow","outputId":"33635ce0-b8c0-4737-c19f-3a8fdaaf5f1d","executionInfo":{"status":"ok","timestamp":1679374030630,"user_tz":-540,"elapsed":10,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}],"source":["plt.plot(np.log10(alpha_list), train_score)\n","plt.plot(np.log10(alpha_list), test_score)\n","plt.xlabel('alpha')\n","plt.ylabel('R^2')\n","plt.show()"]},{"cell_type":"code","execution_count":41,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"5S5vhi-vhjzT","outputId":"20dc7997-cddb-4d3b-d1f1-a2bf29b213e1","executionInfo":{"status":"ok","timestamp":1679374032167,"user_tz":-540,"elapsed":8,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["0.9903815817570367\n","0.9827976465386928\n"]}],"source":["ridge = Ridge(alpha=0.1)\n","ridge.fit(train_scaled, train_target)\n","\n","print(ridge.score(train_scaled, train_target))\n","print(ridge.score(test_scaled, test_target))"]},{"cell_type":"markdown","metadata":{"id":"jUph9pH_KA9_"},"source":["## 라쏘\n","\n","라쏘 모델을 훈련하는 것은 릿지와 매우 비슷하다. 릿지 클래스를 라쏘 클래스로 바꾸는 것이 전부이다."]},{"cell_type":"code","execution_count":42,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Ymu-jmekh0IK","outputId":"d0bc3b62-0b61-43f8-de8c-76b986d8ceb2","executionInfo":{"status":"ok","timestamp":1679374036229,"user_tz":-540,"elapsed":283,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["0.989789897208096\n"]}],"source":["from sklearn.linear_model import Lasso\n","\n","lasso = Lasso()\n","lasso.fit(train_scaled, train_target)\n","print(lasso.score(train_scaled, train_target))"]},{"cell_type":"code","execution_count":43,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"t3jO37UMh2iI","outputId":"67ede17f-57b3-4426-9846-0f2471d1217f","executionInfo":{"status":"ok","timestamp":1679374037793,"user_tz":-540,"elapsed":405,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["0.9800593698421883\n"]}],"source":["print(lasso.score(test_scaled, test_target))"]},{"cell_type":"code","execution_count":44,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"uoL2oJ6Ih4Jw","outputId":"a9254b33-8297-459e-b463-64d516c7a172","scrolled":true,"executionInfo":{"status":"ok","timestamp":1679374038598,"user_tz":-540,"elapsed":407,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.9/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 1.878e+04, tolerance: 5.183e+02\n"," model = cd_fast.enet_coordinate_descent(\n","/usr/local/lib/python3.9/dist-packages/sklearn/linear_model/_coordinate_descent.py:631: ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations, check the scale of the features or consider increasing regularisation. Duality gap: 1.297e+04, tolerance: 5.183e+02\n"," model = cd_fast.enet_coordinate_descent(\n"]}],"source":["train_score = []\n","test_score = []\n","\n","alpha_list = [0.001, 0.01, 0.1, 1, 10, 100]\n","for alpha in alpha_list:\n"," # 라쏘 모델을 만듭니다\n"," lasso = Lasso(alpha=alpha, max_iter=10000)\n"," # 라쏘 모델을 훈련합니다\n"," lasso.fit(train_scaled, train_target)\n"," # 훈련 점수와 테스트 점수를 저장합니다\n"," train_score.append(lasso.score(train_scaled, train_target))\n"," test_score.append(lasso.score(test_scaled, test_target))"]},{"cell_type":"code","execution_count":45,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":279},"id":"7rkH8Dvzh9UI","outputId":"01b6002c-c5fa-4748-be4f-d5c8f350bd0f","executionInfo":{"status":"ok","timestamp":1679374040250,"user_tz":-540,"elapsed":438,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"display_data","data":{"text/plain":["<Figure size 432x288 with 1 Axes>"],"image/png":"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\n"},"metadata":{"needs_background":"light"}}],"source":["plt.plot(np.log10(alpha_list), train_score)\n","plt.plot(np.log10(alpha_list), test_score)\n","plt.xlabel('alpha')\n","plt.ylabel('R^2')\n","plt.show()"]},{"cell_type":"code","execution_count":46,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"t4uFD9Flh_Dw","outputId":"1e81d589-ae24-471a-b3cc-90c3482efdbd","executionInfo":{"status":"ok","timestamp":1679374040768,"user_tz":-540,"elapsed":6,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["0.9888067471131867\n","0.9824470598706695\n"]}],"source":["lasso = Lasso(alpha=10)\n","lasso.fit(train_scaled, train_target)\n","\n","print(lasso.score(train_scaled, train_target))\n","print(lasso.score(test_scaled, test_target))"]},{"cell_type":"code","execution_count":47,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"z_bQc3s8Uoai","outputId":"760890a4-5de7-407d-f737-4930d7596e83","executionInfo":{"status":"ok","timestamp":1679374042134,"user_tz":-540,"elapsed":248,"user":{"displayName":"j j","userId":"09320029400633244007"}}},"outputs":[{"output_type":"stream","name":"stdout","text":["40\n"]}],"source":["print(np.sum(lasso.coef_ == 0))"]},{"cell_type":"code","source":[],"metadata":{"id":"UBdvc3JFfkFO"},"execution_count":null,"outputs":[]}],"metadata":{"colab":{"provenance":[{"file_id":"https://github.com/rickiepark/hg-mldl/blob/master/3-3.ipynb","timestamp":1679323526285}]},"kernelspec":{"display_name":"default:Python","language":"python","name":"conda-env-default-py"},"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.9.10"}},"nbformat":4,"nbformat_minor":0}