|
1184 | 1184 | "cell_type": "markdown", |
1185 | 1185 | "metadata": {}, |
1186 | 1186 | "source": [ |
1187 | | - "원-핫 인코딩은 수치화된 범주들 사이의 크기 비교를 피하기 위해 더미dummy 특성을 활용한다.\n", |
| 1187 | + "원-핫 인코딩은 수치화된 범주들 사이의 크기 비교를 피하기 위해 **더미**<font size='2'>dummy</font> 특성을 활용한다.\n", |
1188 | 1188 | "예를 들어 `INLAND` 특성값을 길이가 5인 어레이로 만들기 위해\n", |
1189 | 1189 | "원래는 불필요한 네 개의 0을 추가로 활용하였다.\n", |
1190 | | - "이처럼 의미상 필요는 없지만 계산을 위해 어쩔 수 없이 추가된 특성이 더미 특성이다." |
| 1190 | + "\n", |
| 1191 | + "새롭게 생성된 5개의 특성은 다음과 같다.\n", |
| 1192 | + "\n", |
| 1193 | + "```python\n", |
| 1194 | + "['ocean_proximity_<1H OCEAN',\n", |
| 1195 | + "'ocean_proximity_INLAND',\n", |
| 1196 | + "'ocean_proximity_ISLAND',\n", |
| 1197 | + "'ocean_proximity_NEAR BAY',\n", |
| 1198 | + "'ocean_proximity_NEAR OCEAN']\n", |
| 1199 | + "```\n", |
| 1200 | + "\n", |
| 1201 | + "5개 특성은 기존에 주어진 특성 대신 사용되는 특성이라는 의미에서 더미 특성으로 불린다.\n", |
| 1202 | + "여기서는 해안 근접도 특성에 사용된 실제 값을 대변하는 특성으로 사용된다." |
1191 | 1203 | ] |
1192 | 1204 | }, |
1193 | 1205 | { |
|
1207 | 1219 | "cell_type": "markdown", |
1208 | 1220 | "metadata": {}, |
1209 | 1221 | "source": [ |
1210 | | - "<p><div align=\"center\"><img src=\"https://github.com/codingalzi/code-workout-ml/blob/master/images/ch02/one_hot01.png?raw=true\" width=\"600\"></div></p>" |
| 1222 | + "<div align=\"center\">\n", |
| 1223 | + " <img src=\"https://github.com/codingalzi/code-workout-ml/blob/master/images/ch02/one_hot01.png?raw=true\" width=\"700\">\n", |
| 1224 | + "</div>" |
1211 | 1225 | ] |
1212 | 1226 | }, |
1213 | 1227 | { |
|
1329 | 1343 | "데이터셋이 두터운 꼬리 분포를 따르는 경우, \n", |
1330 | 1344 | "즉 히스토그램이 지나치게 한쪽으로 편향된 경우\n", |
1331 | 1345 | "스케일링을 적용하기 전에 먼저\n", |
1332 | | - "로그 함수를 적용하여 어느 정도 좌우 균형이 잡힌 분포로 변환할 것을 권장한다. \n", |
| 1346 | + "로그 함수를 적용하여 어느 정도 좌우 균형이 잡힌 분포로 변환할 것을 권장한다.\n", |
| 1347 | + "좌우 균형이 잘 잡힌 특성들을 활용하면 머신러닝 모델의 훈련이 보다 잘된다.\n", |
1333 | 1348 | "\n", |
1334 | 1349 | "$$\n", |
1335 | 1350 | "\\log(x)\n", |
|
1979 | 1994 | }, |
1980 | 1995 | { |
1981 | 1996 | "cell_type": "markdown", |
1982 | | - "id": "aab2b2b0-2d36-4dc7-9452-93ecebae9816", |
1983 | | - "metadata": { |
1984 | | - "slideshow": { |
1985 | | - "slide_type": "" |
1986 | | - } |
1987 | | - }, |
| 1997 | + "metadata": {}, |
1988 | 1998 | "source": [ |
1989 | | - "훈련셋 준비가 완료된 상황에서 모델을 선택하고 훈련시키는 일이 남아 있다.\n", |
| 1999 | + "`preprocessing`에 의해 변환되는 데이터프레임은 예측기 모델의 훈련에\n", |
| 2000 | + "바로 사용될 수 있다.\n", |
| 2001 | + "즉, 이제 머신러닝 예측기 모델의 훈련셋으로 바로 사용할 수 있다.\n", |
1990 | 2002 | "\n", |
1991 | | - "사이킷런이 제공하는 예측기 모델을 사용하면 훈련은 기본적으로 간단하게 진행된다.\n", |
1992 | | - "여기서는 사이킷런이 제공하는 세 종류의 회귀 모델의 사용법과 결과의 차이를 간단하게 살펴본다.\n", |
1993 | | - "각 모델의 자세한 특징과 상세 설명은 이어지는 장에서 하나씩 다룬다.\n", |
| 2003 | + "하지만 여기서는 데이터 변환과 모델 훈련을 분리해서 진행하는 대신\n", |
| 2004 | + "변환기와 예측기를 하나의 파이프라인으로 묶어\n", |
| 2005 | + "데이터 변환과 모델 훈련을 동시에 진행하는 방법을 선택해서 소개한다.\n", |
1994 | 2006 | "\n", |
1995 | | - "여기서 소개되는 모든 예측기는 앞서 설명한 전처리 과정과 함께 하나의 파이프라인으로 묶여서 활용된다." |
| 2007 | + "`preprocessing`이 가리키는 변환기와 함께 묶여 하나의 파이프라인으로 구성될 예측기로\n", |
| 2008 | + "사이킷런의 회귀 모델 세 개를 활용한다.\n", |
| 2009 | + "각 모델의 자세한 특징과 상세 설명은 이어지는 장에서 하나씩 소개할 예정이며,\n", |
| 2010 | + "여기서는 모델 선택에 따른 성능과 보다 좋은 모델을 훈련시키는 방법을 자세히 소개한다." |
1996 | 2011 | ] |
1997 | 2012 | }, |
1998 | 2013 | { |
|
2092 | 2107 | "\n", |
2093 | 2108 | "`cross_val_score()` 함수는 지정된 모델을 k-겹 교차 검증을 활용하여 훈련과 평가를 동시에 진행한다.\n", |
2094 | 2109 | "교차검증은 다만 모델 평가용도로만 폴드를 구분하여 훈련할 뿐 훈련된 모델 객체 자체를 반환하지는 않는다.\n", |
2095 | | - "예를 들어 아래 코드는 결정트리 모델에 대해 교차 검증을 실행한다." |
| 2110 | + "예를 들어 아래 코드는 결정트리 모델에 대해 교차 검증을 실행한다.\n", |
| 2111 | + "\n", |
| 2112 | + "`cross_val_score()` 함수 호출에 사용된 키워드 인자는 다음과 같다.\n", |
| 2113 | + "\n", |
| 2114 | + "- `scoring=\"neg_mean_squared_error\"` 옵션\n", |
| 2115 | + " - 훈련중인 모델의 성능을 측정하는 **효용함수** 지정\n", |
| 2116 | + " - 모델의 성능 측정값은 높을 수록 좋은 성능으로 평가되기에 회귀 모델의 경우 일반적으로 RMSE의 음숫값을 사용함.\n", |
| 2117 | + "- `cv=10`: 10-겹 교차 검증 진행\n", |
| 2118 | + "\n", |
| 2119 | + "`cross_val_score()` 함수의 반환값은 `scoring=\"neg_mean_squared_error\"` 옵션으로 인해 음수값이다.\n", |
| 2120 | + "따라서 다시 양수로 만들어서 `tree_rmses` 변수에 할당하였다." |
2096 | 2121 | ] |
2097 | 2122 | }, |
2098 | 2123 | { |
|
2108 | 2133 | "```" |
2109 | 2134 | ] |
2110 | 2135 | }, |
2111 | | - { |
2112 | | - "cell_type": "markdown", |
2113 | | - "metadata": {}, |
2114 | | - "source": [ |
2115 | | - "`cross_val_score()` 함수 호출에 사용된 키워드 인자는 다음과 같다.\n", |
2116 | | - "\n", |
2117 | | - "- `scoring=\"neg_mean_squared_error\"` 옵션\n", |
2118 | | - " - 훈련중인 모델의 성능을 측정하는 **효용함수** 지정\n", |
2119 | | - " - 모델의 성능 측정값은 높을 수록 좋은 성능으로 평가되기에 회귀 모델의 경우 일반적으로 RMSE의 음숫값을 사용함.\n", |
2120 | | - "- `cv=10`: 10-겹 교차 검증 진행" |
2121 | | - ] |
2122 | | - }, |
2123 | 2136 | { |
2124 | 2137 | "cell_type": "markdown", |
2125 | 2138 | "metadata": {}, |
|
2141 | 2154 | "\n", |
2142 | 2155 | "| 모델명 | 교차 검증 평균 RMSE | 성능 평가 요약 |\n", |
2143 | 2156 | "| :--- | :--- | :--- |\n", |
2144 | | - "| **선형 회귀 모델** | 약 69,858 | 세 모델 중 가장 높은(나쁜) 오차를 보임 |\n", |
2145 | | - "| **결정트리 회귀 모델** | 약 66,868 | 선형 회귀 모델보다 약간 낫지만 여전히 꽤 높은 오차를 보임 |\n", |
2146 | | - "| **랜덤 포레스트 회귀 모델** | 약 47,019 | 훈련이 다소 오래 걸리지만 세 모델 중 성능이 가장 뛰어남 |" |
| 2157 | + "| **선형 회귀 모델** | 약 7만 | 세 모델 중 가장 높은(나쁜) 오차를 보임 |\n", |
| 2158 | + "| **결정트리 회귀 모델** | 약 6만7천 | 선형 회귀 모델보다 약간 낫지만 여전히 꽤 높은 오차를 보임 |\n", |
| 2159 | + "| **랜덤 포레스트 회귀 모델** | 약 4만7천 | 훈련이 다소 오래 걸리지만 세 모델 중 성능이 가장 뛰어남 |" |
2147 | 2160 | ] |
2148 | 2161 | }, |
2149 | 2162 | { |
|
2245 | 2258 | "랜덤 포레스트 회귀 모델의 하이퍼파라미터 각각의 기능은\n", |
2246 | 2259 | "[scikit-learn: RandomForestRegressor](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html)에서\n", |
2247 | 2260 | "확인할 수 있다.\n", |
| 2261 | + "하지만 각 기능을 이해하기 쉽지 않다.\n", |
| 2262 | + "하이퍼파라미터의 기능과 중요도는 앞으로 하나씩 알아나갈 것이다.\n", |
2248 | 2263 | ":::" |
2249 | 2264 | ] |
2250 | 2265 | }, |
|
0 commit comments