머신러닝 기초
인공지능 ⊃ 머신러닝 ⊃ 딥러닝 input+output → 머신러닝 → 규칙/패턴 찾기 스스로 학습하는 학문 단순히 작업만 실행(T)은 머신러닝 X (학습의 부재) ETP E : 바둑 경기 / T : 실전 경기 진행 / P : 승리할 확률 vs Programming input → programing → 원하는 output 스팸 ; 머신러닝 - 알아서 처리 / 프로그램밍 - 수작업 머신러닝의 Data 종류 Training -> 모델링 (외부 Data로 비슷한 성능 출력) Test 모델링 → 일반화 / 분류화 / 추상화 Training Data 와 input Data 달라져도 같은 성능의 output을 내기 위함 일반화의 문제 과대적합 : Training 정확도↑, 외부 Data 정확도 ↓: 훈련 Data 증가 / 잡음 줄이기 / 정규화 과소적합 : Training 정확도↓, 외부 Data 정확도 ↑: 파라이터가 더 많은 복잡한 모델 사용 / 모델 제약 줄이기 / 충분한 학습 (~ 조기종료 시점까지) 데이터 나누기 Training | Test - 머신러닝 Training | Validation | Test - 딥러닝↳ 훈련을 위한 데이터 ↲ Validation : 트레닝 중 잘 되는지 검증/평가용 데이터 데이터 전처리 굉장히 많은 시간 소요 / 거의 대부분의 시간 할애 결측치 처리(missing value) 평균값 넣기 최빈값 넣기 날려버리기 df.inull().sum() : 결측치 개수 확인 df.fillna(0) : 결측치 0으로 처리 범주형 변수 처리 원-핫 인코딩 : 범주형 데이터 -> 0 or 1 from sklearn.preprocessing import OneHotEncoder 데이터 바인딩 : 연속형 데이터 -> 구간 나눔 Feature scaling Min-Max Normalization: 최대 최소값을 0~1의 범위로 데이터 표준화 from sklearn.preprocessing import minmax_scale() Standardization: 표준화 확률 변수 / z 스코어 구하는 법 교차검증 - 모델을 평가하는 방법 중 하나 훈련 데이터로 훈련시키고 테스트 데이터로 정확도/스코어 구함 데이터 수가 적다면 신뢰도 낮아짐=> 데이터 수가 적을 때 사용 K-Fold 데이터를 훈련/검증 데이터로 k번 쪼갠 후 반복 성능의 평균으로 결론 머신러닝 모델의 답 T F 실제 T a b 정답 F c d 정밀도 Presision = a / ( a + c) 재현율 = a / ( a + b) Accuracy = ( a + d ) / (a + b + c + d ) F1 Score = [2 x (정밀도 X 재현율)] / ( 정밀도 + 재현율 ) : 정밀도와 재현율의 조화 평균 지도 학습 : 우리가 정답(레이블)을 주고 학습 분류 2진 분류 다중 분류 회귀 : 연속적인 예측 with 예측변수 feature 선형회귀 1차함수의 기울기 H(x) = wx + b MSE 비용함수 - 가설이 잘 맞는지 검사: cost(x) =1∕m∑(H(x)-y)^2 ∴MSE를 통해 w와 b값 찾기 = 선형 회귀 분석 단차를 최소화 = Good 경사하강법 - 최소값 찾기 W = w - 𝛼 × 𝜕MSE∕𝜕w Running mate 기울기 느림(w↓) - 정확도↑- 오래걸림 기울기 빠름(w↑) - 정확도↓- 빠름 local minimun ≠ global minimun 인 경우 있음 다중 선형 회귀 (x의 변수 많음) H(x1,x2) = w1x1 + w2x2 +b 데이터가 너무 많을 경우 - 분류해서 선택 시각화 (비지도학습) PCA 상관관계 분석 전진선택법: 중요한 변수부터 차례대로 모델 추가 후진제거법: 가장 영향이 적은 변수들 부터 제거 로지스틱 회귀 곡선 형태 → 정확도 증가 분류에 사용 (0/1 이진형) p 식 유도 p = e^(ax + b) / 1 + e^(ax + b) p = ax + b 좌변 0 or 1 / 우변 ±∞ p대신 Odds 넣기 성공확률/실패확률 = 성공확률 / 1 - 성공확률 p /1 - p Odds에 자연로그 씌우기 ln(Odds) = ln(p/1 - p) = ax + b 양변에 e 곱하기 e^ln(p/1 - p) = e^(ax + b) p/1 - p = e^(ax + b) p = e^(ax + b) / 1 + e^(ax + b) 직선 | 곡선 예측 | 분류 연속 | 이진형 H(x) = Wx + b | p = e^(ax + b) / 1 + e^(ax + b) 결정트리 분류와 회귀 모두 가능한 지도학습 모델 Yes/No 질문들로 이어가며 학습 한 번의 분기 때 마다 두개로 구분 특정 질문에 따라 데이터를 구분 하는 학습 질문/정답의 네모 상자 :Node 맨 처음 분류 기준 : Root Node 맨 마지막 분류 기준 : Terminal / Leaf Node 지나치게 분류를 많이하면 오버피팅 발생 - 가지치기로 방지 사전 가지치기: 트리 생성을 일찍 중단 트리의 최대 깊이 / Leaf Node의 최대 갯수 제한 Node가 분할하기 위한 포인트에 최소 한계 지정 사후 가지치기: 트리 생성 후 적은 데이터 포인터를 가진 노드 삭제/병합 시킴 특성 중요도: 트리를 만드는 결정에 각 특성이 얼마나 중요한지 확인 0 : 각 특성에 사용되지 않음 1 : 완벽하게 타겟 플레이스를 예측 함 중요할 수록 높은 위치의 Node 특성 중요도가 낮다 ≠ 필요 없는 변수 해당 변수를 선택하지 않았거나 같은 정보를 가진 다른 특성 존재 할 수 있음 장점 알고리즘이 직관적 - 규칙 파악도 용이 룰이 뚜렷, 규칙 노드와 리프노드를 알기 쉬움 전처리 작업 필요성 낮음 이상치나 노이즈에 큰 영향을 받지 않음 비모수적 모형 선형성/정규성/등분산성등의 가정 필요 X 교호작용 효과 두 개 이상의 변수가 결합하여 목표변수에 어떤 영향을 주는지 쉽게 알 수 있음 가장 영향을 많이 주는 것 확인 가능 연속형/이산형 데이터 둘 다 다룰 수 있음 단점 과적합 가능성 높음 모델의 유연성 낮음 일반성 부족 정확도 낮음 랜덤포레스트: 여러 결정 트리의 묶음 결정 트리 많이 만들기 + 트리 생성에 무작위성 주입 각 트리가 고유하게 만들지도록 무작위 선택 - bootstrap sample 데이터 포인트 랜덤하게 분류하는 질문의 특성 무작위 트리 개수 정해야함 bootstrap sample: 0첫 단계에서 무작위로 중복을 허용해서 선택한 n개의 데이터를 선택하는 과정 이를 통해 추출된 n개의 데이터 = 부트 스트랩 샘플 기존 트리 : 각 노드에서 전체 특성을 대상으로 최선의 질문( 텍스트 )찯기 각 노드에서 후보 특성을 랜덤하게 선택하고 그중에서 최선의 질문 및 테스트 선택 Max Feature: 모든 특성을 고려하게 되면 무작위성이 제외됨 하나로 두면 특성을 고를 필요 없이 임계치만 찾으면됌 크게하면 - 각 트리들이 비슷해짐 작게하면 - 각 트리들이 차이점 커지고 데이터를 맞추기위해 깊이가 깊어짐 기존 트리와 달리 무작위로 선택 후 후보들 중 최선의 테스트 도출 앙상블: 여러 머신러닝 모델을 연결하여 더 강력한 모델을 만드는 기법(여러개의 약분류기를 결합하여 강분류기를 만드는 것) 배깅: 샘플을 여버런 뽑아서 각 모델을 학습시키고 그 결과물을 집계 부스팅: 가중치를 주어 약분류기를 강분류기로 전환 팀워크 존재 첫모델 예측 결과 - 결과에 따른 새로운 가중치 - 다음모델에 영향 KNN (K-Nearest Neighbor) - 회기 가장 가까운 정보들로 추론 새로운 데이터가 주어졌을때, 기존 데이터 중 가장 가까운 데이터로 새로운 데이터 추론 k 정하기 = 최근접 수 조절 거리정하는 방법 표준화 : 피타고라스 / 유클리드 / 맨해튼 비지도 학습 : input 데이터에 정답이 없음 군집 비슷한/유사도를 가진 것 끼리 묶음 시각화 준지도 학습 : 지도 학습 + 비지도 학습 강화 학습 에이전트 + 환경 +보상 -> 보상 극대화 에이전트는 '운'으로 보상 획득 -> 보상을 극대화하는 방향으로 학습