| \n", + " | sepal length (cm) | \n", + "sepal width (cm) | \n", + "petal length (cm) | \n", + "petal width (cm) | \n", + "class | \n", + "
|---|---|---|---|---|---|
| 145 | \n", + "6.7 | \n", + "3.0 | \n", + "5.2 | \n", + "2.3 | \n", + "2 | \n", + "
| 146 | \n", + "6.3 | \n", + "2.5 | \n", + "5.0 | \n", + "1.9 | \n", + "2 | \n", + "
| 147 | \n", + "6.5 | \n", + "3.0 | \n", + "5.2 | \n", + "2.0 | \n", + "2 | \n", + "
| 148 | \n", + "6.2 | \n", + "3.4 | \n", + "5.4 | \n", + "2.3 | \n", + "2 | \n", + "
| 149 | \n", + "5.9 | \n", + "3.0 | \n", + "5.1 | \n", + "1.8 | \n", + "2 | \n", + "
| \n", + " | sepal length (cm) | \n", + "sepal width (cm) | \n", + "petal length (cm) | \n", + "petal width (cm) | \n", + "class | \n", + "
|---|---|---|---|---|---|
| 0 | \n", + "False | \n", + "False | \n", + "False | \n", + "False | \n", + "False | \n", + "
| 1 | \n", + "False | \n", + "False | \n", + "False | \n", + "False | \n", + "False | \n", + "
| 2 | \n", + "False | \n", + "False | \n", + "False | \n", + "False | \n", + "False | \n", + "
| 3 | \n", + "False | \n", + "False | \n", + "False | \n", + "False | \n", + "False | \n", + "
| 4 | \n", + "False | \n", + "False | \n", + "False | \n", + "False | \n", + "False | \n", + "
| \n", + " | sepal length (cm) | \n", + "sepal width (cm) | \n", + "petal length (cm) | \n", + "petal width (cm) | \n", + "class | \n", + "
|---|---|---|---|---|---|
| count | \n", + "150.000000 | \n", + "150.000000 | \n", + "150.000000 | \n", + "150.000000 | \n", + "150.000000 | \n", + "
| mean | \n", + "5.843333 | \n", + "3.057333 | \n", + "3.758000 | \n", + "1.199333 | \n", + "1.000000 | \n", + "
| std | \n", + "0.828066 | \n", + "0.435866 | \n", + "1.765298 | \n", + "0.762238 | \n", + "0.819232 | \n", + "
| min | \n", + "4.300000 | \n", + "2.000000 | \n", + "1.000000 | \n", + "0.100000 | \n", + "0.000000 | \n", + "
| 25% | \n", + "5.100000 | \n", + "2.800000 | \n", + "1.600000 | \n", + "0.300000 | \n", + "0.000000 | \n", + "
| 50% | \n", + "5.800000 | \n", + "3.000000 | \n", + "4.350000 | \n", + "1.300000 | \n", + "1.000000 | \n", + "
| 75% | \n", + "6.400000 | \n", + "3.300000 | \n", + "5.100000 | \n", + "1.800000 | \n", + "2.000000 | \n", + "
| max | \n", + "7.900000 | \n", + "4.400000 | \n", + "6.900000 | \n", + "2.500000 | \n", + "2.000000 | \n", + "
| \n", + " | crab | \n", + "sat | \n", + "y | \n", + "weight | \n", + "width | \n", + "color | \n", + "spine | \n", + "
|---|---|---|---|---|---|---|---|
| 168 | \n", + "169 | \n", + "3 | \n", + "1 | \n", + "2.750 | \n", + "26.1 | \n", + "3 | \n", + "3 | \n", + "
| 169 | \n", + "170 | \n", + "4 | \n", + "1 | \n", + "3.275 | \n", + "29.0 | \n", + "3 | \n", + "3 | \n", + "
| 170 | \n", + "171 | \n", + "0 | \n", + "0 | \n", + "2.625 | \n", + "28.0 | \n", + "1 | \n", + "1 | \n", + "
| 171 | \n", + "172 | \n", + "0 | \n", + "0 | \n", + "2.625 | \n", + "27.0 | \n", + "4 | \n", + "3 | \n", + "
| 172 | \n", + "173 | \n", + "0 | \n", + "0 | \n", + "2.000 | \n", + "24.5 | \n", + "2 | \n", + "2 | \n", + "
| Dep. Variable: | y | R-squared (uncentered): | 0.827 | \n", + "
|---|---|---|---|
| Model: | OLS | Adj. R-squared (uncentered): | 0.823 | \n", + "
| Method: | Least Squares | F-statistic: | 214.8 | \n", + "
| Date: | Sun, 01 May 2022 | Prob (F-statistic): | 3.39e-51 | \n", + "
| Time: | 12:25:41 | Log-Likelihood: | -42.203 | \n", + "
| No. Observations: | 138 | AIC: | 90.41 | \n", + "
| Df Residuals: | 135 | BIC: | 99.19 | \n", + "
| Df Model: | 3 | \n", + " | |
| Covariance Type: | nonrobust | \n", + " |
| coef | std err | t | P>|t| | [0.025 | 0.975] | \n", + "|
|---|---|---|---|---|---|---|
| sat | 0.1028 | 0.010 | 10.381 | 0.000 | 0.083 | 0.122 | \n", + "
| weight | 0.0755 | 0.071 | 1.063 | 0.290 | -0.065 | 0.216 | \n", + "
| width | 0.0051 | 0.006 | 0.802 | 0.424 | -0.008 | 0.018 | \n", + "
| Omnibus: | 13.620 | Durbin-Watson: | 1.891 | \n", + "
|---|---|---|---|
| Prob(Omnibus): | 0.001 | Jarque-Bera (JB): | 5.772 | \n", + "
| Skew: | 0.247 | Prob(JB): | 0.0558 | \n", + "
| Kurtosis: | 2.128 | Cond. No. | 67.4 | \n", + "
| \n", + " | 컬럼 | \n", + "VIF | \n", + "
|---|---|---|
| 0 | \n", + "sat | \n", + "2.313813 | \n", + "
| 1 | \n", + "weight | \n", + "39.859206 | \n", + "
| 2 | \n", + "width | \n", + "35.791751 | \n", + "
| Dep. Variable: | y | R-squared (uncentered): | 0.822 | \n", + "
|---|---|---|---|
| Model: | OLS | Adj. R-squared (uncentered): | 0.818 | \n", + "
| Method: | Least Squares | F-statistic: | 208.4 | \n", + "
| Date: | Sun, 01 May 2022 | Prob (F-statistic): | 1.85e-50 | \n", + "
| Time: | 12:41:40 | Log-Likelihood: | -43.939 | \n", + "
| No. Observations: | 138 | AIC: | 93.88 | \n", + "
| Df Residuals: | 135 | BIC: | 102.7 | \n", + "
| Df Model: | 3 | \n", + " | |
| Covariance Type: | nonrobust | \n", + " |
| coef | std err | t | P>|t| | [0.025 | 0.975] | \n", + "|
|---|---|---|---|---|---|---|
| x1 | 1.5318 | 0.151 | 10.157 | 0.000 | 1.234 | 1.830 | \n", + "
| x2 | -0.0417 | 0.423 | -0.099 | 0.922 | -0.878 | 0.795 | \n", + "
| x3 | 0.7329 | 0.311 | 2.358 | 0.020 | 0.118 | 1.348 | \n", + "
| Omnibus: | 2.864 | Durbin-Watson: | 1.824 | \n", + "
|---|---|---|---|
| Prob(Omnibus): | 0.239 | Jarque-Bera (JB): | 2.467 | \n", + "
| Skew: | 0.222 | Prob(JB): | 0.291 | \n", + "
| Kurtosis: | 2.519 | Cond. No. | 11.2 | \n", + "
| \n", + " | 컬럼 | \n", + "VIF | \n", + "
|---|---|---|
| 0 | \n", + "x1 | \n", + "2.325643 | \n", + "
| 1 | \n", + "x2 | \n", + "25.897343 | \n", + "
| 2 | \n", + "x3 | \n", + "24.825742 | \n", + "
| \n", + " | sepal_length | \n", + "sepal_width | \n", + "petal_length | \n", + "petal_width | \n", + "target | \n", + "
|---|---|---|---|---|---|
| 145 | \n", + "6.7 | \n", + "3.0 | \n", + "5.2 | \n", + "2.3 | \n", + "2 | \n", + "
| 146 | \n", + "6.3 | \n", + "2.5 | \n", + "5.0 | \n", + "1.9 | \n", + "2 | \n", + "
| 147 | \n", + "6.5 | \n", + "3.0 | \n", + "5.2 | \n", + "2.0 | \n", + "2 | \n", + "
| 148 | \n", + "6.2 | \n", + "3.4 | \n", + "5.4 | \n", + "2.3 | \n", + "2 | \n", + "
| 149 | \n", + "5.9 | \n", + "3.0 | \n", + "5.1 | \n", + "1.8 | \n", + "2 | \n", + "
| \n", + " | PCA_1 | \n", + "PCA_2 | \n", + "target | \n", + "
|---|---|---|---|
| 0 | \n", + "-0.630703 | \n", + "0.107578 | \n", + "0 | \n", + "
| 1 | \n", + "-0.622905 | \n", + "-0.104260 | \n", + "0 | \n", + "
| 2 | \n", + "-0.669520 | \n", + "-0.051417 | \n", + "0 | \n", + "
| \n", + " | 0 | \n", + "1 | \n", + "2 | \n", + "3 | \n", + "4 | \n", + "5 | \n", + "6 | \n", + "7 | \n", + "8 | \n", + "9 | \n", + "
|---|---|---|---|---|---|---|---|---|---|---|
| 30 | \n", + "1.0 | \n", + "0.0 | \n", + "2.000 | \n", + "23.1 | \n", + "0.0 | \n", + "0.0 | \n", + "0.0 | \n", + "4.000000 | \n", + "46.2000 | \n", + "533.61 | \n", + "
| 31 | \n", + "1.0 | \n", + "4.0 | \n", + "1.950 | \n", + "24.7 | \n", + "16.0 | \n", + "7.8 | \n", + "98.8 | \n", + "3.802500 | \n", + "48.1650 | \n", + "610.09 | \n", + "
| 32 | \n", + "1.0 | \n", + "4.0 | \n", + "3.025 | \n", + "29.5 | \n", + "16.0 | \n", + "12.1 | \n", + "118.0 | \n", + "9.150625 | \n", + "89.2375 | \n", + "870.25 | \n", + "
| 33 | \n", + "1.0 | \n", + "0.0 | \n", + "2.100 | \n", + "23.8 | \n", + "0.0 | \n", + "0.0 | \n", + "0.0 | \n", + "4.410000 | \n", + "49.9800 | \n", + "566.44 | \n", + "
| 34 | \n", + "1.0 | \n", + "1.0 | \n", + "2.800 | \n", + "29.0 | \n", + "1.0 | \n", + "2.8 | \n", + "29.0 | \n", + "7.840000 | \n", + "81.2000 | \n", + "841.00 | \n", + "
| \n", + " | category | \n", + "data | \n", + "
|---|---|---|
| 39997 | \n", + "2 | \n", + "무서운데 지켜야 할게 있어요 도와주세요. 안녕하세요 . 한부모엄마 입니다.\\n양육비... | \n", + "
| 39998 | \n", + "2 | \n", + "교복에 고정식 이름표를 달게 하는 것을 금지해 주세요.. 교복에 이름표를 박아놓아... | \n", + "
| 39999 | \n", + "0 | \n", + "합의성관계 가능 나이연령을 올리십시오. 제가 형법공부를하다가 문제를풀고있는데\\n금지... | \n", + "
-
-### learning rate(학습률)
-
-[경사하강법](https://velog.io/@sasganamabeer/AI-Gradient-Descent%EA%B2%BD%EC%82%AC%ED%95%98%EA%B0%95%EB%B2%95)
-
-> 경사하강법(Gradient Descent)은 1차 근삿값 발견용 **최적화 알고리즘**이다. 기본 개념은 함수의 기울기(경사)를 구하고 경사의 절댓값이 낮은 쪽으로 계속 이동시켜 극값에 이를 때까지 반복시키는 것이다.
-
-- 취솟값을 구하기 위해 미분계수 계산 과정을 컴퓨터로 구현하는 것보다, **경사하강법을 구현하는 것이 훨씬 쉬움**
-
-- 데이터의 양이 매우 큰 경우 경사하강법과 같은 순차적인 방법이 **계산량 측면에서 훨씬 효율적**
-
-- **공식**
-
- - 경사하강법은 **함수의 기울기(=gradient)를 이용해서 함수의 최소값 일 때의 x값을 찾기 위한 방법**이다. 기울기가 양수인 경우는 *x* 값이 증가할수록 함수 값도 증가하고, 반대로 음수인 경우에는 *x* 값이 증가할수록 함수 값이 감소한다. 그리고 기울기 값이 크다, 기울기가 가파르다는 것은 최소값으로부터 거리가 멀다는 뜻이다.
-
- .assets/image-20220502230520657.png)
-
- 기울기가 양수면 x를 음의 방향으로, 기울기가 음수면 x를 양의 방향으로 x를 이동시킨다.
-
- .assets/image-20220502230748658.png)
-
- 미분 계수(=기울기=gradient)는 극소값에 가까워질수록 값이 작아진다. 따라서, **이동거리에는 미분 계수와 비례하는 값을 이용**한다. 그럼 극소값에서 멀 때는 많이 이동하고, 극소값에 가까울 때는 조금씩 이동할 수 있다.
-
- .assets/image-20220502230822164.png)
-
- > .assets/image-20220502230848119.png)
-
-
-
-- 경사하강법 알고리즘은 기울기에 learning rate 또는 step size라고 불리는 스칼라를 곱해서 다음지점을 결정한다.
-
- .assets/image-20220502193613401.png)
-
-learning rate(step size)이 크면 데이터가 무질서하게 이탈해서 최저점에 수렴하지 못하고 learning rate(step size)가 작으면 학습시간이 오래걸려서 최저점에 도달하지 못한다. 적절할 값을 설정해줘야한다. [최종 학습시에는 0.05 이하의 값을 사용하여 모형 성능 향상에 초점을 맞추고, 하이퍼파라미터 튜닝시에는 0.1이상의 값을 사용하여 학습속도를 높이는 것이 좋다.](https://psystat.tistory.com/131)
-
-**gamma**
-
-- gain - gamma < 0 이면 해당 분기점은 없어진다.
-
-- gamma 값에 따라 분할할지 말지 정할 수도 있음
-- https://gwoolab.tistory.com/31
-
-**[lambda, alpha](https://wooono.tistory.com/221)**
-
-- **L1 Regularization** 과 **L2 Regularization** 모두 **Overfitting(과적합)** 을 막기 위해 사용
-- L1 Regularization은 가중치 업데이트 시, 가중치의 크기에 상관 없이 상수값을 빼면서 진행
-- L2 Regularization은 가중치 업데이트 시, 가중치의 크기가 직접적인 영향을 미침
-- 다만, L1 Regularization은 아래 그림처럼 미분 불가능한 점이 있기 때문에 Gradient-base learning 에는 주의가 필요
-
-- 따라서, L2는 L1 보다 가중치 규제에 좀 더 효과적
-
-
-
-## Light GBM 모델 튜닝
-
-.assets/다운로드 (1).jpg)
-
-**min_child_samples**
-
-- **min_child_samples** 파라미터는 최종 결정 클래스인 Leaf Node가 되기 위해서 최소한으로 필요한 **데이터 개체의 수**를 의미하며, 과적합을 제어하는 파라미터이다. 이 파라미터의 최적값은 훈련 데이터의 개수와 **num_leaves**에 의해 결정된다. 너무 큰 숫자로 설정하면 under-fitting이 일어날 수 있으며, 아주 큰 데이터셋이라면 적어도 수백~수천 정도로 가정하는 것이 편리하다.
- - **num_leaves** 파라미터는 하나의 트리가 가질 수 있는 최대 리프의 개수인데, 이 개수를 높이면 정확도는 높아지지만 트리의 깊이가 커져 모델의 복잡도가 증가한다는 점에 유의해야 한다.
-
-
-
-## 코드
-
-### XGBoost
-
-```python
-# 튜닝된 파라미터를 바탕으로 test 데이터 셋 예측(실습)
-
-#학습
-xgb_tune =XGBClassifier(gamma = 4.376,max_depth = 3, subsample = 0.9818)
-xgb_tune.fit(X,y)
-
-
-#예측
-pred = xgb_tune.predict(test.drop(columns = ['index'] ))
-
-#정답파일 내보내기
-sub = pd.read_csv('data/sample_submission.csv')
-sub['quality'] = pred
-sub.to_csv('tune_xgb.csv',index = False)
-
-#0.573
-
-# 튜닝된 파라미터를 바탕으로 test 데이터 셋 예측(max_params)
-
-#학습
-xgb_tune =XGBClassifier(gamma = 3.852,max_depth = 2, subsample = 0.8105)
-xgb_tune.fit(X,y)
-
-
-#예측
-pred = xgb_tune.predict(test.drop(columns = ['index'] ))
-
-#정답파일 내보내기
-sub = pd.read_csv('data/sample_submission.csv')
-sub['quality'] = pred
-sub.to_csv('tune_xgb_lwt.csv',index = False)
-
-#0.567
-```
-
-
-
-### light gbm
-
-```python
-max_params = BO_lgbm.max['params']
-
-max_params['max_depth'] = float(max_params['max_depth'])
-max_params['n_estimators'] = float(max_params['n_estimators'])
-max_params['subsample'] = float(max_params['subsample'])
-print(max_params)
-# {'max_depth': 2.5563135018997007, 'n_estimators': 90.90085037727735, 'subsample': 0.989309171116382}
-
-
-# 튜닝된 파라미터를 바탕으로 test 데이터 셋 예측(실습내용)
-
-#학습
-lgbm_tune =LGBMClassifier(n_estimators = 43 ,max_depth = 3, subsample = 1)
-lgbm_tune.fit(X,y)
-
-
-#예측
-pred = lgbm_tune.predict(test.drop(columns = ['index'] ))
-
-#정답파일 내보내기
-sub = pd.read_csv('data/sample_submission.csv')
-sub['quality'] = pred
-sub.to_csv('tune_lgbm.csv',index = False)
-# 0.57199
-
-# 튜닝된 파라미터를 바탕으로 test 데이터 셋 예측(max_params적용)
-
-#학습
-lgbm_tune =LGBMClassifier(n_estimators = 91 ,max_depth = 3, subsample = 1)
-lgbm_tune.fit(X,y)
-
-
-#예측
-pred = lgbm_tune.predict(test.drop(columns = ['index'] ))
-
-#정답파일 내보내기
-sub = pd.read_csv('data/sample_submission.csv')
-sub['quality'] = pred
-sub.to_csv('tune_lgbm_lwt.csv',index = False)
-# 0.57699
-```
-
-
-
-# voting classifier
-
-```python
-# 모델 정의 (튜닝된 파라미터로)(실습)
-LGBM = LGBMClassifier(max_depth = 3,n_estimators=60, subsample = 0.8229)
-XGB = XGBClassifier(gamma = 4.376, max_depth = 3, subsample = 0.9818)
-RF = RandomForestClassifier(max_depth = 3, n_estimators = 35) # float값이 안들어가서 몇개는 반올림 해줌
-
-# VotingClassifier 정의
-VC = VotingClassifier(estimators=[('rf',RF),('xgb',XGB),('lgbm',LGBM)],voting = 'soft')
-# 0.555
-
-# 모델 정의 (튜닝된 파라미터로)(max_params적용))
-LGBM = LGBMClassifier(max_depth = 3,n_estimators=100, subsample = 1)
-XGB = XGBClassifier(gamma = 4, max_depth = 1, subsample = 1)
-RF = RandomForestClassifier(max_depth = 3, n_estimators = 100)
-
-# VotingClassifier 정의
-VC = VotingClassifier(estimators=[('rf',RF),('xgb',XGB),('lgbm',LGBM)],voting = 'soft')
-# 0.556
-
-# 0.001차이로 max_params가 높음
-```
-
-
-
-
-
-
-
+Bayesian Optimization 을 이용해 모델을 튜닝
+
+현재까지 얻어진 모델의 파라미터와 추가적인 실험 정보를 통해 **데이터가 주어 졌을 때 모델의 성능이 가장 좋을 확률이 높은 파라미터를 찾아냅니다.**
+
+
+
+# 모델 튜닝
+
+## XGBoost 모델 튜닝
+
+
+
+### learning rate(학습률)
+
+[경사하강법](https://velog.io/@sasganamabeer/AI-Gradient-Descent%EA%B2%BD%EC%82%AC%ED%95%98%EA%B0%95%EB%B2%95)
+
+> 경사하강법(Gradient Descent)은 1차 근삿값 발견용 **최적화 알고리즘**이다. 기본 개념은 함수의 기울기(경사)를 구하고 경사의 절댓값이 낮은 쪽으로 계속 이동시켜 극값에 이를 때까지 반복시키는 것이다.
+
+- 취솟값을 구하기 위해 미분계수 계산 과정을 컴퓨터로 구현하는 것보다, **경사하강법을 구현하는 것이 훨씬 쉬움**
+
+- 데이터의 양이 매우 큰 경우 경사하강법과 같은 순차적인 방법이 **계산량 측면에서 훨씬 효율적**
+
+- **공식**
+
+ - 경사하강법은 **함수의 기울기(=gradient)를 이용해서 함수의 최소값 일 때의 x값을 찾기 위한 방법**이다. 기울기가 양수인 경우는 *x* 값이 증가할수록 함수 값도 증가하고, 반대로 음수인 경우에는 *x* 값이 증가할수록 함수 값이 감소한다. 그리고 기울기 값이 크다, 기울기가 가파르다는 것은 최소값으로부터 거리가 멀다는 뜻이다.
+
+ .assets/image-20220502230520657.png)
+
+ 기울기가 양수면 x를 음의 방향으로, 기울기가 음수면 x를 양의 방향으로 x를 이동시킨다.
+
+ .assets/image-20220502230748658.png)
+
+ 미분 계수(=기울기=gradient)는 극소값에 가까워질수록 값이 작아진다. 따라서, **이동거리에는 미분 계수와 비례하는 값을 이용**한다. 그럼 극소값에서 멀 때는 많이 이동하고, 극소값에 가까울 때는 조금씩 이동할 수 있다.
+
+ .assets/image-20220502230822164.png)
+
+ > .assets/image-20220502230848119.png)
+
+
+
+- 경사하강법 알고리즘은 기울기에 learning rate 또는 step size라고 불리는 스칼라를 곱해서 다음지점을 결정한다.
+
+ .assets/image-20220502193613401.png)
+
+learning rate(step size)이 크면 데이터가 무질서하게 이탈해서 최저점에 수렴하지 못하고 learning rate(step size)가 작으면 학습시간이 오래걸려서 최저점에 도달하지 못한다. 적절할 값을 설정해줘야한다. [최종 학습시에는 0.05 이하의 값을 사용하여 모형 성능 향상에 초점을 맞추고, 하이퍼파라미터 튜닝시에는 0.1이상의 값을 사용하여 학습속도를 높이는 것이 좋다.](https://psystat.tistory.com/131)
+
+**gamma**
+
+- gain - gamma < 0 이면 해당 분기점은 없어진다.
+
+- gamma 값에 따라 분할할지 말지 정할 수도 있음
+- https://gwoolab.tistory.com/31
+
+**[lambda, alpha](https://wooono.tistory.com/221)**
+
+- **L1 Regularization** 과 **L2 Regularization** 모두 **Overfitting(과적합)** 을 막기 위해 사용
+- L1 Regularization은 가중치 업데이트 시, 가중치의 크기에 상관 없이 상수값을 빼면서 진행
+- L2 Regularization은 가중치 업데이트 시, 가중치의 크기가 직접적인 영향을 미침
+- 다만, L1 Regularization은 아래 그림처럼 미분 불가능한 점이 있기 때문에 Gradient-base learning 에는 주의가 필요
+
+- 따라서, L2는 L1 보다 가중치 규제에 좀 더 효과적
+
+
+
+## Light GBM 모델 튜닝
+
+
+
+**min_child_samples**
+
+- **min_child_samples** 파라미터는 최종 결정 클래스인 Leaf Node가 되기 위해서 최소한으로 필요한 **데이터 개체의 수**를 의미하며, 과적합을 제어하는 파라미터이다. 이 파라미터의 최적값은 훈련 데이터의 개수와 **num_leaves**에 의해 결정된다. 너무 큰 숫자로 설정하면 under-fitting이 일어날 수 있으며, 아주 큰 데이터셋이라면 적어도 수백~수천 정도로 가정하는 것이 편리하다.
+ - **num_leaves** 파라미터는 하나의 트리가 가질 수 있는 최대 리프의 개수인데, 이 개수를 높이면 정확도는 높아지지만 트리의 깊이가 커져 모델의 복잡도가 증가한다는 점에 유의해야 한다.
+
+
+
+## 코드
+
+### XGBoost
+
+```python
+# 튜닝된 파라미터를 바탕으로 test 데이터 셋 예측(실습)
+
+#학습
+xgb_tune =XGBClassifier(gamma = 4.376,max_depth = 3, subsample = 0.9818)
+xgb_tune.fit(X,y)
+
+
+#예측
+pred = xgb_tune.predict(test.drop(columns = ['index'] ))
+
+#정답파일 내보내기
+sub = pd.read_csv('data/sample_submission.csv')
+sub['quality'] = pred
+sub.to_csv('tune_xgb.csv',index = False)
+
+#0.573
+
+# 튜닝된 파라미터를 바탕으로 test 데이터 셋 예측(max_params)
+
+#학습
+xgb_tune =XGBClassifier(gamma = 3.852,max_depth = 2, subsample = 0.8105)
+xgb_tune.fit(X,y)
+
+
+#예측
+pred = xgb_tune.predict(test.drop(columns = ['index'] ))
+
+#정답파일 내보내기
+sub = pd.read_csv('data/sample_submission.csv')
+sub['quality'] = pred
+sub.to_csv('tune_xgb_lwt.csv',index = False)
+
+#0.567
+```
+
+
+
+### light gbm
+
+```python
+max_params = BO_lgbm.max['params']
+
+max_params['max_depth'] = float(max_params['max_depth'])
+max_params['n_estimators'] = float(max_params['n_estimators'])
+max_params['subsample'] = float(max_params['subsample'])
+print(max_params)
+# {'max_depth': 2.5563135018997007, 'n_estimators': 90.90085037727735, 'subsample': 0.989309171116382}
+
+
+# 튜닝된 파라미터를 바탕으로 test 데이터 셋 예측(실습내용)
+
+#학습
+lgbm_tune =LGBMClassifier(n_estimators = 43 ,max_depth = 3, subsample = 1)
+lgbm_tune.fit(X,y)
+
+
+#예측
+pred = lgbm_tune.predict(test.drop(columns = ['index'] ))
+
+#정답파일 내보내기
+sub = pd.read_csv('data/sample_submission.csv')
+sub['quality'] = pred
+sub.to_csv('tune_lgbm.csv',index = False)
+# 0.57199
+
+# 튜닝된 파라미터를 바탕으로 test 데이터 셋 예측(max_params적용)
+
+#학습
+lgbm_tune =LGBMClassifier(n_estimators = 91 ,max_depth = 3, subsample = 1)
+lgbm_tune.fit(X,y)
+
+
+#예측
+pred = lgbm_tune.predict(test.drop(columns = ['index'] ))
+
+#정답파일 내보내기
+sub = pd.read_csv('data/sample_submission.csv')
+sub['quality'] = pred
+sub.to_csv('tune_lgbm_lwt.csv',index = False)
+# 0.57699
+```
+
+
+
+# voting classifier
+
+```python
+# 모델 정의 (튜닝된 파라미터로)(실습)
+LGBM = LGBMClassifier(max_depth = 3,n_estimators=60, subsample = 0.8229)
+XGB = XGBClassifier(gamma = 4.376, max_depth = 3, subsample = 0.9818)
+RF = RandomForestClassifier(max_depth = 3, n_estimators = 35) # float값이 안들어가서 몇개는 반올림 해줌
+
+# VotingClassifier 정의
+VC = VotingClassifier(estimators=[('rf',RF),('xgb',XGB),('lgbm',LGBM)],voting = 'soft')
+# 0.555
+
+# 모델 정의 (튜닝된 파라미터로)(max_params적용))
+LGBM = LGBMClassifier(max_depth = 3,n_estimators=100, subsample = 1)
+XGB = XGBClassifier(gamma = 4, max_depth = 1, subsample = 1)
+RF = RandomForestClassifier(max_depth = 3, n_estimators = 100)
+
+# VotingClassifier 정의
+VC = VotingClassifier(estimators=[('rf',RF),('xgb',XGB),('lgbm',LGBM)],voting = 'soft')
+# 0.556
+
+# 0.001차이로 max_params가 높음
+```
+
+
+
+
+
+
+