XGBoost는 트리 기반 앙상블 러닝에서 가장 각광받고 있는 알고리즘 중 하나이다. 분류에 있어서 일반적으로 다른 머신러닝 알고리즘보다 뛰어난 예측 성능을 보여준다. XGBoost XGBoost는 GBoost(Gradient Boost)에서도 알수 있듯이, GBM(Gradient Boosting Machine)을 기반으로 하고 있다. 기존 GBM에서 단점이었던, 느린 수행시간과 과적합을 제어할 방법의 부재를 XGBoost에서 해결하였다. XGBoost의 장점 빠른 수행시간 : GBM에서 하지 못헀던 병렬 수행 및 다양한 기능들을 통해서 GBM보다 빠르다. 하지만, 상대적으로 GBM보다 빠른 것이지, 전체 머신러닝 알고리즘에서 빠른 편에 속하지는 않는다. 과적합 규제 기능 : XGBoost는 자체에 과적..
머신러닝 검색 결과
이전 포스팅에서 Ensemble Learning(앙상블 러닝)과 관련하여 보팅과 배깅에 대해서 알아보았다. 이번에는 앙상블 러닝 중에서도 가장 많이 사용되는 기법인 부스팅에 대해서 알아볼 것이다. Boosting 부스팅의 유형에는 크게 AdaBoost와 GradientBoost가 있다. AdaBoost보다는 GradientBoost가 더 많이 사용되는 기법이기는 하지만, 부스팅에 대한 기본적인 개념을 이해하기 위해 먼저 AdaBoost에 대해서 알아볼 필요가 있다. AdaBoost 기존에 알아보았던 앙상블 러닝(보팅과 배깅)에서는 여러개의 약한 학습기를 학습시키는 순서가 큰 상관이 없었다. 하지만, 부스팅이라는 기법은 학습기를 '순차적'으로 학습 - 예측해야 한다. 부스팅의 원리는 이전에 잘못 예측한 데..
DataFrame의 [ ] 연산자 넘파이와 DataFrame 간 가장 유의해야 할 연산자가 바로 '[ ]' 연산자이다. 넘파이 - 행의 위치, 열의 위치, 슬라이싱 범위 등을 지정하여 데이터를 가져올 수 있었다. DataFrame - 칼럼만 지정할 수 있는 칼럼 지정 연산자로 이해를 하는 것이 가장 좋다. (추가적으로, 인덱스로 변환 가능한 표현식도 들어갈 수 있다. ) print('단일 칼럼 데이터 추출 : \n', titanic_df['Pclass'].head(3)) print('\n여러 칼럼의 데이터 추출: \n', titanic_df[['Survived', 'Pclass']].head(3)) print('[] 안에 숫자 index는 KeyError 오류 발생 : \n', titanic_df[0])..
앙상블 러닝 앙상블 러닝이란 무엇인가? 간단하게 얘기해서, 여러 약한 학습기들을 모아 학습 / 예측을 실시하고, 그 예측을 결합하여 더욱 정확한 최종 예측을 산출하는 기법을 의미한다. 굳이 왜 이렇게 하는 것일까? 이전에도 얘기했듯이, 모든 머신러닝 알고리즘의 가장 큰 고민 중 하나는 과적합(Overfitting)이다. 이 문제는 ML 알고리즘이 세부적으로 학습을 진행할수록 과적합이 심각해진다. 하지만, 이렇게 하지 않으면 알고리즘의 예측 성능이 떨어지는 과소적합 현상이 발생한다. 그러므로, 과적합이 일어나지 않게 하기 위해 약한 학습기로 학습을 진행하고, 하나가 아닌 여러개의 학습기들의 예측을 결합함으로써 집단 지성처럼 예측 성능이 향상되는 모습을 보인다. 이렇게 과소적합 문제까지 해결한다. 또한, 여..
사이킷런에서는 분류를 위한 결정트리 클래스인 DecisionTreeClassifier와, 회귀를 위한 결정트리클래스인DecisionTreeRegression을 제공한다. 두가지 클래스는 다음의 하이퍼파라미터를 동일하게 제공한다. 대부분의 알고리즘이 직면한 문제가 과적합인 만큼 결정트리의 하이퍼 파라미터 외에도 대부분의 머신러닝 알고리즘들의 하이퍼 파라미터는 과적합을 제어하기 위한 목적으로 설정해준다고 생각을 하면 이해하기 쉽다. 결정트리 하이퍼 파라미터 - min_samples_split : 노드를 분할하기 위한 최소한의 샘플 데이터 수. -> 과적합을 제어하는 데 사용됨. 디폴트는 2이고 작게 설정할수록 분할되는 노드가 많아져서 과적합 가능성 증가 과적합 제어. 1로 설정할 경우 분할되는 노드가 많아져..
생성 DataFrame의 열 생성은 쉽게 만들 수 있다.(판다스의 가장 큰 장점이기도 하다.) 일단 2가지로 나눌 수 있다. 1) 새로 만드는 열의 모든 데이터를 상수로 채워 넣는 경우 이 경우는 주로, 새로운 열(피처)을 만들기 위해서 해주는 경우가 많다. 어려울 것 없이 titanic_df['Age_0'] = 0 #새로 만들어진 'Age_0'열의 모든 value 값들이 0으로 채워진다. titanic_df.head(3) 'Age_0'이라는 열이 존재하는 열이 아니라, 새로 생성할 열의 이름을 대괄호 안에 작은 따옴표로 지정해 준 뒤 등호 오른쪽에 상수를 넣으면 해당 열의 모든 Value 값들이 해당 상수 값으로 채워지는 것을 확인 할 수 있다. 2) 기존에 있는 열(column)을 이용하여 새로운 열..
앙상블러닝 앙상블이라는 단어는 머신러닝을 접하면서도 종종 들어본 경우가 많았을 것이다. 과연 앙상블 러닝은 어떤 기법일까? 기존의 문제점 (과적합) 앞에서 머신러닝을 통해서 예측을 하는 경우에, 과적합(Overfitting)이라는 문제가 항상 존재하고 있다는 것을 언급했었다. 과적합에 대한 원인은, 모델이 데이터를 기반으로 학습을 수행하는 과정에서 너무 세부적인 부분까지 학습데이터에 초점을 맞춘 나머지, 처음 보는 테스트 데이터는 제대로 예측을 못한다는 것이었다. 그렇다고, 너무 큰 단위로 학습을 하고 세부적인 부분을 무시해버린다면, 전체적인 ML 알고리즘 모델의 성능이 떨어지는 문제도 동시에 존재했다. 과적합에 대한 해결책 => 앙상블 러닝 따라서, 사람들은 이 문제를 해결하려고 시도하던 도중, 여러개..
이전 포스팅에서 정밀도와 재현율에 대해서 알아보았다. 또한, 각 경우마다 재현율이나, 정밀도의 상대적 중요성이 다르다는 것 또한 알 수 있었다. 하지만, 정밀도와 재현율만으로 완벽하게 머신러닝 분류 알고리즘을 평가할 수 있을까? 이전 포스팅의 마지막 부분에서 다루었듯이, 정밀도 혹은 재현율 중 하나를 극단적으로 증가시키는 경우, 정밀도-재현율 트레이드오프로 인해 다른 하나의 수치가 급격하게 감소하게 된다. 따라서, 이들 중 하나만 가지고 성능을 측정하는 것은 성능의 전체를 대변할 수 없다. 이런 문제점을 해결하기 위해서 나온 개념이 F1 Score이다. F1 Score F1 Score는 정밀도와 재현율을 결합한 지표이다. 이 지표는 정밀도와 재현율이 어느 한쪽으로 치우치지 않을 떄 상대적으로 높은 값을 ..
이전의 포스팅에서 실생활에 많이 쓰이는 정확도가 왜 머신러닝 분류쪽에서 주요한 성능 평가 지표로 사용될 수 없는지에 대해서 알아보았고, 정밀도와 재현율을 이해하기 위해서 오차 행렬의 각 요소(FN, FP, TN, TP)들이 의미하는 바를 알아보았다. 오차 행렬의 각 요소에 기반하여 정밀도와 재현율을 표현하자면, 정밀도 = TP / (FP + TP) 재현율 = TP / (FN + TP) 이렇게 수식처럼 나타내는 것이 계산을 하는 경우에는 편리하게 사용이 될 수 있으나, 정밀도와 재현율을 처음 접하는 사람들에게는 어떤 의미인지 이해하기 어려울 수 있다. 정밀도 = TP / (FP + TP) 분모를 보면 FP + TP 이다. FP는 Positive로 예측했지만 틀린 것을 의미하고, TP는 Positive로 예..
머신러닝 평가 크게 보았을 때, 머신러닝의 과정 : 데이터 가공 / 변환 -> 모델 학습 / 예측 -> 평가 머신러닝 모델은 회귀와 분류로 나뉘어지는데, 회귀는 주로 실제 값과 예측 값의 오차 평균값에 기반하여 평가가 이루어진다. 분류는 우리가 직관적으로 알 수 있는 정확도(맞은 예측의 수 / 전체 예측의 수)로 평가하기도 하지만, 정확도보다는 다른 평가 지표를 사용하는 경우가 더 많다. 분류의 성능 평가 지표에는 - 정확도(Accuracy) - 오차행렬(Confusion Matrix) - 정밀도(Precision) - 재현율(Recall) - F1 스코어 - ROC AUC 분류에는 2개의 결괏값을 가지는 이진분류와 다수의 결괏값을 가지는 멀티분류가 있는데, 위의 여섯가지 성능 측정 지표는 이진 분류에 ..
최근댓글