[t:/]$ 지식_

머신러닝 공부노트

2017/02/14

일단 순서는 "파이썬 머신러닝" 책의 요약 정도가 될 듯함.

유형

지도학습, 비지도학습, 강화학습

예측

분류-클래스피케이션, 선형회귀

강화학습

아직 모름

군집

클러스터링

퍼셉트론

계단 함수, w(j) = w(j) + a * (real y - pred y)x(j)

퍼셉트론의 비용 함수는 컨벡스하지 않으므로 이터레이션은 하이퍼 파라미터이다.

계단 함수는 -무한대에서 +무한대로 갈 때 특정 쓰레시홀드에서 점프한다.

하이퍼 파라미터

사람이 통밥으로 설정해야 함

오차 플롯

에포크별 오차 그래프를 그려서 수렴 점을 찾으면 에포크를 정할 수 있다. 에포크는 반복 횟수다.

선형 회귀

에이다라인 알고리즘 - 오차 제곱 합을 비용 함수로 잡으면 비용 함수가 컨벡스화 된다. = 그래디언트 디센트법이다. 경사 하강법.

컨벡스화 - y=x^2의 함수 모양을 생각하면 된다. 최저점이 있으므로 최저점을 구하는 문제로 전환할 수 있다.

컨벡스 함수의 미분 - 기울기로 전환되며 0인점을 찾는 문제로 전환된다. 즉, 비용함수의 최소화 문제로 전환된다.

로컬 최적점 : 4차 함수라고 가정하면 로컬 최적점이 발생하여 예측이 실패한다.

러닝레이트가 크면

델타 w(가중치)가 +- 교번하며 최적점을 찾는 해상도가 떨어지나 이터레이션은 빨리 끝난다.

러닝레이트가 작으면

최적점을 찾는데 오래 걸린다.

러닝레이트가 적당히 잘 맞으려면

피쳐(입력)이 스케일되어야 한다. (x - 평균) / 표준편차 표준화면 적당하다.

스케일이 뒤죽박죽인 데이터를 그대로 입력하면 러닝레이트에 따라 뒤죽박죽인 결론이 나올 수 있다.

선형 회귀의 구현

델타w의 절대값은 반복마다 감소한다. 이때 증가를 하거나 0이 되면 반복을 멈추고 모델이 완성된다. 4차 함수의 모양에서 로컬 최적점의 함정에 빠질 수는 있을지도?

SGD 확률적 그래디언트

모집단에서 데이터의 샘플을 뜨고, 순서를 섞어서 회귀를 돌린다. 온라인 학습에 적합하다. 데이터의 순환이 사라졌으므로 더 정확할 수도 있다.(?)

정확도 (어큐러시)

테스트 셋트에서 A라고 분류된 데이터가 100인데, 이 중 90개가 진짜 A면 90%다.

활성함수 (양자화기)

가중치 * X로 나온 값을 이용해 특정 쓰레시홀드로 판별을 하는 함수. 0.5 이상이면 1이다 방식.

로지스틱 회귀

비용 함수에 시그모이드 함수 (로지스틱 모델)을 넣은 것. 입력은 분류형 값을 바이너리로 분리한 값이나 연속형 값이 될 수 있다. 출력은 분류형 값의 확률값이 된다.

정규화

L2 : 오버핏을 감쇄해준다.

L1 : 희소 데이터에서 0인 값에 피팅되는 것을 감쇄해준다.

람다 : 정규화 레벨로서 클 수록 감쇄가 크다.

SVM

분리 하이퍼평면의 마진(간격)을 최대화 하는 벡터 w를 찾는다. 구현은 모르겠다.

여유변수 (슬랙 변수, 크사이)

정규화 L2, L1의 역할을 SVM에서 하는 것이다.

XOR 데이터

회귀로 못 푼다. 커널 SVM을 통해서 풀 수 있다.

커널 SVM

매핑 함수를 이용해 고차원 피처 공간에 투영한다. 상세 내용은 모르겠다.

의사결정 나무

정보 분기점=컨디션을 설정했을때 엔트로피가 가장 커지는 점을 찾는다. 인포메이션 게인, 지니 인덱스, 엔트로피.

랜덤 포레스트

샘플을 떠서 부트스트랩을 만들고, 피쳐를 임의로 d개 선택하여 트리를 돌린다. 이걸 반복한 다음 결과를 합성한다.

KNN

