2022. 2. 17. 13:39ㆍAbout Me/독서 로그
- PCA 한계, 주성분 추출 프로세스
- 알고리즘 순서? 왜 사용?
문제
캔 와인을 판매하려는데, 와인 표시가 누락되었다.
알코올 도수, ph값, 당도로 와인 종류(레드와인, 화이트와인)를 구별해보자.
# 1. 로지스틱 회귀
이진 분류 문제이므로 수행
결과 값이 다량의 실수 파라미터라, 설명하기 어렵다.
- 특성 표준화
- 훈련/테스트 점수 확인 → 다항특성 고려
# 2. 결정 트리
이유를 설명하기 쉬우므로 수행 (데이터 표준화 필요X)
- 노드의 데이터 분할 기준= 불순도
- 잎노드에서 가장 많은 클래스로 예측
- 트리 그래프 시각화로 직관적으로 분류 확인
가지치기 (트리의 최대깊이 지정)
불순도
- 지니 불순도순수 노드 : 하나의 class만 있는 노드 (지니 불순도=0)
- 부모 노드와 자식 노드의 불순도 차이(정보 이득)가 크도록, 트리 성장
- 1 - (음성class 비율^2 + 양성class 비율^2)
- 엔트로피 불순도
- 음성class비율 * log2(음성class비율) - 양성class 비율 * log2(양성class비율)
일반적으로 훈련:검증:테스트 = 60:20:20
OOB(out of bag)샘플 : 학습샘플에 포함되지 않고 남은 샘플들
# 교차 검증 (CV)
시간 오래걸림, 적은 데이터로도 훈련 가능 (k-fold cv)
- 90개의 샘플 → 30:30:30로 분할
- 1검증셋(=fold), 2훈련셋으로 모델 훈련
- 돌면서 학습 후, 각 모델 평가
그리드 서치
탐색할 하이퍼파라미터 리스트 → 하이퍼파라미터(모델이 학습X) 튜닝 + CV
랜덤 서치
샘플링할 확률분포 객체 → 값의 범위/간격을 정하여, 하이파라미터 튜닝 + CV
- 균등 분포 : 값을 추출할 때, 균일한 분포로 추출
- ex. '1' 3개, '7' 3개 정도
# 앙상블 학습
정형 데이터에 뛰어난 성과를 내는 알고리즘 (++비정형데이터= 신경망)
랜덤 포레스트
과대적합 방지, 종종 기본 매개변수 설정만으로도 좋은 결과
- 부트스트랩 샘플링 방식 : 중복O 랜덤추출
- 노드 분할 시, 랜덤하게 '일부 특성'을 골라 결정트리 생성 → 예측
- 각 결정트리의 예측으로 최종예측
엑스트라 트리
더 많은 트리 필요, 계산 속도 빠름
- 전체 훈련셋 사용한 결정트리들로 구성
- 노드 분할 시, 랜덤하게 노드 분할
그레이디언트 부스팅 (GB)
좋은 일반화 성능, 훈련시간 오래 걸림
얕은 깊이의 결정트리로, 경사하강법(GD)으로 이전트리의 오차를 보완하는 앙상블 방법
히스토그램 기반 그레이디언트 부스팅
과대적합 잘 억제, GB보다 더 좋은 성능, 가장 인기많음
- 입력특성을 256개의 구간으로 나눔 (→ 빠르게 최적분할 탐색)
- 1구간은 누락된 값을 위해 사용 (→ 결측치 처리할 필요X)
++ Permutation_Importance()= 어떤 특성이 중요한지
특성을 하나씩 랜덤하게 섞어서, 모델성능 변화 관찰 → 특성 중요도 확인
# 비지도학습 (= 군집화 알고리즘)
- 군집화 : 유사한 속성들을 갖는 관측치들을 묶어 몇 개의 군집(cluster)으로 나누는 것
- 군집화 기준
- 군집 내에서는 서로 유사할수록 좋음
- 군집 간의 유사도는 낮을수록 좋음
- 적용 사례: 네이버 뉴스 클러스터링
군집화 수행 시 고려사항
- 어떤 거리척도를 사용하여 군집화? (ex. 유클리디안 거리, 맨하탄 거리 등)
- 어떤 군집화 알고리즘 사용?
- 계층적 군집화(dendrogram 시각화, 사전에 군집수 정의X)
- 분리형 군집화(사전에 군집수 정의) (ex. K-means Clustering (군집중심있음))
- 자기조직화 지도
- 분포 기반 군집화(높은 밀도에)
군집 결과 측정 및 평가
- Silhouette 통계량 (-> 몇 개의 k개가 좋은가?)-1에 가까울수록 전혀 군집X
- 군집 내에 있는 개체들 사이의 평균 거리 중 최솟값
#1. 비슷한 데이터의 평균으로 분류 (sample 히스토그램 시각화)
픽셀 값 분석 → 샘플의 픽셀 평균 or 클래스 별 각 픽셀의 평균
#2. k-means 군집화 알고리즘
클러스터 개수(k)(하이퍼 파라미터)를 사전에 지정해야 함
시간 걸리지만, 결과 만족
서로다른 크기/밀도 잘 군집X, 지역적 패턴 군집 잘 찾지X, 아웃라이어 잘 군집X
- k개의 centroid 선택 (랜덤하게)
- 가장 가까운 centroid를 찾아, 클러스터 샘플로 지정
- 클러스터 속 샘플의 평균값으로, centroid 변경
- (2,3 반복) 점차 가장 가까운 샘플의 중심으로 이동
- 클러스터 중심(centroid) : 평균값. 클러스터 중심에 위치
- inertia : (centroid와 클러스터 속 샘플 사이의 거리)^2의 합—> 엘보우 방법 : 클러스터 개수 증가하면서, 이너셔가 감소 속도가 꺾이는 지점 선택
- 샘플이 얼마나 가깝게 모여있는지
문제
저장공간 부족으로, 사진 용량을 압축하고 싶다.
# 차원 축소
일부 특성을 선택하여 데이터 크기를 줄이는 비지도 학습 작업
불필요한 변수 제거, 시각화 용이, 계산 복잡도 감소
(++ ML에서 차원=특성, 다차원배열에서 차원=배열의 축 개수(ex. 2차원 배열= 행/열))
차원축소 방법
(각각 지도학습, 비지도학습 방법이 있음)
- 변수 선택 (feature selection) : 소수의 예측변수 (변수 해석 용이)
- 변수 추출 (feature extraction) : 변환을 주어 새로운 변수 추출 (추출된 변수 해석 어려움)
차원 축소 방법 종류
- 지도 변수 선택법
- 지도 변수 추출법
- 비지도 변수 선택법
- 비지도 변수 추출법 : PCA (주성분 분석) 등
주성분 분석 (PCA)
기존의 축을 대신하는 사영된 축(특성) 찾기= 축에 대한 데이터 개수는 유지
데이터셋의 어떤 특징을 잡아낸 것이라 생각할 수도O
- 데이터 사영(projection)하여, 분산이 가장 큰 Z 찾기
- 분산이 크다= 데이터를 잘 표현(주성분)한다= 손실되는 정보량이 작다
- 주성분에 수직이고, 분산이 가장 큰 다음 벡터 찾기
(++ 설명된 분산 : 주성분이 원본데이터의 분산을 얼마나 잘 나타내는지)
주성분분석 추출 단계
- 데이터 정규화
- 기존변수의 공분산, 상관계수 계산
- 상관계수 행렬로 고유값, 고유벡터 계산
- 고유값, 고유벡터 정렬 (분산 큰->작은: 내림차순)
- 정렬된 고유값을 기반으로 기존변수 변환
문제
패션아이템을 분류하고 싶은데, 이전보다 높은 성능을 내길 기대한다.
#1. 로지스틱 회귀로 분류
- 확률적 경사하강법(SGD) : sample을 하나씩 꺼내서 모델을 훈련하는 방법
- 표준화 전처리된 데이터
- 1차원 배열 데이터만 다룸
- 손실함수= 로지스틱 함수
- 각 클래스에 대한 모델 파라미터(가중치, 절편)을 찾음
- softmax함수로, 각 클래스에 대한 확률 얻음
#2. 인공 신경망
기본 인공신경망(이미지 분류 Good) = sgd를 사용하는 로지스틱 회귀
데이터셋이 충분히 크기 때문에, 검증셋 사용
- 뉴런(유닛) : z값을 계산하는 단위, 선형 계산하는 단위.
- Sequential 클래스 : 여러 층을 가진 '신경망 모델' 생성
- 밀집층(dense layer) : 왼쪽 뉴런들과 오른쪽 뉴런들이 모두 연결된 층
- 활성화 함수 : 뉴런의 선형방정식 계산결과에 적용하는 함수 (비선형적으로 비틀어줌)
- 손실함수
- 이진 분류= binary_crossentropy
- 다중 분류
- sparse_categorical_crossentropy (정수값 1개만 사용)
- categorical_crossentropy
- = 원-핫 인코딩 : 타깃값인 클래스만 1이고, 나머지는 모두 0인 배열로 만드는 방식
#3. 심층 신경망(DNN)= 딥러닝
계속 층을 추가하여, 학습하면서 성능을 끌어올림
은닉층 수 많아지면, loss더 줄고 정확도 올라가지만 → 과대적합 가능성 올라감
하이퍼 파라미터가 많음 (은닉층 수, 뉴런 수, 활성화 함수, 층 종류, 배치 크기, 에포크 등)
- 활성화 함수
- 시그모이드 함수 (z값을 0~1 사이로 압축)(신속X)
- ReLU 함수(= max(0, z))(이미지 처리 Good)(음수면0, 양수면 그대로)
- 미니배치 경사하강법 (기본 미니배치 크기= 32개)
- 옵티마이저
- 적응적 학습률 : 모델이 최적점에 가까이 갈수록, 학습률을 낮춤
- Adam (모멘텀 최적화 + RMSprop)
- Adagrad
- RMSprop
- 기본적 GD : 학습률을 정해두고 내려감
- SGD (확률적 GD)
- 모멘텀 최적화 (이전 기울기를 가속도처럼 사용)
- 네스테로프 모멘텀 최적화 (모멘텀 최적화 2번 반복하여 구현)(Good 성능)
- 적응적 학습률 : 모델이 최적점에 가까이 갈수록, 학습률을 낮춤
검증 손실
1 epoch 후 1검증 반복 (for 과대적합 방지)
인공신경망 모델이 최적화하는 대상 = 손실 함수 = 모델이 잘 훈련했는지 확인
드롭아웃
랜덤하게 일부 유닛계산X하면서, 출력층 계산 (→ 인간의 뇌와 유사하게? 규제 효과)
하이퍼 파라미터= 얼마나 많은 뉴런을 drop할지
특정 뉴런에 과대의존 감소 → 과대적합 방지
콜백
훈련과정 중간에 어떤 작업을 수행할 수 있도록하는 객체
- ModelCheckPoint (중간중간에 학습결과 저장)
- 조기종료patience=2 : 검증점수 향상X(과대적합)이라도, 2번까지는 더 (학습을) 보겠다
- 과대적합이 시작되기 전에, 훈련을 미리 중지하는 것 (에포크 계속X)(규제 효과)
'About Me > 독서 로그' 카테고리의 다른 글
< 함께 자라기 : 애자일로 가는 길 > 김창준 (0) | 2022.02.14 |
---|---|
< 감정의 성장 > 김녹두 (0) | 2019.11.24 |