일단 순서는 "파이썬 머신러닝" 책의 요약 정도가 될 듯함.
지도학습, 비지도학습, 강화학습
분류-클래스피케이션, 선형회귀
아직 모름
클러스터링
계단 함수, w(j) = w(j) + a * (real y - pred y)x(j)
퍼셉트론의 비용 함수는 컨벡스하지 않으므로 이터레이션은 하이퍼 파라미터이다.
계단 함수는 -무한대에서 +무한대로 갈 때 특정 쓰레시홀드에서 점프한다.
사람이 통밥으로 설정해야 함
에포크별 오차 그래프를 그려서 수렴 점을 찾으면 에포크를 정할 수 있다. 에포크는 반복 횟수다.
에이다라인 알고리즘 - 오차 제곱 합을 비용 함수로 잡으면 비용 함수가 컨벡스화 된다. = 그래디언트 디센트법이다. 경사 하강법.
컨벡스화 - y=x^2의 함수 모양을 생각하면 된다. 최저점이 있으므로 최저점을 구하는 문제로 전환할 수 있다.
컨벡스 함수의 미분 - 기울기로 전환되며 0인점을 찾는 문제로 전환된다. 즉, 비용함수의 최소화 문제로 전환된다.
로컬 최적점 : 4차 함수라고 가정하면 로컬 최적점이 발생하여 예측이 실패한다.
델타 w(가중치)가 +- 교번하며 최적점을 찾는 해상도가 떨어지나 이터레이션은 빨리 끝난다.
최적점을 찾는데 오래 걸린다.
피쳐(입력)이 스케일되어야 한다. (x - 평균) / 표준편차 표준화면 적당하다.
스케일이 뒤죽박죽인 데이터를 그대로 입력하면 러닝레이트에 따라 뒤죽박죽인 결론이 나올 수 있다.
델타w의 절대값은 반복마다 감소한다. 이때 증가를 하거나 0이 되면 반복을 멈추고 모델이 완성된다. 4차 함수의 모양에서 로컬 최적점의 함정에 빠질 수는 있을지도?
모집단에서 데이터의 샘플을 뜨고, 순서를 섞어서 회귀를 돌린다. 온라인 학습에 적합하다. 데이터의 순환이 사라졌으므로 더 정확할 수도 있다.(?)
테스트 셋트에서 A라고 분류된 데이터가 100인데, 이 중 90개가 진짜 A면 90%다.
가중치 * X로 나온 값을 이용해 특정 쓰레시홀드로 판별을 하는 함수. 0.5 이상이면 1이다 방식.
비용 함수에 시그모이드 함수 (로지스틱 모델)을 넣은 것. 입력은 분류형 값을 바이너리로 분리한 값이나 연속형 값이 될 수 있다. 출력은 분류형 값의 확률값이 된다.
L2 : 오버핏을 감쇄해준다.
L1 : 희소 데이터에서 0인 값에 피팅되는 것을 감쇄해준다.
람다 : 정규화 레벨로서 클 수록 감쇄가 크다.
분리 하이퍼평면의 마진(간격)을 최대화 하는 벡터 w를 찾는다. 구현은 모르겠다.
정규화 L2, L1의 역할을 SVM에서 하는 것이다.
회귀로 못 푼다. 커널 SVM을 통해서 풀 수 있다.
매핑 함수를 이용해 고차원 피처 공간에 투영한다. 상세 내용은 모르겠다.
정보 분기점=컨디션을 설정했을때 엔트로피가 가장 커지는 점을 찾는다. 인포메이션 게인, 지니 인덱스, 엔트로피.
샘플을 떠서 부트스트랩을 만들고, 피쳐를 임의로 d개 선택하여 트리를 돌린다. 이걸 반복한 다음 결과를 합성한다.
샘플에 이웃 K를 구하고 다수결로 레이블을 붙인다. 이웃은 그냥 유클리디안.
?? 멀어도 이웃이 될 수 있으며 오버핏팅이 된다.?
피쳐 스케일이 필요없다. 하지만 해야겠지..
제거하기 또는 보정하기(평균을 걍 때려넣는다)
인덱스를 매기고 그냥 피쳐 갯수 만큼 늘려서 할당하자.
명목형을 그냥 풀어 전개해버렷.
작으면 7:30, 많으면 99:1도 가능
닫힌 구간 : 최대 최소 스케일링
표준화 : 표준편차를 사용
트레이닝에 모델 돌린 오차가 테스트에 모델 돌린 오차보다 많이 작다면..
줄이면 오버피팅을 피할 수 있다.
평가(예컨데 정확도)를 최대로 하는 피쳐를 하나씩 제거하며 모델을 돌린다. 이때 제거한 피쳐를 모아놨다가 실제 모델에서 쓴다. 원하는 갯수까지 돌리는 예제가 있는데, 정확도 감소율로 계산해도 될 것 같다. (미분하여 최적점 찾기 문제로 전화할 수 있을지도?)
이렇게 피쳐 갯수를 줄이면 트레이닝 데이터에 대한 정확도가 감소하고, 테스트에 대한 정확도는 증가하며 둘 사이의 정확도 갭은 줄어든다. -> 오버피팅이 해소되는 방향으로 간다.
그냥 이 트리로 구분된 컨디션이 높은 순서가 중요한 피쳐다.
어떻게 구현 할 수 있을지 접근법을 모르겠다.. 그래프는 알겠는데.. 선형 대수 공부하고 다시 온다.
모르겠다..
모르겠다..
데이터를 쪼개서 일부를 테스트로 하고, 테스트 윈도우를 옮겨가며 모델링.
더 정확한 스코어를 추정한다.
모델 파리미터 vs 정확도 같은 걸 그려본다.
훈련 곡선이 위에 있고, 테스트 곡선은 아래 있을 텐데 너무 붙었다면 언더핏이 우려되고, 벌어지기 시작한 점이 최적점이 될 것이다. 계속 벌어져만 간다면 오버핏이 심화되어 가는 것이다.
그리드 검색, 케이폴드 같은 것은 CPU를 다 쓸 수 있다.
정확도가 젤 좋은 C(람다의 역수) 같은 걸 걍 부루트포스로 찾아낸다.
케이폴드를 이중으로 짜되, 내부 루프에서 C같은 걸 바꿔가며 뺑이치고 최적 스코어를 찾는다.
정밀도, 예측 정확도, 정확도, 진양성 비율, 가양성 비율...
에러 = 틀린 거 / 전체
정확도 = 맞은거 / 전체
진양성 비율 = 진양성 / 예측 전체 -> 양성 맞춘 확률
가양성 비율 = 가양성 / 예측 전체 -> 음성인데 양성으로 틀린 확률
정밀도 = 진짜 양성 / 예측에서 양성으로 분류한 것
리콜 = 진양성 / 예측 전체
대각선은 랜덤 추정임.
Y축선상은 완벽한 비율임
ROC이 적분 = 넓이가 AUC임 AUC가 0.5 = 랜덤일 것이고 1이면 완벽일 것임.
스코어 합쳐서 성능 평가함
모델 여러개 돌려서 합성하면 성능이 더 좋음
이때 모델별로 가중치 w를 또 할당하여 최대 성능일 대의 w를 추정해 볼 수 있음??
ROC AUC로 평가해 볼 수 있겄음..
샘플 쪼개서 앙상블
잘 모르겠음..
.. 작성 중.