샘플에 이웃 K를 구하고 다수결로 레이블을 붙인다. 이웃은 그냥 유클리디안.

차원의 저주

?? 멀어도 이웃이 될 수 있으며 오버핏팅이 된다.?

KNN와 트리

피쳐 스케일이 필요없다. 하지만 해야겠지..

결측 데이터

제거하기 또는 보정하기(평균을 걍 때려넣는다)

범주형(분류형) 데이터 다루기

인덱스를 매기고 그냥 피쳐 갯수 만큼 늘려서 할당하자.

원핫인코딩

명목형을 그냥 풀어 전개해버렷.

트레이닝/테스트 데이터 분류

작으면 7:30, 많으면 99:1도 가능

스케일링

닫힌 구간 : 최대 최소 스케일링

표준화 : 표준편차를 사용

오버피팅 판별

트레이닝에 모델 돌린 오차가 테스트에 모델 돌린 오차보다 많이 작다면..

피쳐 선택

줄이면 오버피팅을 피할 수 있다.

연속형 피쳐 선택 알고리즘 (SBS)

평가(예컨데 정확도)를 최대로 하는 피쳐를 하나씩 제거하며 모델을 돌린다. 이때 제거한 피쳐를 모아놨다가 실제 모델에서 쓴다. 원하는 갯수까지 돌리는 예제가 있는데, 정확도 감소율로 계산해도 될 것 같다. (미분하여 최적점 찾기 문제로 전화할 수 있을지도?)

이렇게 피쳐 갯수를 줄이면 트레이닝 데이터에 대한 정확도가 감소하고, 테스트에 대한 정확도는 증가하며 둘 사이의 정확도 갭은 줄어든다. -> 오버피팅이 해소되는 방향으로 간다.

랜덤포레스트에 의한 피쳐 선택

그냥 이 트리로 구분된 컨디션이 높은 순서가 중요한 피쳐다.

주성분 분석 PCA

어떻게 구현 할 수 있을지 접근법을 모르겠다.. 그래프는 알겠는데.. 선형 대수 공부하고 다시 온다.

LDA 분석

모르겠다..

커널 주성분 분석

모르겠다..

케이폴드

데이터를 쪼개서 일부를 테스트로 하고, 테스트 윈도우를 옮겨가며 모델링.

더 정확한 스코어를 추정한다.

검증곡선 (밸리데이션 커브)

모델 파리미터 vs 정확도 같은 걸 그려본다.

훈련 곡선이 위에 있고, 테스트 곡선은 아래 있을 텐데 너무 붙었다면 언더핏이 우려되고, 벌어지기 시작한 점이 최적점이 될 것이다. 계속 벌어져만 간다면 오버핏이 심화되어 가는 것이다.

병렬화

그리드 검색, 케이폴드 같은 것은 CPU를 다 쓸 수 있다.

그리드 검색

정확도가 젤 좋은 C(람다의 역수) 같은 걸 걍 부루트포스로 찾아낸다.

중첩교차검증

케이폴드를 이중으로 짜되, 내부 루프에서 C같은 걸 바꿔가며 뺑이치고 최적 스코어를 찾는다.

컨퓨전 매트릭스

정밀도, 예측 정확도, 정확도, 진양성 비율, 가양성 비율...

에러 = 틀린 거 / 전체

정확도 = 맞은거 / 전체

진양성 비율 = 진양성 / 예측 전체 -> 양성 맞춘 확률

가양성 비율 = 가양성 / 예측 전체 -> 음성인데 양성으로 틀린 확률

정밀도 = 진짜 양성 / 예측에서 양성으로 분류한 것

리콜 = 진양성 / 예측 전체

ROC 플로팅

대각선은 랜덤 추정임.

Y축선상은 완벽한 비율임

ROC이 적분 = 넓이가 AUC임 AUC가 0.5 = 랜덤일 것이고 1이면 완벽일 것임.

다중분류

스코어 합쳐서 성능 평가함

앙상블

모델 여러개 돌려서 합성하면 성능이 더 좋음

이때 모델별로 가중치 w를 또 할당하여 최대 성능일 대의 w를 추정해 볼 수 있음??

ROC AUC로 평가해 볼 수 있겄음..

배깅

샘플 쪼개서 앙상블

어댑티브 부스팅 (에이다 부스트)

잘 모르겠음..

.. 작성 중.









[t:/] is not "technology - root". dawnsea, rss