link: http://shop.oreilly.com/product/0636920052289.do
1. The Machine Learning Landscape
- 머신러닝 시스템 타입에는 이것 저것… 외에 Instance-Based(kNN 같은 것들), Model-Based 가 있다.
- 머신러닝을 하는데 있어 아래 사항들이 거슬린다.
- 데이터의 양이 부족
- 트레이닝 셋이 데이터 분포를 제대로 표현하지 못하는 것 ( Nonrepresentative )
- 샘플링 잘못하면 Sampling Bias가 생김
- (예시: Landon과 Roosevelt의 지지율 조사 시 Literary Digest의 요청에 호의적인 구독자들이 표본집단의 대부분을 차지했음. 이 구독자들은 Republican일 가능성이 높았음)
- 데이터의 질이 떨어짐
- 의미없는 feature들이 있음
- 트레이닝 데이터에 Over(Under)fitting 됨
- 모델의 generalization을 위해 Test와 Validation을 수행하지만 There's no such thing as a free lunch.
2. End-to-End Machine Learning Project
아직은 intro라서 대강의 말만 있다.
Data preparation pipeline을 구성하자.
성능 지표를 설정하자. 대표적으로 RMSE와 Mean Absolute Error(MAE)가 있다. MAE는 데이터 내에 outlier가 많을 때 유용하다.
가정이 뭐였는지 확인하자.
데이터를 시각화하자.
Correlation을 보자. (Standard correlation coefficient를 보는 방법이 나왔지만 2차원 시각화라 딱히…)
Scikit-Learn은 굉장히 잘 디자인된 패키지다. 제공하는 Object들은 모두 다음의 형태를 가지고 있다.
Estimators: 데이터셋으로부터 파라미터를 추정함
Transformers: 데이터셋을 변형해서 변형된 데이터셋을 만들어줌
Predictors: 입력 데이터로부터 예측을 수행
Feature Scaling
Min-max scaling: (데이터 - min) / (max - min), 많은 사람들이 normalization이라 부름 (엥?), outlier에 취약
Standardization: 0 mean unit variance, DNN에 넣기 좋음(DNN은 input value(아마 절대값)가 0~1 사이일 때 잘 작동하기 때문)
Grid Search
hyperparameter를 찾기 위해 Grid Search를 돌리자.
hyperparameter를 어떤 값으로 해야 할지 전혀 감이 안잡히면 10승 단위로 grid를 준비하자. 그 다음에 세밀하게 튜닝하면 된다.
Randomized Search
hyperparameter가 여러개라면 Grid Search를 그냥 돌릴 수 없다. grid 위에서 hyperparameter를 무작위로 골라 성능을 확인하자.
Ensemble Methods
7장에서 보자.
3. Classification
트레이닝 셋의 instance의 class에 기준으로 무작위로 섞지 않으면 오작동하는 classifier도 있다.
예를 들어 첫 번째 50개는 class A고, 나머지 50개는 B고 이런식으로 되면 좋지 않을 수 있다.
MNIST에서 '5'만 맞추는 binary classifier가 있다고 하자. 이 classifier의 accuracy가 90%이다. 좋은 성능의 classifier인가?
무턱대고 전부 '5가 아님'이라는 예측만 해도 90%를 달성할 수 있다.
Confusion matrix
| -- | predicted - negative | predicted - negative | |---|---|---| | Actual - Negative | TN | FP | | Actual - Positive | FN | TP |
Precision: TP / (TP + FP), true label을 가지는 instance가 부족하거나 TP가 매우 중요할 경우
Recall(sensitivity 혹은 true positive rate): TP / (TP + FN), FN가 매우 중요할 경우
F1 score: Precision과 Recall의 기하평균. 어떤 metric에 비중을 둬야 할지 잘 모를 경우 이렇게 한다.
Precision / Recall Tradeoff
classifier가 고정된 시점에서 Threshold의 조정만으로 Precision과 Recall을 둘 다 높일 수는 없다.Trade-off가 있다.
PR curve를 그려서 어느 지점에서 타협을 봐야 하는지 분석할 수 있다.
ROC Curve
sensitivity vs (1 - specificity) curve
true negative rate(specificity): TN / (TN + FP)
false positive rate: FP / (FP + TN)
Area under the curve(AUC)
ROC 혹은 PR curve의 아랫 부분이 차지하는 면적. 1에 가까울 수록 좋다.
Multiclass Classification
Binary classifier로 multiclass classifier를 만드는 방법
1. one-versus-all(OvA): 클래스 마다 그것만 맞추는 classifier를 만든다.
- 클래스 갯수만큼 binary classifier가 필요
2. one-versus-one(OvO): 클래스 pair에 대해 binary classifier를 만든다.
- 클래스 두개의 combination 만큼 binary classifier가 필요. 클래스 수가 많아지면 combination이 폭발한다…
- SVM의 경우는 많은 데이터에 대응할 수 없기 때문에 이 방식을 쓴다.
Error analysis
matplotlib의 matshow() 함수로 confusion matrix를 gray scale 2d image로 다시 나타내면 그 특성을 확연히 볼 수 있다.
특정 클래스가 어두울 경우 데이터의 단순 부족, 혹은 해당 classifier의 낮은 성능 때문이다.
Multilabel Classification
multiclass는 여러 class 중 하나를 맞추는 것이고 multilabel은 답 자체가 여러개인 것이다.
예: 사진에 나온 인물이 누구누구인지? 맞추는 문제
metric을 이용해 성능을 평가할 때, label 별로 weight를 다르게 줄 수도 있다.
Multioutput Classification
multiclass + multilabel
이미지 노이즈 제거 같은 task
regression과 거의 다를 바 없음 (그나마 classification이라고 한 건 output이 discrete이니까…)
4. Traning Models
Linear Regression
RMSE 대신 MSE를 쓰자. sqrt 굳이 할 이유가 없다. (RMSE는 왜 쓰지? -> error와 같은 scale로 만들어서 분석하기 위해)
The Normal Equation
- closed-form solution을 도출 가능. (一発で得られる)
- 하지만 feature의 갯수가 많아지면 역행렬 계산에 너무나도 많은 시간이 걸린다.
linear regression은 데이터 갯수가 많아져도 prediction 시간이 linearly 늘어나기 때문에 계산 시간 고민을 안해도 된다.
Batch Gradient Descent
partial derivative와 gradient의 차이(맨날 까먹는다): partial derivative는 scalar고 gradient는 vector. gradient의 요소로 partial derivative가 있다고 보면 된다.
Convergence Rate
tolerance e에 수렴시키기 위한 iteration 수가 k 라면, e/10의 tolerance에 수렴시키기 위해서는 10*k 번의 iteration이 필요하다.
Stochastic Gradient Descent
out-of-core algorithm(데이터를 메모리에 전부 올릴 수 없는 알고리즘)에 사용하기 위한 방법이다.
learning rate가 고정일 경우 영원히 수렴하지 못한다.
- simulated annealing(learning rate를 점차 줄이는 방법)을 쓴다. (annealing이라고 한 이유는 담금질에서 점차 식히는(?) 과정과 비슷하기 때문)
Mini-batch Gradient Descent
SGD는 너무… noisy하다. mini-batch 짱짱맨
Polynomial Regression
feature를 polynomial feature로 만들어서 그것에 대해 linear regression 하는 것
Learning Curves
underfitting: validation과 training curve가 평평하고 서로 가깝고 값 자체가 클 때
overfitting: training curve가 validation에 비해 상당히 낮고 둘 사이가 멀 때
- 해결책: 데이터를 더 넣어라
The Bias/Variance Tradeoff
Bias: 모델 가정을 잘못한 경우. underfitting이 되어버린다. 예: data는 quadratic인데 linear regression을 할 경우
Variance: 모델에 degree of freedom이 너무 커서 데이터의 작은 변화에 sensitive 할 때
Irreducible error: 데이터 자체에 들어 있는 noise에 의한 것. 데이터를 전처리 하자.
Regularized Linear Models
Ridge Regression: 그냥 L2 norm을 cost function에 추가한 것 (왜 ridge일까?)
Lasso Regression: L1 norm을 추가한 것
- feature 차원이 training instances보다 많아지거나 서로 correlated라면 에러가 발생하기 쉽다.
Elastic Net: L2 norm과 L1 norm을 추가한 것
Regularization을 적용하면 데이터의 scale에 민감해지기 때문에 데이터를 미리 scaling 하자.
Logistic Regression
Odds를 regression하는 것
Logit: Logarithm of odds
Odds: 가능성. (통계학에서) P / (1-P) (그런데 위키피디아에서는 (1-P) / P 이다. (???)
그런데 logistic function은 1 / (1 + exp(-t))로 생겼잖아? 이거랑 Logit, Odds랑 뭔 상관이지?
Logistic Regression은 closed-form solution이 없다. 대신 cost function이 convex이긴 하다.
Cross Entropy
어떤 정보(?)를 보낼 때 필요한 평균 bits (정보에 확률을 얹어서(cross) 평균 bits를 계산함)
Softmax와 Logistic regression의 output은 확률이기 때문에 cost function이 자연스럽게 cross entropy가 된다.
X entropy의 두 극단이 각각 entropy, KL divergence와 대응하는데 교재 설명만으로는 일반화하기 어려울 듯. skipped
5. Support Vector Machines
SVM은 데이터가 커지면 복잡해진다(뭐가 복잡해지지?)
Linear SVM Classification
SVM은 feature scale에 sensitive하다. scale이 변하면 margin도 변하기 때문
Soft margin Classification
- Hard margin의 경우 margin violation을 아예 허용하지 않는다. 하지만 outlier 때문에 어느정도는 타협해야 한다.
- margin 폭을 유지하면서 margin violation인 instances를 어느 정도 허용한다(어느정도라는게 어느정도?)
Nonlinear SVM Classification
linearly separable이 아닌 data에 대해서는 polynomial feature를 만들어 SVM을 수행하자.
Polynomial Kernel
polynomial feature가 잘되긴 하는데 degree가 높아지면 계산해야 할 것들이 너무 많아진다.
polynomial kernel을 쓰면 combination explosion이 없다.
kernel의 degree는 어떻게 정해야 할까? Grid Search로 정한다. (초기엔 coarse, 나중엔 fine)
Adding Similarity Features
similarity function을 가지고 feature들을 여기에 넣어 새로운 차원에서 나타내자.
주로 Gaussian Radial Basis Function(RBF)를 주로 쓴다.
RBF의 landmark는 어떻게 정할까? -> 일단 training instances 각각을 landmark로 줄 수 있다. 하지만 이렇게 하면 새로운 차원이 instances 수 만큼 되버리기 때문에 파라미터가 너무 많아진다.
Gaussian RBF Kernel
위 문제를 해결하기 위해 kernel trick을 사용할 수 있다. (수식적으로는 어떻게??? landmark를 적절한 수만큼 만들어도 training instances 마다 landmark를 준 것과 비슷한 효과를 낸다는 것 같은데…)
다른 kernel로는 DNA나 문자열 간의 edit distance(levenstein distance)를 계산하는 String Kernel이 있다.
SVM Regression
Classification의 경우 margin violation을 제한하면서 margin을 넓혔다.
Regression의 경우 margin violation을 제한하면서 최대한 많은 instances에 fitting되도록 한다.
- (margin violation을 제한한다는게 솔직히 뭔 말인지 모르겠음)
- margin 내에 들어오는 새로운 데이터에 대해서는 insensitive이다. (이걸 e-sensitve라 한다)(???)
linear SVM의 경우 (Regression이든 Classification이든) dataset이 늘어나도 scale(무슨 scale?)이 linearly 증가하지만, non-linear SVM의 경우는 더 커지기 때문에 (느려진다) (어떤것이 느려지지? 무슨 교재가 이래?)
Decision Function and Predictions
Linear SVM classifier prediction
y = 0 if wx + b < 0 else 1
Training Objective
decision function의 w의 기울기가 낮을 수록 margin이 넓어진다.
target을 +1, -1로 정하면 margin violation에 대한 constraint를 t(wx + b) >= 1로 정할 수 있다(hard margin일 경우).
즉 SVM classifier objective는
- minimize (1/2)||w||^2 : 낮은 slope, ||w|| 대신 (1/2)||w||^2를 쓴다. (미분 가능하기 때문)
- subject to t(wx + b) >= 1 : Low margin violation
soft margin objective의 경우, (1/2)||w||^2 + C * sum(zeta_i) 를 최소화한다.
- 여기서 zeta는 해당 instance가 얼마나 margin violation을 허용받았는지에 대한 정도이고, slack variable이라 한다.
Quadratic Programming
hard, soft margin problem은 둘 다 QP problem이다. QP problem 형태의 문제는 그냥 QP solver에 넣으면 된다.
The Dual Problem
주어진 primal problem(원래 problem, 여기서는 QP problem에 해당)이 어떤 조건을 만족하면 dual problem으로 새로 정의하여 풀 수도 있다. dual problem의 경우 solution에 lower bound를 부여한다(lower bound라는게???) .
dual problem은 primal 보다 더 빠르게 풀 수 있고, kernel trick도 적용할 수 있다.
Kernalized SVM
어떤 polynomial mapping pi(x) 에 대해, kernel pi(x)'pi(x)를 계산하지 않고 그냥 원래 식을 적은 연산량으로 계산하는 것을 말한다.
Mercer's Theorem: pi(a)'pi(b)와 같은 함수 K(a,b)가 어떤 조건(symmetric 이라든지, 연속이라든지)을 만족하면 K에 대한 mapping pi(x)가 존재한다는 것. 그래서 사실 pi(x)를 알지 못하거나 무한대의 차원에 대한 mapping이라 계산이 불가능해도 그냥 K를 그대로 쓰면 mapping한 효과를 낼 수 있다.
prediction 시 , dual에서 구한 parameter를 가지고 primal problem에서 추정해야 하는 w나 b등을 다시 계산해야 하는데, mapping pi(x)가 무한대의 차원을 가지고 있다면 w를 구할 수 없다(w * pi(x)이므로 둘다 같은 차원이어야 함). 하지만 kernel trick을 사용하면 w를 직접 구하지 않고도 prediction을 수행할 수 있다.
dual problem에서 kernel trick을 써서 prediction을 수행하면… 수식이 아주 복잡해진다.
Online SVMs
Gradient Descent를 쓰기 때문에 QP를 푸는 것보다 느리다.
cost function 내에 Hinge Loss function ( max (0, 1-t) )를 사용한다.
hinge loss를 쓰면 margin 바깥에 위치하는 new instances에 대해서는 cost에 아예 반영하지 않는다(positively 반영하지도 않는다).
hinge loss를 쓸 경우 미분이 안되는데, Lasso Regression 처럼 적당한 subderivative(0과 -1 사이의 어떤 값…)을 주면 된다.
6. Decision Trees
데이터를 준비하고 decision tree를 만들면 된다(… scikit-learn의 함수에 그냥 넣으면 됨)
scikit-learn에서는 Classification and Regression Tree(CART) 알고리즘을 사용한다. CART의 경우 각 node가 두 개의 child nodes만을 가질 수 있다.
fitting 된 tree중 트레이닝 어떤 class를 purely 구분할 수 있는 node도 있고, 최적의 decision threshold를 찾았지만 pure는 아닌(impure) node도 있다.
Decision tree는 White box model에 속한다. (white box model: model을 보면 어떻게 동작하는지 직관적으로 알 수 있음)
black box model에는 DNN이나 random forest 등이 있다.
Decision Tree로 class probability를 계산할 수도 있다.
The CART Training Algorithm
아래 cost function을 최소화하는 single feature k와 k의 threshold를 고르면 된다.
CART cost function for classification: J(k,tk) = leftratio * leftimpurity + rightratio * right_impurity
- (cost function은 averaged impurity라고 보면 된다)
CART algorithm은 greedy algorithm이다.(그때 그때 하나의 k만 보고 locally optimal threshold를 정하기 때문)
어차피 greedy로 안하면 NP-Complete 문제라서 풀기도 어렵다(NP-complete은 따로 다시 복습…)
Computational Complexity
prediction의 경우: O(log2(m)), m: instances의 수
training의 경우: O(n x mlog2(m)), n: feature 차원. training은 느리기 때문에 presorting을 하기도 한다. (하지만 이것도 느리다)
Gini Impurity or Entropy?
gini(지니 계수의 그 지니) impurity 대신 entropy를 쓰기도 한다.
gini를 쓰면 'class들이 안 섞이는 것'에 집중하고, entropy를 쓰면 balanced tree를 만드는데 집중한다(뭐가 balanced인걸까).
Regularization Hyperparameters
Decision tree는 feature scaling을 하지 않아도 된다. 하지만 이렇게 하면 더욱 데이터 의존적이 되고 overfitting이 일어날 가능성이 크다.
Decision tree는 parameter가 없기 때문에, decision tree에 대한 regularization은 tree의 depth를 제한하는 것이 된다.
다른 방법으로는 일단 학습된 tree에 대해 pruning을 실시하는 것이다. 이건 성능이 더 좋아지진 않는데 대신 필요없는 node를 없애서 의미 없는 예측을 피하기 위함이다.
Regression
이 경우 CART cost function은 J(k,tk) = leftratio * leftMSE + rightratio * right_MSE 가 된다.
Instability
Decision tree는 orthogonal boundary만을 가지기 때문에 data의 rotation에 sensitive하다.
PCA 등을 통해 orientation을 하면 해결할 수 있다.
training data의 작은 variation에 취약하다.
decision boundary와 가장 가까운 instance가 다른 값을 가지기만 해도 decision boundary가 크게 변한다.
7. Ensemble Learning and Random Forests
집단 지성.. 뭐 그런 motivation이 있는 것 같다.
Voting Classifiers
타입이 다른 여러 classifier의 binary prediction에 대해 다수인 class로 정하는 것 (voting)
각 classifier는 weak learner에 해당됨(무작위보다는 좋은 classifier)
hard voting 같은게 잘된다고…? 근데 잘됨. 왜 잘되나?
The law of large numbers
- 가정: voting에 쓰이는 classifier들이 각자 다른 데이터로 학습되었고(independent) uncorrelated 이라면…
- 샘플 수가 많으면 많을 수록 이상적인 예측을 잘함. (아니 뭐 꼭 예측 뿐만이 아니라 그냥 시행 횟수가 많으면 뭐든지 잘됨)
- (이런 대강의 설명 말고… 실제 law of large numbers는 더 진지한 것 같은데 너무 내용이 많으니 일단 패스)
하지만 보통 가정을 충족하는 상황이 없기 때문에 완전 잘되는 건 아님.
- 그나마 아주 다른 타입의 classifier를 쓰면 각자 다른 타입의 error를 만들기 때문에 independency를 흉내낼 수 있고 accuracy도 높음.
Bagging and Pasting
bagging: 복원 추출, pasting: 비복원 추출
bagging의 뜻: bootstrap aggregating
bootstrap은 또 뭔가? bootstrapping
- sample set에 대해 또 sampling을 실시하여 만든 resample set들이 마치 모집단에서 나온 여러 sample set인 것처럼… 다루는? 기법인듯 잘은 자세히 봐야 함
하여튼 이 방법은 bagging(or pasting)된 여러 resampled set에 대해 같은 타입의 predictor를 여러개 만들어 voting(맞겠지?) 하는 것임.
각 predictor는 highly biased 이지만 aggregation을 수행하면 variance, bias 둘 다 낮아짐(이거 완전 공짜 아니냐?)
Bagging and Pasting in Scikit-Learn
decision tree로 bagging ensemble을 해보자. (ensemble이 뭔지 아직 배우진 않았는데)
위에서는 bias, variance 둘 다 낮아진다고 했지만… bagging이 완료되면 전체 bias는 이전과 비슷하지만(decision tree 특징인가) ensemble의 variance는 낮아짐.
bagging이 pasting보다 조금 더 bias가 높긴 하지만 predictor들이 서로 uncorrelated임.
- 이는 복원추출이라 resampled set 간 dependency가 없기 때문(다른 셋에 어떤 instance가 있건 없건 상관이 없기 때문)
Out-of-bag Evaluation
각 predictor들은 resampled set을 쓰기 때문에 각자마다 사용되지 않은 set이 있음(각자 다름)
각자 다른 resampled set에 대해 학습되기 때문에, cross validation을 하지 않아도 됨.
Random Patches and Random Subspaces
instance를 sampling 하는 방법도 있지만, feature의 일부를 sampling 하여 sub-feature를 가지게 하는 방법도 있음
random patches method: instances와 features 둘 다를 sampling 하는 것(X에 대해 patch를 뜯는 것 같아 patch라고 하는 듯)
feature를 sampling하는 것은 predictor diversity를 더 높이기 때문에, predictor 각각의 bias를 더 높이고 variance를 더 낮추는 tradeoff가 있음(어차피 ensemble 하면 다 괜찮아지는 거 아닌가? 아닌가?)
Random Forests
decision trees의 bagging ensemble임.
random sub-feature 에 대해 각각의 decision tree가 다르게 학습되기 때문에, 각 tree의 best feature도 다름.
Extra-Trees
best feature의 threshold를 random으로 정하는 것(아니 threshold까지 random이면 그게 무슨 의미가 있어…)
이런것까지 randomize 하기 때문에 extremely randomized trees ensemble이라고 함.
Feature Importance
학습된 random forest를 보면 중요한 feature가 뭔지 알 수 있음.
특정 feature가 각 tree의 root node에 가까우면, 그 feature는 중요한 것임. (반대로 leaf node에 가까우면 안 중요)
Boosting ( hypothesis boosting )
weak learner를 combination 하는 것
Adaboost
weak learner를 여러개 준비하고, learning1 -> prediction1 -> boosting -> learning2 -> pre…. 를 수행하는 것
learning{i}: i번째 learner를 준비된 데이터를 가지고 학습 시키는 것
prediction{i}: 준비된 데이터에 대해 i번째 learner를 가지고 predition 하는 것
boosting: learner가 잘못 예측한 instance에 대해 weight를 더 주는 것 (즉 데이터 내의 instance 별 weight를 변화)
모든 learner의 학습이 끝나고 모든 learner를 가지고 prediction 할 때는 각 predictor 별 weight(따로 계산됨)를 가지고 수행
decision stump: depth가 1인 decision tree(최소한의 decision tree. 이름이 귀엽다)
adaboost도 overfitting이 되기 때문에 estimator(여기서는 왜 또 estimator라고 하는 걸까 헷갈리게…)의 갯수를 제한하는 것으로 regularization을 수행
SAMME
multiclass version of AdaBoost
Gradient Boosting
boosting을 하긴 하는데 데이터에 그대로 하는게 아니라 residual 자체를 데이터로 간주하여(틀린 정도만 남겨서) 다음 learning에 사용
이렇게 하면 hypothesis function을 만들 때 그냥 각 learner의 h(x)를 더하면 됨
- h(x) = h1(x) + h2(x) + h3(x)
Stacking
1단계: training set의 subset을 준비하여 predictor 여러개를 learning
2단계: 위 subset의 exclusive subset을 가지고 학습된 predictors에 넣고, 그렇게 해서 얻어낸 여러개의 prediction에 대해 blending predictor를 학습함(마치 DNN 같다)
layer가 깊다면 이걸 반복…
엥 이거 완전 DNN의 RBM pretraining 아니냐? (하지만 subset을 사용하고 학습 방법이 좀 다르긴 함 어쨌든)
8. Dimensionality Reduction
The Curse of Dimensionality
hypercube의 차원이 높아질수록 hypercube 내의 무작위의 점은 임의의 border(면)와 매우 가깝게 위치한다.
즉 feature가 고차원이 될 수록 고차원 공간 내에 고르게 퍼져 있지 않고 엄청나게 쏠려 있고 sparse라는 것
쓸모없는 차원이 너무 많다.
Main Approaches for Dimensionality Reduction
Projection
- projection으로 안되는 경우가 있다.
Manifold Learning
- manifold: 실제 데이터는 낮은 차원의 subspace에 있는데 이게 고차원의 space에 구불구불하게 있는 경우 그 subspace를 manifold라 함.
- '실제로는 낮은 subspace에 있을 것이다'라는 가정이 깔려 있음.
- (암묵적으로) 딱 보면 딱 manifold일 것 같다는 가정도 있음(하지만 이건 언제나 맞는 말은 아님).
PCA
Principle Components
- PC의 방향은 데이터의 변화에 sensitive임. 대신 축 자체는 insensitive.
- SVD로 찾아낼 수 있음.
- PCA는 데이터셋이 origin-centerized라고 가정하기 때문에 적절한 전처리가 필요
Explained Variance Ratio
- 각 PC 마다 Variance Ratio를 가짐. (eigenvalue에 해당하는 그것)
Choosing the Right Number of Dimensions
- 적절히 고르면 됨. 예시에서는 Explained Variance(k개까지의 PC의 Variance의 합이 전체 Variance에서 차지하는 비율)가 0.95일 때의 PC 갯수를 적절하다고 봤음.
PCA for Compression
- MNIST의 경우 PCA를 통해 원래 데이터셋의 20%의 사이즈만 가지고도 95%의 variance를 확보할 수 있었음.
Incremental PCA
- mini-batch를 가지고 찾아냄. numpy의 경우 memmap을 사용하면 아주 큰 사이즈의 데이터도 incrementally 가능
Randomzied PCA
- d개의 PC를 랜덤하게 찾음(???? 이래도 됨?)
Selecting a Kernel and Tuning Hyperparameters
- 데이터 분포를 아예 못 보거나 관련 지식이 아예 없을 경우
- 이 부분은 문장 호흡이 너무 길어서 해석이 어려움. 한 30분 걸릴 것 같음 ㅠㅠ 스킵
Locally Linear Embedding(LLE)
데이터셋 내의 특정 instance xi에 대해 k개의 이웃 xj가 xi를 linear combination으로 가장 잘 나타낼 수 있는 wij를 추정.
What = argminW(sum(|| xi - sum(wij * x_j) ||^2)) (constraint 생략)
근데 i = j 일 경우의 w_ij를 그냥 1로 주고 아닌 것들을 다 0으로 주면 되는데, 이게 도대체 식이 왜 이렇지? 일단 머리 싸매고 있을 수 없으니 skip
Other Dimensionality Reduction Techniques
Multidimentional Scaing (MDS): 차원축소를 하긴 하는데 instance 간의 거리를 유지(???? 무슨)
Isomap: 읽어도 무슨 말인지 모름
t-SNE: 비슷한 instance는 가깝게, 다른 것끼리는 멀게
LDA: 생략
댓글 없음:
댓글 쓰기