📌 개념 및 코드 복습
✅ index_col
📝데이터 로드할 때, 원하는 열로 인덱스 지정하여 불러오기
✅ to_numeric
📝 데이터 형태를 숫자형태로 변경
pd.to_numeric(df["TotalCharges"],errors='coerce')
📝errors
errors : {'ignore', 'raise', 'coerce'}, default 'raise'
- If 'raise', then invalid parsing will raise an exception.
- If 'coerce', then invalid parsing will be set as NaN.
- If 'ignore', then invalid parsing will return the input.
"raise" : 에러 발생
"coerce" : 결측치로 대체
"ignore" : 입력 값 반환
✅ select_dtypes
📝 데이터타입중 원하는(해당되는) 데이터 타입만 출력
✅ value_counts()
📝 해당 컬럼의 빈도수 구하기
=> normalize=True == 1
사이킷런에서 주목받는 알고리즘 (라이브러리) | |
부스팅계열 알고리즘( 정형 데이터 ) | 신경망 알고리즘 ( 비정형 데이터 ) |
XGBoost, LightGBM, CatBoost | TensorFlow, Keras, PyTorch |
알고리즘 종류 ( 분류 / 회귀 ) | |
회귀 | 분류 |
릿지, 라쏘, 엘라스틱넷 | 로지스틱 회귀 |
분류 / 회귀 에 사용하는 알고리즘 상이함 |
📌 Classification And Regression Tree, CART ( 분류 및 회귀 트리 )
=> 분류와 회귀에 모두 사용
📌 Decision Tree (결정나무 학습법)
" 어떤 항목에 대한 관측값과 목표값을 연결시켜주는 예측 모델"
✅ 결정나무 학습법이란
통계학과 데이터 마이닝, 기계 학습에서 사용하는 예측 모델링 방법 중 하나
분류 트리 | 회귀 트리 |
목표 변수가 범주형 | 목표 변수가 연속(실수)형 |
✅ 결정나무 학습법의 특징
📝 의사 결정 분석에서 결정 트리는 시각적이고 명시적인 방법 => 의사 결정 과정과 결정된 의사 시각화
📝 결과를 해석하고 이해하기 쉬움 . 간략한 설명만으로도 이해 가능
📝 자료를 가공할 필요가 거의 X
=> 다른 기법들의 경우 자료를 정규화 or 임의의 변수를 생성 or 값이 없는 변수를 제거
📝 수치데이터와 범주데이터 모두 적용
📝 다른 기법들은 일반적으로 오직 한 종류의 변수를 갖는 데이터 셋을 분석하는 것에 특화
=> ex) 신경망 학습은 숫자로 표현된 변수만을 다룸
관계식(relation rules)은 오직 명목 변수만을 다룸
📝 화이트박스 모델을 사용
=> 모델에서 주어진 상황이 관측 가능하다면 Boolean 논리를 이용하여 조건에 대해 쉽게 설명
(결과에 대한 설명을 이해하기 어렵기 때문에 인공신경망은 대표적인 블랙 박스 모델 )
📝안정적 . 해당 모델 추리의 기반이 되는 명제가 다소 손상되었더라도 잘 동작
📝대규모의 데이터 셋에서도 잘 동작
=> 방대한 분량의 데이터를 일반적인 컴퓨터 환경에서 합리적인 시간 안에 분석.
✅ 결정나무 학습법의 구조
📝 Root node(루트 노드) : 최상단 노드
📝 Rule Node(규칙 노드) : 레이블 분류하기 위한 노드. 가능한 적은 리프 노드로 높은 예측정확도 가지려면
최대한 많은 데이터셋이 해당 분류에 속하기 규칙 정해져야 함
📝 Leaf node(리프 노드) : 말단 노드 . 여기에 결정된 분류 값 존재
📝 Branch / Sub tree : 새로운 규칙 조건마다 규칙 노드 기반의 서브트리 생성
✅ 주요 파라미터
criterion ( gini , entropy ) | 가지 분할의 품질 측정 |
max_depth | 트리 최대 깊이 |
min_samples_split | 내부 노드 분할 시 필요한 최소 샘플 수 |
min_samples_leaf | 리프 노드에 있어야 하는 최소 샘플 수 |
max_leaf_nodes | 리프 노드 수 의 제한치 |
random_state | 추정기의 무작위성 제어. 실행했을 때 같은 결과 나오도록 함 |
✅ 주요 파라미터 - 하이퍼 파라미터
min_samples_split : 내부 노드 분할 시 필요한 최소 샘플 수 . 과적합 제어에 사용
작게 설정할수록 분할되는 노드 많아져 과적합 가능성 증가
min_samples_leaf : 말단 노드 되기위한 최소한의 샘플 수. 과적합 제어 용도
비대칭적 데이터인 경우 특정 클래스의 데이터 극도로 작을 수 있어 이럴때는 작게 설정
max_features : 최적의 분할 위해 고려할 최대 feature 개수
int로 지정 시 대상 feature 개수, float로 지정 시 전체 feature중 대상 feature 퍼센트
log로 지정 시 전체 feature를 log2()로 설정
max_depth : 트리 최대 깊이 지정. 노드가 가지는 데이터 개수가 min_samples_split 보다 작아질 때까지 계속 분할
깊이 깊어지면 min_samples_split 설정대로 최대로 분할하여 과적합할 수 있으므로 적당한 값 제어
✅ 모델 성능 개선 방법
📝 데이터 분할
📝 데이터 전처리, 결측치 처리
📝 피처 선택, Feature Engineering (스케일링, 변환, 인코딩 등)
📝 Model `파라미터 값'을 변경
✅ 학습 모델의 점수 측정 방법 3가지 ( Accuracy )
1번 방법
(y_test == y_predict).mean()
=> 예측한 값과 실제 정답이 맞는지 확인
=> 예측 정답인 값은 True로 나오게 됨 . True = 1이기 때문에 평균값 내면 정답 비율 구할 수 있음
2번 방법
from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_predict)
3번 방법
model.score(X_test, y_test)
=> 정답 알고 있을 때만 사용가능
✅ 결정나무 시각화 ( Plot Tree )
from sklearn.tree import plot_tree
plt.figure(figsize=(20, 10))
plot_tree(model, filled=True, max_depth=5, fontsize=12,
feature_names=feature_names);
✅ 결정나무 시각화 ( Text )
from sklearn.tree import export_text
print(export_text(model, max_depth = 3, feature_names = feature_names.to_list()))
✅ 피처 중요도
# feature_importances_ 를 통해 모델의 피처 중요도를 추출
model.feature_importances_
'+ α > ▶개인 복습' 카테고리의 다른 글
0302 실습(FinanceDataReader를 통한 여러종목의 수익률 비교) (0) | 2023.02.18 |
---|---|
0301 실습 (Seoul-Covid-19 -EDA) (0) | 2023.02.17 |