22.11.01.
kaggle에서 타이타닉 경진대회에 참여하는 법을 배우며, 드디어 캐글에 대해 알았다!
얼른 여러 모델들도 배우고, 공부도 해서 여러 데이터로 다양한 연습을 해보고 싶다.
그러려면 집중 좀 하자....!!!
그리고 오늘 음 또.. 의사결정나무에 대해 좀 더 자세히 배웠다. 지니 불순도와 정보 엔트로피에 대해 배웠는데, 어렵더라.
그리고 추가 과제 영상을 통해, matplotlib에 대해 이해도를 매우매우 높일 수 있었다. 진짜 짱이다 matplotlib!
회원가입 및 전화번호 인증을 한 후,
캐글 타이타닉
에서 데이터를 다운로드 받았다.
index_col = 'column'
으로 인덱스를 설정해줄 수 있다.독립변수
에 대해 어떠한 기준값
보다 크다 혹은 작다와 같은 방식으로 구성된다. 해당 규칙에 따라 큰 자료들을 하나의 자식노드로, 작은 자료들을 하나의 자식 노드로 나누게 되는 것이다.1에서 각 샘플의 확률의 제곱을 빼준 값이다.
집합에 있는 모든 항목이 동일하다면, 지니 불순도 혹은 지니 계수는 0이 되어 최상의 값이다. 반대로, 여러 항목이 균일하게 분포되어 있다면 최악의 값을 가지게 된다. 결정트리에서 분류규칙을 만족하는 샘플과 만족하지 않는 샘플이 같아 확률이 1/2씩이라면 지니 계수는 0.5로 최악의 값이다.
다만, DecisionTreeClassifier의 entropy는 Shannon의 정보 이득의 엔트로피를 의미한다. 섀넌 엔트로피(혹은 정보 엔트로피)는, 각 데이터에 포함된 정보의 기댓값(평균)이다. 수식으로는 다음과 같이 표현한다. 밑이 2이다.
정보 엔트로피가 크다는 것은, 각 데이터에 포함된 정보의 기댓값이 크다는 것, 사건을 관측했을 때 더 많은 정보를 얻을 수 있다는 것이다. 이는 변수의 불확실성이 높다는 것이며, 결국 확률이 낮음을 의미한다.
이렇게 엔트로피가 불확실성이면서 동시에 평균 정보량을 의미한다는 것을 파악할 수 있다. 사건의 확률이 높으면 발생해도 많은 유용한 정보를 제공하지 않으나, 사건의 발생 확률이 희박하면 발생하였을 때 더 많은 정보를 제공한다. 주사위던지기와 동전던지기의 예시를 생각해보면 된다. 주사위던지기의 엔트로피가 동전던지기보다 크다. 확률이 작고, 정보량이 많다.
모든 사건의 발생 확률이 동일한 경우 비트의 개수는 섀넌 엔트포리와 동일하다. 따라서 분류 문제에서, 클래스의 개수가 2의 N승이라면 최대 엔트로피가 N으로 정해진다. 반면 하나의 사건이 확실하게 일어나는 경우라면 엔트로피는 0 이 된다.
따라서 이 역시, 데이터에 클래스들이 얼마나 섞여있는지에 대한 지표가 된다. 클래스가 하나만 존재한다면 엔트로피는 0으로 최소가 될 것이고, 여러 클래스가 같은 확률로 존재한다면 엔트로피는 N으로 최댓값이 될 것이다.
추가로, 파이썬에서 로그는 np.log2(N)
과 같이 쓸 수 있다.
엔트로피나 지니불순도가 0이 될 때는 보통 샘플이 [1, 0] 이나 [2,0] 처럼 샘플의 개수가 적을 때가 많은데 이렇게 너무 자세하게 학습하면 일반화 하기 어려워져 과적합이 발생할 수 있다. 그러면 아마 min_samples_leaf나 max_depth를 설정하여 조정해줄 수 있겠다!
이외에도 logloss라는 것을 이용할 수 있는데, 이건 나중에 배울 듯! 오늘은 멀티클래스일 경우에는 분류를 특정 클래스의 확률 예측으로 진행할 수 있고, 이때 logloss를 사용한다고만 들었다.
Youtube 강의 혼란한 matplotlib에서 질서찾기 - 이제현
와 matplotlib이 무엇인지 이걸 보고 좀 이해가 되었다.
그리고 matplotlib을 잘 사용하는 법도!
matplotlib을 잘 사용하기 위해선, matplotlib 생태계 전체를 잘 활용해야 한다.
그리고 matplotlib 자체에서도 상태기반 방식이 아닌, 객체지향 방식을 사용해야 한다.
matplotlib은 numpy 기반이다.
그리고 matplotlib을 기반으로 하는 다양한 라이브러리, seaborn, Geopandas, NetworkX, scikit-learn 등이 존재한다.
이 생태계를 잘 활용해야 한다. 결국 생태계 내 어떤 라이브러리이든, matplotlib 객체를 반환한다는 것을 명심하자!
시각화 진행 전, 스타일 설정이 편한 seaborn을 활용해 matplotlib 객체의 스타일 설정을 잘 해준다.
matplotlib으로 화면 구성을 설정한다.
그 후, 생태계 내의 다양한 라이브러리를 사용해 그래프에 사용할 데이터를 얹어준다.!!!!!
이게 핵심이다. 예를 들어, violin plot을 그릴거라면, seaborn으로 간단히 violin plot을 그려준다. 지도를 그릴거라면 Geopandas를 사용한다.
그 후, 결국 반환된 것은 Matplotlib 객체이므로, matplotlib의 객체지향 방식을 사용해 요소 하나하나를 건드려가며 더 설득력있고, 눈에 잘 들어오는 시각화를 진행하면 된다.
객체지향방식은 상태기반방식의 명확한 한계를 극복한다. 요소 하나하나에 직접 접근하여 세부적인 시각화를 진행할 수 있다. 순서대로 진행하기 때문에 여러 반복되는 코드를 작성해야 했던 상태기반 방식과는 달리 여러 객체에 접근하기 위해 반복문을 사용할 수도 있다.
ax.add_artist()를 통해 다양한 보조 도형 역시 추가할 수 있다!
일단 이 정도만 이해 했다. 자세한 사용법도 공부해보면 어느정도 수준까지는 금방 할 수 있지 않을까 싶다! matplotlib으로 이 정도 수준의 시각화를 해낼 수 있다는 것도 놀라웠고, 객체 지향 방식으로 matplotlib을 사용하는 법을 알게 되어 좋았다.
나중에 좀 자세한 시각화를 진행할 일이 있으면, 이 방법을 시도해봐도 좋겠다!
해당 내용은 멋쟁이사자처럼 AI School 오늘코드 박조은 강사님의 자료를 인용하였습니다.
의사결정나무
정보이득