# !pip install xgboostimportxgboostasxgbimporttimestart=time.time()xgb_dtrain=xgb.DMatrix(data=train_x,label=train_y)# 학습 데이터를 XGBoost 모델에 맞게 변환xgb_dtest=xgb.DMatrix(data=test_x)# 평가 데이터를 XGBoost 모델에 맞게 변환xgb_param={'max_depth':10,# 트리 깊이'learning_rate':0.01,# Step Size'n_estimators':100,# Number of trees, 트리 생성 개수'objective':'multi:softmax',# 목적 함수'num_class':len(set(train_y))+1}# 파라미터 추가, Label must be in [0, num_class) -> num_class보다 1 커야한다.xgb_model=xgb.train(params=xgb_param,dtrain=xgb_dtrain)# 학습 진행xgb_model_predict=xgb_model.predict(xgb_dtest)# 평가 데이터 예측print("Accuracy: %.2f"%(accuracy_score(test_y,xgb_model_predict)*100),"%")# 정확도 % 계산print("Time: %.2f"%(time.time()-start),"seconds")# 코드 실행 시간 계산
# !pip install lightgbmimportlightgbmaslgbstart=time.time()# 시작 시간 지정lgb_dtrain=lgb.Dataset(data=train_x,label=train_y)# 학습 데이터를 LightGBM 모델에 맞게 변환lgb_param={'max_depth':10,# 트리 깊이'learning_rate':0.01,# Step Size'n_estimators':100,# Number of trees, 트리 생성 개수'objective':'multiclass',# 목적 함수'num_class':len(set(train_y))+1}# 파라미터 추가, Label must be in [0, num_class) -> num_class보다 1 커야한다.lgb_model=lgb.train(params=lgb_param,train_set=lgb_dtrain)# 학습 진행lgb_model_predict=np.argmax(lgb_model.predict(test_x),axis=1)# 평가 데이터 예측, Softmax의 결과값 중 가장 큰 값의 Label로 예측print("Accuracy: %.2f"%(accuracy_score(test_y,lgb_model_predict)*100),"%")# 정확도 % 계산print("Time: %.2f"%(time.time()-start),"seconds")# 코드 실행 시간 계산
Accuracy: 73.57 %
Time: 4.08 seconds
3. Catboost
1
2
3
4
5
6
7
8
9
10
11
12
13
# !pip install catboostimportcatboostascbstart=time.time()# 시작 시간 지정cb_dtrain=cb.Pool(data=train_x,label=train_y)# 학습 데이터를 Catboost 모델에 맞게 변환cb_param={'max_depth':10,# 트리 깊이'learning_rate':0.01,# Step Size'n_estimators':100,# Number of trees, 트리 생성 개수'eval_metric':'Accuracy',# 평가 척도'loss_function':'MultiClass'}# 손실 함수, 목적 함수cb_model=cb.train(pool=cb_dtrain,params=cb_param)# 학습 진행cb_model_predict=np.argmax(cb_model.predict(test_x),axis=1)+1# 평가 데이터 예측, Softmax의 결과값 중 가장 큰 값의 Label로 예측, 인덱스의 순서를 맞추기 위해 +1print("Accuracy: %.2f"%(accuracy_score(test_y,cb_model_predict)*100),"%")# 정확도 % 계산print("Time: %.2f"%(time.time()-start),"seconds")# 코드 실행 시간 계산
importrandombagging_predict_result=[]# 빈 리스트 생성for_inrange(10):data_index=[data_indexfordata_indexinrange(train_x.shape[0])]# 학습 데이터의 인덱스를 리스트로 변환random_data_index=np.random.choice(data_index,train_x.shape[0])# 데이터의 1/10 크기만큼 랜덤 샘플링, // 는 소수점을 무시하기 위함print(len(set(random_data_index)))lgb_dtrain=lgb.Dataset(data=train_x.iloc[random_data_index,],label=train_y.iloc[random_data_index,])# 학습 데이터를 LightGBM 모델에 맞게 변환lgb_param={'max_depth':14,# 트리 깊이'learning_rate':0.01,# Step Size'n_estimators':500,# Number of trees, 트리 생성 개수'objective':'regression'}# 파라미터 추가, Label must be in [0, num_class) -> num_class보다 1 커야한다.lgb_model=lgb.train(params=lgb_param,train_set=lgb_dtrain)# 학습 진행predict1=lgb_model.predict(test_x)# 테스트 데이터 예측bagging_predict_result.append(predict1)# 반복문이 실행되기 전 빈 리스트에 결과 값 저장
9615
C:\ProgramData\Anaconda3\lib\site-packages\lightgbm\engine.py:118: UserWarning: Found `n_estimators` in params. Will use it instead of argument
warnings.warn("Found `{}` in params. Will use it instead of argument".format(alias))
9602
9601
9563
9468
9509
9601
9571
9480
9640
# Bagging을 바탕으로 예측한 결과값에 대한 평균을 계산bagging_predict=[]# 빈 리스트 생성forlst2_indexinrange(test_x.shape[0]):# 테스트 데이터 개수만큼의 반복temp_predict=[]# 임시 빈 리스트 생성 (반복문 내 결과값 저장)forlst_indexinrange(len(bagging_predict_result)):# Bagging 결과 리스트 반복temp_predict.append(bagging_predict_result[lst_index][lst2_index])# 각 Bagging 결과 예측한 값 중 같은 인덱스를 리스트에 저장bagging_predict.append(np.mean(temp_predict))# 해당 인덱스의 30개의 결과값에 대한 평균을 최종 리스트에 추가
1
2
3
# 예측한 결과값들의 평균을 계산하여 실제 테스트 데이트의 타겟변수와 비교하여 성능 평가print("RMSE: {}".format(sqrt(mean_squared_error(bagging_predict,test_y))))# RMSE