# data[].attributes.body
Chapter 1. 머신러닝 알고리즘의 종류
##시스템 종류 정리##
[1]
1. 지도 학습 (supervised learning) = 사람이 직접 분류
방식 종류: '분류' 레이블(or class)  or '회귀' [예측 변수(predictor variable, feature로도 불림)으로 target 수치 예측] /// k-nearest neighbors, liner regression, logistic regression, supprot vectormachine, decision tree, random forest, neural networks등은 유명한 지도 학습 알고리즘임 # liner regression은 Chapter 2에서 간단하게 사용한다

2. 비지도 학습 (unsupervised learning) = 특성을 그룹화
clustering (ex HRC, outlier detection, novelty detection, association rule learning) / visualization / dimensionality reduction(데이터를 효율적으로 처리하게 해주는 기법) / association rule learning

3. 준지도 = SL + USL
ex) deep belief network(DBN): 여러 겹의 restricted Boltzmann machine(RBM, USL이다)으로 훈련 된 전체 시스템이 SL로 세밀하게 조정됨

4. 강화 학습 (reinforcement learning)
agent(학습 주체)가 환경에 대한 행동을 하고, 보상 or 패널티를 받아 가장 좋은 행동(policy)을 스스로 찾아가는 것

[2]
온라인 학습 (바로 업뎃 or 미니 배치나 외부 메모리를 통해 학습, 따라서 얼마나 빠르게 업뎃을 할건지인 learning rate가 중요하다) / 배치 학습

[3]
사례 기반 학습: 기반 샘플 실존 / 모델 기반 학습: 샘플등의 모델을 만들어 예측에 사용함

##과대 적합이나 과소 적합 같은 문제들이 존재한다

##파이프 라인 = 학습의 각 과정

##training set -> train -dev set(test set)

Chapter 2. 머신러닝 프로젝트 개요: 주택 가격 분석

성능 측정 지표 선택
1. 평균 제곱근 오차 root mean square error: p72 참조
2. 평균 절대 오차 mean absolute error: 튀는 값이 많을 경우 사용,  p74 참고
# X 데이터셋을 가설 h로 연산하여 예측값을 찾고, 평균치 y와 다른 방식으로 비교하여 값을 출력하는 방법들

#결정 트리 모델 훈련 법#
k-fold cross-validation(k-겹 교차 검증): set -> divided to fold( 10 subset) => 9 to train, 1 to test, run 10 times

RandomforestRegressor: 무작위 특성을 기준으로 둔 수많은 예측을 평균내는 방식
Ensemble(앙상블)=> 수많은 결정트리를 모아 하나의 모델을 만드는 것

# data[].attributes.body
1.3 머신러닝 시스템의 종류

-사람 감독의 유무 >> 지도, 비지도, 준지도, 강화

-실시간 점진적 학습 유무 >> 온라인, 배치

-사례 기반(데이터 포인트를 서로 비교), 모델 기반(패턴 발견 후 예측모델 생성)

*지도 학습(e.g. 분류, 회귀)

훈련 데이터에 레이블 존재.

회귀: 예측 변수라 불리는 특성을 이용해 타깃 수치를 예측.

학습 알고리즘: k-최근접 이웃, 선형 회귀, 로지스틱 회귀, 서포트 벡터 머신, 결정 트리와 랜덤 포레스트, 신경망

k-최근접 이웃: 사례 기반 학습 알고리즘을 사용하여, 예측하고자 하는 값과 근접한 값을 갖는 데이터 K개의 값의 평균을 구하면 모델 기반의 예측과 비슷한 값을 낼 수 있음.

*비지도 학습

훈련 데이터에 레이블 없음.

학습 알고리즘: 군집(k-평균, 계층 군집 분석, 기댓값 최대화), 시각화와 차원 축소(주성분 분석, 커널 PCA, 지역적 선형 임베딩, t-SNE), 연관 규칙 학습(어프라이어리, 이클렛)

특성 추출: 차원 축소, 즉 정보를 손실하지 않으면서 데이터를 간소화하려고 할 때 상관관계가 있는 여러 특성을 하나로 합치는 것.

이상치 탐지: 학습 알고리즘에 주입하기 전에 데이터셋에서 이상한 값을 자동 제거

*준지도 학습

훈련 데이터에 일부만 레이블 존재.

지도 학습과 비지도 학습의 조합으로 이루어진 학습 알고리즘

e.g. 심층 신뢰 신경망 DBN은 여러겹으로 쌓은 제한된 볼츠만 머신 RBM(비지도 학습)

*강화 학습

에이전트: 학습하는 시스템

