일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 리눅스
- 매틀랩
- SQL
- Blog
- 한빛미디어서평단
- 텐서플로
- Linux
- 블로그
- 파이썬
- 통계학
- 시각화
- 월간결산
- 서평
- Python
- matplotlib
- 티스토리
- Visualization
- Tistory
- 파이썬 시각화
- 한빛미디어
- tensorflow
- 딥러닝
- 독후감
- Ga
- 서평단
- Pandas
- Google Analytics
- MATLAB
- python visualization
- MySQL
- Today
- Total
pbj0812의 코딩 일기
[통계학] CART 구현을 통한 TITANIC 변수 선택 본문
0. 목표
- CART 알고리즘을 통해 우선적으로 분류되어야 할 변수를 선택
1. 이론
1) Gini Index를 통해 데이터의 대상 속성을 얼마나 잘못 분류할지를 계산
2) 각 속성별(male, female, 1, 2, 3...)로 계산하여 최소값을 계산
2. 데이터셋 준비
1) kaggle 타이타닉 데이터 셋 다운로드(링크에서 titanic 검색)
2) 데이터 전처리
import pandas as pd
data = pd.read_csv('E:/수료증/인프런/밑바닥부터시작하는머신러닝/train.csv')
data2 = data[['Pclass', 'Sex', 'Survived']]
- Pclass : 승선권 클래스(1, 2, 3)
- Sex : 성별(male, female)
- Survived : 생존여부(1 : 생존, 0 : 사망) => Y 값
3. 시나리오
1) Sex
(1) male : 1 - Gini(male) - Gini(others)
(2) female : 1 - Gini(female) - Gini(others)
2) Pclass
(1) 1 : 1 - Gini(1) - Gini(others)
(2) 2 : 1 - Gini(2) - Gini(others)
(3) 3 : 1 - Gini(3) - Gini(others)
4. 구현 (2. 2)에 이어서)
- 함수의 입력값으로는 데이터셋, 변수, y값
- selection 에는 변수별 하위 분류값(male or female, 1 or 2 or 3)들을 저장하고, selection2 에는 정답의 분류값(0, 1)을 저장
- 저장 공간을 두 개로 나누어서 한 곳에는 해당 속성이 들어가고 다른 한 곳에는 나머지 속성이 들어가도록 설계
def CART(dataset, attribute, y):
selection = list(set(dataset[attribute]))
selection2 = list(set(dataset[y]))
dataset_len = len(dataset)
# 분류
for i in selection:
result = []
result2 = []
data1 = dataset[dataset[attribute] == i]
data2 = dataset[dataset[attribute] != i]
data1_len = len(data1)
data2_len = len(data2)
# 생존 분류
for j in selection2:
data1_2 = data1[data1[y] == j]
data2_2 = data2[data2[y] == j]
data1_2_len = len(data1_2)
data2_2_len = len(data2_2)
result.append((data1_2_len/data1_len)**2)
result2.append((data2_2_len/data2_len)**2)
Gini1 = 1 - sum(result)
Gini2 = 1 - sum(result2)
final = (data1_len/dataset_len)*Gini1 + (data2_len/dataset_len)*Gini2
print(i, ' : ', final)
5. 결과
1) Sex
- male : 0.3333650003885904
- female : 0.3333650003885904
2) Pclass
- 1 : 0.4343484224965707
- 2 : 0.4688911437727624
- 3 : 0.4238751054331502
CART(data2, 'Sex', 'Survived')
CART(data2, 'Pclass', 'Survived')
=> 가장 낮은 값인 male or female을 기준으로 나누는게 Pclass의 결과보다 좋은 결과를 얻을 가능성이 높음
6. 참고
'Science > 통계학' 카테고리의 다른 글
[통계학] Python으로 피어슨의 상관계수 구현하기 (0) | 2020.08.14 |
---|---|
[통계학] 변동계수(CV) 구현하기 (0) | 2020.08.13 |
[통계학] ID3 구현을 통한 변수 선택 (0) | 2020.03.09 |
[통계학] 엔트로피(Entropy) (0) | 2020.03.08 |
[통계학] 평균의 종류 (0) | 2019.07.24 |