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로 스케일 변환하기 공유하기 게시글 관리 Coding Practice 저작자표시 (새창열림) 'Machine Learning > 분류모델' 카테고리의 다른 글 Random Forest (랜덤 포레스트) Bagging (배깅) 알고리즘 실습 [ GridSerachCV를 이용한 모델 성능 향상 / feature(피처)의 중요도를 확인하는 feature_importances_ ] [ 유방암 데이터 ] (0) 2022.08.09 Ensemble(앙상블) 모델의 개념 [ voting(보팅) / Bagging(배깅) / Boosting(부스팅) ] (0) 2022.08.09 Decision Tree 분류 실습 [ 변수.value_counts( ) 와 np.bincount(변수) / One-hot Encoding과 Label Encoding / graphviz를 이용한 시각화 ] [버섯 데이터] (0) 2022.08.04 Decision Tree의 개념 (0) 2022.08.04 iris 데이터를 활용한 KNN 분류 실습 [ numpy : np.bincount( ) , pandas : .value_counts( ) ] (0) 2022.08.03 관련글 Random Forest (랜덤 포레스트) Bagging (배깅) 알고리즘 실습 [ GridSerachCV를 이용한 모델 성능 향상 / feature(피처)의 중요도를 확인하는 feature_importances_ ] [ 유방암 데이터 ] Ensemble(앙상블) 모델의 개념 [ voting(보팅) / Bagging(배깅) / Boosting(부스팅) ] Decision Tree 분류 실습 [ 변수.value_counts( ) 와 np.bincount(변수) / One-hot Encoding과 Label Encoding / graphviz를 이용한 시각화 ] [버섯 데이터] Decision Tree의 개념