환경을 관찰해서 행동을 실행하고 그 결과로 보상 혹은 벌점을 받음. 시간이 지나면서 가장 큰 보상을 얻기 위해 최상의 전략, 즉 정책을 스스로 학습.

*배치 학습

점진적 학습이 아닌, 가용한 데이터를 모두 소진하여 훈련함.

시간과 자원(e.g. CPU, 메모리, 디스크 공간 등) 소비 많아서, 오프라인 학습이 먼저 이루어지고 더이상의 학습 없이 시스템에 적용.

새로운 데이터가 주어질 경우 전체 데이터를 이용해서 시스템을 업데이트해야함. 자원이 제한된 시스템(e.g. 스마트폰)에서 사용하기 어려움.

*온라인 학습(오프라인에서 진행됨. = 점진적 학습)

데이터를 미니배치(작은 데이터 묶음 단위)로 주입하여 시스템을 훈련시킴. 연속적으로 데이터를 받고 빠른 변화에 스스로 적응해야 하는 경우, 컴퓨터 자원이 제한된 경우에 적합.

외부 메모리 학습: 데이터셋이 크더라도 조금씩 학습하는 것을 반복함으로써 학습 가능.

학습률: 데이터에 빠르게 적응하는 정도. 높으면 빠르게 적응하지만 예전 데이터 금방 잊음. 낮으면 느리게 적응하고 잡음이나 대표성 없는 포인트에 덜 민감해짐.

시스템에 나쁜 데이터가 주입되면 성능이 점진적으로 감소.

새로운 데이터로 일반화하기 위한 접근법

*사례 기반 학습

시스템이 사례를 기억함으로써 학습한 다음 유사도 측정을 통해 새로운 데이터에 일반화함.

*모델 기반 학습

샘플들의 모델을 만들어 예측에 사용.

모델 선택: 어떤 함수로 모델링할지 선택.

모델 파라미터를 조정하여 모델을 얻음. 최상의 성능을 내는 모델을 얻기 위해 효용 함수, 적합도 함수를 정의하거나 비용 함수를 정의하여 모델 파라미터를 정의.

훈련: 알고리즘에 훈련 데이터를 공급하여 데이터에 가장 적합한 파라미터를 찾는 것.

추론: 새로운 데이터에 모델을 적용해 예측.

# data[].attributes.body
Chapter 3.

# data[].attributes.body
MNIST
-60000 training set
-10000 test set

Stochastic Gradient Descent로 학습
SGDClassifier.fit()

cross_val_score 로 교차검증
cross_val_score(모델, training set, target, fold, 평가지표)

confusion matrix
A class를 B class로 잘못 분류한 경우를 count
행 : 실제 class
열 : 잘못 분류한 class

precision & recall
precision = TP/(TP + FP)
recall = TP/(TP + FN)
F_1 = 2/(1/precision + 1/recall) : 조화평균

precision/recall trade-off
decision threshold의 값을 높이면 good precision, bad recision
decision threshold의 값을 낮추면 bad precision, good recision
decision_function() method로 decision score 얻을 수 있음.
np.armax()로 원하는 precision 이상을 얻는 최소의 threshold 구할 수 있음.

ROC Curve
true positive rate(recall, sensitivity) 과 flase positive rate(FPR)을 plot
FPR : negative instances 중 positive로 잘못 분류된 비율
TNR : negative instances 중 negative로 바르게 분류된 비율 (specificity)
FPR = 1 - TNR
roc_curve()로 plot
AUC : are under the curve
정확한 classifier는 AUC = 1, random classifier는 AUC = 0.5
RandomForestClassifier는 predict_proba() method 제공

Multicalss Classification
OvR(one-versus-the-rest) : binary classifier만 있는 경우 각각의 class 에 대해 classifier를 만들어 가장 높은 점수를 얻는 class로 분류류
OvO(one-versus-one) : 각각의 class쌍에 대해 분류하는 classifier를 학습시킴. 각각의 classifier 학습이 빠름.

Error Analysis
confuson matrix로 error 평가 가능

Mulitilabel Classification
다수의 binary tag를 ouputs로 가지는 classification system
ex) 사진에서 사람 인식하기
KNeighborsClassifier()사용
각각의 label에 대해 F1 score을 구하고 평균을 구하여 평가함.

Multioutput Classification
다수의 label이 multicalss를 outputs로 가지는 classification system
noise제거(각각의 픽셀 : multi label, 노이즈 값 : multicalss)

-------------------------------------------

from IPython.core.interactiveshell import InteractiveShell

InteractiveShell.ast_node_interactivity = "all"
을 추가하면 jupyternotebook에서 하나의 셀에 여러개 output 출력가능