07/18 : [decision tree + scatter plot/linear regression graph]
: with UCI Machine Learnig Repository 센서 데이터
decision tree(결정 트리)
머신러닝 알고리즘 중에서 직관적으로 이해하기 쉬운 것으로 "다중 분류"에 많이 사용한다.
스스로 데이터 안에서 if/else 기반으로 규칙을 찾아 학습하여 트리 구조의 분류를 규칙으로 만든다.
규칙을 나타내는 "decision node"와 분류가 결정된 클래스 값이 표시된 "leaf node"로 구성된다.
최대한 하위 그룹에 있는 데이터의 균일도를 최대로 높이기 위해 규칙을 찾아서 규칙노드를 구성하는데, 이를 구성하는 방법으로
정보 이득 지수와 지니 계수가 있다.
import imblearn
import graphviz
import pandas as pd
import numpy as np
df = pd.read_csv('/content/drive/MyDrive/dataset/airline_passenger_satisfaction.csv')
df.shape
df.head(2)
정보 이득 지수
엔트로피 개념을 기반으로 하며, 엔트로피는 혼잡도의 반대 개념 정도로 이해하면 좋다. (물리의 엔트로피 개념과 같다)
데이터 집합에 다른 데이터가 섞여서 균일도가 떨어지면 혼잡도가 높아져 엔트로피가 떨어지고, 그 반대면 엔트로피가 올라간다.
정보 이득 지수는 혼잡도가 줄어들어 얻게 되는 이득을 의미하는 것으로 '1 - 엔트로피'로 계산한다.
결정 트리는 정보 이득 지수가 높은 피처를 분할 기준으로 사용한다.
지니 계수
데이터의 순도를 나타내기 위해 사용하는 용어 이므로, 지니 계수가 높으면 순도가 낮은 데이터 집합을 의미하며 ( 이는 균일도가 낮은 집합을 이야기한다), 지니계수가 0이면 완전 순수한 데이터 집합을 의미한다.
07/18 : [K-means clustering + graph]
: with customer analysis for Target marketing
비지도 학습
비지도학습은 훈련 데이터에 타깃값이 주어지지 않은 상태에서 학습을 수행하는 방식이다.
훈련 데이터를 학습하여 모델을 형성하면서 유사한 특성을 가지는 데이터를 클러스터로 구성한다.
그리고 새로운 데이터의 특성을 분석하여 해당하는 클러스터를 예측한다.
군집화 (Clustering)
데이터를 클러스토로 구성하는 작업이다. 군집에 대한 정보를 가지고 있지 않기 때문에, 비지도 학습을 수행하여 데이터 간의 관계를 분석하고 이에 따라 유사한 데이터를 군집으로 구성한다.
K-means clustering (K-평균 군집화)
k개의 클러스터를 구성하기 위한 것으로 k개의 중심점을 임의의 위치로 잡고 중심점을 기준으로 가까이 있는 데이터를 확인한 뒤, 그들과의 거리(유클리디안 거리의 제곱)의 평균 지점으로 중심점을 이동하는 방식이다.
이동한 위치에서 가까이 있는 데이터를 다시 확인하고 그들의 평균 지점으로 중심점을 이동하는 과정을 반복한다.
더 이상 이동이 발생하지 않는 위치를 찾으면 각 중심점을 기준으로 k개의 클러스터가 구성된다.
클러스터를 나타내는 k개를 직접 지정해야한는 문제가 있어서 가장 적합한 k를 찾아야한다.
적합한 클러스터 개수 k를 찾는 방법은 엘보 방법이나 실루엣 방법이 있다.
엘보 방법 (elbow method)
클러스터의 중심점과 클러스터 내의 데이터 거리 차이의 제곱값 합을 왜곡(distortion)이라 한다. 엘보 방법인 이러한 왜곡을 이용해서 최적의 k를 찾는데, 클러스터의 개수 k의 변화에 따른 왜곡의 변화를 그래프로 그려보면 그래프가 꺽이는 지점인 엘보가 나타난다.
그 지점의 k가 최적의 k로 선정된다.
실루엣 분석 (silhouette analysis)
클러스터 내에 있는 데이터가 얼마나 조밀하게 모여있는지를 측정하는 그래프 도구이다. 데이터 i가 해당 클러스터 내의 데이터와 얼마나 가까운가를 나타내는 클러스터 응집력(cluster coherence) a(i)와 가장 가까운 다른 클러스터 내의 데이터와 얼마나 떨어져있는가를 나타내는 클러스터 분리도 b(i)를 이용하여 실루엣 계수s(i)를 계산한다.
실루엣 계수는 -1 에서 1 사이의 값을 가지며, 1에 가까울 수록 좋은 군집화를 이야기한다
주성분 분석 (Principal Component Analysis)
여러 개의 독립변수들을 잘 설명해 줄 수 있는 주된 성분을 추출하는 기법이다.
주성분 분석을 통해 전체 변수들의 핵심 특성만 선별하기 때문에 독립변수(차원)의 수를 줄일 수 있다.
여러 개의 변수들이 소수의 특정한 소수의 변수들로 축약되도록 가공하는 것이다.
변수를 줄이면 모형을 간단하게 만들고 분석 결과를 보다 효과적으로 해석할 수 있다.
변수의 수를 축약하면서 정보의 손실을 최소화하고자 할 때 사용된다.
분산을 최대한 보존하는 축을 통해 차원을 축소하는 것이 핵심 요소라고 하는데, 여기서 분산을 최대한 보존한다는 데이터들을 특정 차원으로 사영했을 때 분산이 가장 큰 곳이 제 1 주성분이 된다는 것이다. (정보 손실이 가장 작다)
차원을 감소시키는 방법은
1. 변수 선택을 통해 비교적 불필요하거나 유의성이 낮은 변수를 제거하는 방법
2. 변수들의 잠재적인 성분을 추출하여 차원을 줄이는 방법
이 있다.
from sklearn.decomposition import PCA
pca = PCA(n_components = 2) # 보통 2 ~ 3을 사용한다.
X2D = pca.fit_transform(X)
KNN (K-Nearest Neighbors) 모델 (분류, 예측 모델)
KNN은 간단하게 이야기해서 주변에 있는 K개의 친구와 나랑 같다고 이야기하는 것과 같은 모델이다. 보통 친구는 10명을 넘지 않는다. 그리고 K를 정말 "잘" 설정해야한다.
주변에 있는 친구와 같다고 주장하면 되니까 (KNN은 공간상 이웃해 있는 관측치의 범주나 값을 통해 결과를 출력한다) 학습 데이터의 별도 학습 과정이 없다.
미리 저장되어 있는 학습 데이터에다가 예측 데이터를 대조함으로써 직접 결과가 도출되므로 메모리 기반 학습(Memory-based learning)이라고 할 수 있다.
train 데이터가 있는데, 거기에 test 데이터를 엎는 격이다. (scatter plot 생각하면 좋음) 거기서 이제 가장 가까운 곳에 있는 데이터와 같은 분류로 분류한다.
최적의 K를 고르는 방법
1. 교차검증
오분류율이 가장 낮아지는 K수를 탐색하는 것임.
2. K-fold 교차검증
교차 검증 보다 정확한 교차검증을 여러 번 수행하는 것이 좋음
3. 이진분류의 경우
홀수의 K를 설정하는 것이 좋다.
4. 거리에 가중치를 준다.
유클리드 거리의 역수에 가중치를 준다. (거리를 사용하면 데이터 정규화와 표준화가 반드시 필요하다.)
5. 명목형 독립변수의 경우에는 0과 1로 더미 변수 처리를 하여 사용한다.
6. 종속변수가 연속형 변수인 경우에는 회귀 나무처럼 KNN 회귀를 한다. => 이웃한 K개 관측치의 평균값을 계산하면 된다. K는 3 이상으로 하는 것이 좋다.
단점
데이터의 지역구조에 민감한 특성을 가지고 있다. 분포가 편향 되어 있을 경우 예측 데이터들의 관측치가 강하게 쏠리는 단점이 있다.
다루기는 쉽지만, 데이터가 너무 많거나, 변수가 100개 이상이면 연산량 증가가 너무 커서 좋지 않다.
혼동 행렬
로지스틱 회귀분석, 의사결정나무의 분류모델은 기본적으로 오분류율을 따져서 모델의 성능을 평가한다.
각 데이터들이 1이라고 예측한 확률을 기준으로 내림차순 정렬을 하고 어느 정도로 데이터들을 자를지 임계값(threshold)으로 정한다.
보통 임계값은 0.5로 잡고 그 위를 1로 그 밑을 0으로 분류한다.
혼동행렬의 개념은 진양성(예측값이 1일때 진짜 1), 위양성(예측값이 1일때 진짜 0), 진음성(예측값이 0일 때 진짜 0), 위음성(예측값이 0일 때 진짜1)이다.
혼동행렬을 통해 확인할 수 있는 모델 평가 기준
정확도 : 올바르게 분류한 비중 (TP + TN)/(TP + TN + FP + FN)
오분류율 : 정확도의 반대 개념 (FP + FN)/(TP + TN + FP + FN)
정밀도 : 1로 예측하여 분류한 관측치 중 실제값도 1인 비중 TP / (TP + FP)
민감도(재현율) : 실제 1인 관측치 중 실제 1인 관측치 중에서 모델이 정확히 1로 예측한 비중 TP/(TP+NF)
특이도 : 0으로 예측하여 분류한 관측치 중에서 실제값도 0인 비중을 의미한다. TN/(TN+FP)
F-score : 정밀도와 민감도를 동시에 고려한 분류모델의 성능 평가 기준 , 0~1 사이 값을 가진다.
정밀도와 민감도의 조화평균을 기준값으로 사용하여 객관적으로 분류모델 평가
향상도 테이블과 향상도 차트 그리고 향상도 곡선
ROC 곡선과 AUC
혼동행렬을 활용한 분류모델 평가지표 중 ROC(Receiver operator Cjaracterostoc) 곡선과 AUC(Area Under Curve)가 있다.
객관적으로 모델 비교 및 평가를 할 수 있고, 임계값인 threshold를 결정하는 데에 유용하게 사용할 수 있다.
ROC 곡선의 접근방식은 향상도 테이블과 유사하다.
threshold를 1에서 0으로 조정해가면서 민감도(True accept rate)와 1-특이도(False accept rate) 값을 2차원 좌표를 찍어서 그래프를 그린다.
민감도는 실제 전체 1중에 1로 분리된 비율 (이건 2018년도 6월 LFIA 키트 37번 문제 진양성으로 생각하면 편하다.)
모델 임계값이 1에서 0으로 내려갈수록 증가한다. 그러다가 임계값이 0이 될 때 민감도는 100%가 된다. 전체 데이터를 1로 분류하기 떄문이다.
1 - 특이도는 실제 0값 중에서 1로 잘못 분류된 비율이므로 최소화 해야하는 값이다.(이것도 2018년 6월 LFIA 키트 37번 문제 위양성을 생각하자.)
임계값이 낮아질수록 전부 1로 분류하기 때문에 증가한다.
요약하면 임계값이 낮아지면 민감도와 1-특이도(진양성과 위양성)는 모두 증가한다. 이 개념들은 ROC 곡선을 이해하기 위한 곡선인데,
ROC곡선은 민감도가 y축, 1-특이도가 x축으로 하는 좌표 평면 위에서 Base line을 기준으로 모델에 따른 민감도와 1-특이도를 나타내는 점을 찍고 이를 이은 곡선을 이야기한다.
당연하게도 빨간색 그래프가 가장 좋은 모델이다. 코로나 자가 검사를 했는데 걸렸든 안걸렸든 양성/음성이 50% 확률로 나온다면... 과연 코로나 자가 검사가 의미가 있을까?
하지만, 당연하게도 그래프만으로 객관적인 성능 평가를 하기 어렵다. 그래서 우리는 ROC 곡선을 수치적으로 계산한 AUC 기준을 활용한다.
AUROC(Area Under a Roc Curve ) 즉, ROC 곡선 아래 면적 크기를 구한 것이다. 면적의 크기는 최대 1이며 당연하게도 면적의 크키가 클수록 우수한 모델이다.
AUC 결과값 | 판단 |
0.9 ~ 1.0 | Excellent |
0.8 ~ 0.9 | Good |
0.7 ~ 0.8 | Normal |
0.6 ~ 0.7 | Poor |
0.5 ~ 0.6 | Fail |
그러면 ROC모델로 임계값을 설정하는 방법은 ROC 곡선의 좌표를 테이블 형태로 출력한 다음, 가장 이상적인 민감도와 1-특이도 조합에 해당되는 임계값 지점을 찾으면 된다.
선형회귀분석과 Elastic Net(예측 모델)
"종속변수 Y의 값에 영향을 주는 독립변수 X들의 조건을 고려하여 구한 평균값"
회귀분석은 각 독립변수의 평균을 통해 종속변수를 예측한다. 해당 객체가 소속된 집단의 X(독립변수) 평균값을 통해 Y(종속변수) 값을 예측하는 것이 기본적인 원리다. 오차를 최소화하여 그은 선이 회귀선.
따라서 회귀선은 직선이기 때문에 , 회귀선은 절편, 기울기, 오차항으로 이루어진다.
오차항은 독립변수가 종속변수에 주는 영향력을 제외한 변화량을 뜻한다. 회귀분석은 오차항을 최소화하는 절편과 기울기를 구하는 것이다.
- 최적의 회귀선을 구하는 방법은 "모형적합"이라고 부르며, 회귀선과 각 관측치간 거리를 최소화하는 것이다.
예측치와 관측치들 간의 수직 거리(오차)의 제곱합을 최소로 하는 직선을 회귀선으로 사용하는 방법은 최소제곱추정법(Least squares estimation)
정확히 이야기하면, 잔차제곱합(RRS을 최소화하는 알파와 베타 값을 찾는 것을 의미한다. -> 최대 우도 방법하고 관련있다는데 이건 좀 찾아봐야할듯
단순 회귀 분석(단변량 회귀분석) : 독립변수가 하나인 회귀 분석
다중 회귀 분석(다변량 회귀 분석) : 독립변수가 2개 이상인 회귀 분석
==> 회귀 분석은 독립변수 간에 상관관계가 없어야하기 때문에 다중 회귀 분석을 할 때는 다중공선성 검사를 해야한다.
독립 변수 간의 상관관계가 없는 상태를 독립성이 있다고 이야기한다.
상관분석, VIF(Variance Inflation)값 확인 등을 통해 다중공선성을 확인하고 차원축소나 변수 가공을 통해 이를 방지할 수 있다.
'미래내일일경험 - 빅리더(23.06~23.12) > 교육' 카테고리의 다른 글
[파이썬] 리스트, 딕셔너리 시간 복잡도 체감하기 (1) | 2023.07.28 |
---|---|
[스터디챌린지] ICT융합대학 스터디 챌린지 4주차(7/22 ~ 7/28) (0) | 2023.07.27 |
[스터디챌린지] ICT융합대학 스터디 챌린지 2주차(7/8 ~ 7/14) (0) | 2023.07.14 |
[크롤링] 크롤링 정리 (0) | 2023.07.10 |
[스터디챌린지] ICT융합대학 스터디 챌린지 1주차(7/1 ~ 7/7) (0) | 2023.07.07 |