본문 바로가기
Machine Learning/분류모델

Decision Tree 실습 [ isnull과 isnan / fillna / groupby( ) / Seaborn : countplot, violinplot / 특성공학 / pd.cut(data, bins, labels) / zip(list1, list2) / cross_val_score / StandardScale / ] [ 타이타닉 데이터 ]

by leehii 2022. 8. 8.

 

문제정의 - 데이터 수집 - 데이터 전처리 - 데이터 탐색 - 머신러닝 선택 - 모델 학습 및 모델 평가

 

배열명.shape 로 numpy 객체 속성 크기 확인하기

(1차원은 데이터 개수, 2차원은 행열 개수)

 

데이터 전처리 : 결측치확인 

data명.info()로 데이터 속성확인

갯수가 다른 컴럼이 있다 : 결측치가 있다!

 

isnull().sum()으로 결측치의 합 확인하기

승선항 결측치 채우기

 

확인할값.value_counts() : 값이 몇개 있는지 세어주는 함수 -->> pandas에서 사용하는 함수(Series, DataFrame) //

배열 형태의 데이터는 numpy의 np.bincount(확인할 값)를 사용해야 함!

 

 

결측값 변경 fillna :  DataFrame에서 결측값을 원하는 값으로 변경하는 함수 

 

 

 

 

fare (요금)  결측치 처리하기

 

 

변수명.corr() 

을 이용하여 상관계수 띄우기 (0에 가까울수록 상관없음. -1이나 1에 가까울수록 상관도 높음)

 

.abs( ) : 절대값 확인

 

sort_values  : 값을 기준으로 정렬

ascending를 이용해서 정렬순서를 변경함

가장 연관도가 높은 컬럼은 Pclass임이 확인됨

 

.unique( )로 중복없이 해당 컬럼을 확인함

 

groupby( ) : 그룹별 집계하기

 

 

확인해보니 해당 결측치는  Pclass 3이며 male임

 

이 값은 12.661633이다

 

 

이 값을 fillna로 채워준다

 

padnas : isnull

numpy : isnan

결측치를 확인하는 함수로 같은 기능

 

 

apply를 이용해서 결측치를 채우는 사용자정의 함수 만들기

 

row, 즉 한줄씩 확인하는데 무엇의 한줄인가? Age 컬럼에서 확인할 것이다 

np.isnan 함수로  결측치가 있을경우 age_mean으로 채운다

 

age_mean은 group2에서 age와 관련깊은 Pclass와 Sex의 값을 mean함수로 평균 내린 값

이 값으로 결측치를 return 한다

 

 

 

 

axis=0 -> 세로방향 작업처리 : 작업결과 = 행 (row)

axis = 1 -> 가로방향 작업처리 : 작업결과 = 열 (column)

 

객실번호 컬럼 내부 결측치 확인

 

fillna로 빈 객실을 M으로 채워주고 c85, c123등으로 이루어진 다른 데이터들고 한글자 데이터로 바꿔줌

 

범주형데이터 : 데이터가 범주로 나뉜 데이터 (성별 / 혈액형 등등)

 

-> Cabin, Pclass, Sex, Embraked 등

 

                     

 

Seaborn : Matplotlib을 기반으로한 시각화 패키지로 그래프를 그리는 기능

hue 옵션으로 bar 구분이 가능하며 라벨을 따로 붙이지않아도 세팅이 됨

 

import seaborn as sns 

으로 임포트후 사용가능하며

 

sns.countplot(data = 확인할 자료, x = '컬럼1', hue = '컬럼명2')
plt.show()

 

범주형 시각화 : countplot

수치형 시각화 : violinplot

 

 

describe로 확인한 정보 min : 0세, max = 80세, 평균 : 29세

ylim으로 y축 범위를 지정해서 다시 시각화함

 

 

특성공학 : 데이터 전처리 과정에서 train에 사용할 좋은 특성을 찾는 것

 

 

*. columns 로 데이터가 가지고있는 컬럼명을 확인함

 

인원수와 관련된 column을 famali_size라는 하나의 컬럼으로 바꿔주기 위해 새로운 컬럼 생성

 

\

pd.cut (나눌 값, bins=?, labels=?)함수를 이용하여

 

1

2~4

~11

의 세가지 범주로 나눠줌

 

양쪽 공백제거 strip() / 왼쪽 공백제거 lstrip() / 오른쪽 공백제거 rstrip()

 

해당 ,제거하는 내용을 apply 함수로 정의

 

unique() 함수로 중복되지않는 값들을 출력한후

*.size()  로 내부 데이터 갯수를 확인함

 

○ ndarray 객체 속성 확인하기

배열명.shape -->> 배열 크기 (1차원은 데이터 개수, 2차원은 행열 개수)
배열명.size -->> 내부 데이터 개수
배열명.ndim -->> 몇 차원인지
배열명.dtype -->> 무슨 타입인지(int등)

 

이중 사용할  호칭만 빼고 나머지는 따로 묶어준다

 

len으로 위에서 확인한 크기와 같은지 비교한다

 

 

이후 value값이 될 리스트를 만들어준후 마찬가지로 len 함수를 이용해서 크기가 같은지 확인

 

딕셔너리와 zip를 이용해서 두 값을 묶어준다

 

 

zip 함수는 이런식으로 두개의 list 값을 묶어준다

 

실 데이터에 적용하기 위해 map함수를 이용해 매핑해준다

 

 

*.info()로 컬럼들을 확인해준다 (혹은 columns)

 

이후 *.drop() 함수로 내용을 삭제하는데

원본 데이터도 변경해야 하므로 inplace = True 속성을 주고

 

컬럼을 삭제하는 것이므로 세로단위 작업이 

 

axis=0 -> 세로방향 작업처리 : 작업결과 = 열 (column)

axis = 1 -> 가로방향 작업처리 : 작업결과 = 행 (row)

이다

 

 

 

생략된 것을 다시 확인해보기

 

문제 = Survived를 제외한 컬럼

답 = Survived 컬럼

 

컬럼을 통채로 지우므로 세로방향 작업 axis = 1

 

 

이제 문자들을 인코딩해줘야 하므로 pd.get_dummies(컬럼명) 을 이용한다

 

set함수로 두 컬럼 비교

test에 없는 컬럼을 0 데이터로 추가해줌

 

 

 

28개의 컬럼으로 같은 형태인것이 확인됨

 

KNN 모델을 위한 KneighborsClassifier

Tree 모델을 위한 DecesionTreeClassifier

모델의 성능을 평가하는 cross_val_score(모델명, X, y, cv=교차검증시킬 횟수)

 

하이퍼 파라미터 max_deph = 5

 

이를 바탕으로 cross_val_score로 모델의 성능을 확인해보니 평균 0.81146~

 

하이퍼 파라미터 값을 조정해서 확인해봄 

 

 

KNN 모델의 하이퍼 파라미터인 n_neighbors

 

 

StandardScale로 스케일 변환하기