# linear model
1) Least Square : 가장 간단하고 오래된 알고리즘. predict와 training set에 있는 target사이의 MSE(mean squared error)를 최소화 하는 파라미터 w, b를 찾음.
>>> from sklearn import linear_model
* w는 reg.coef_, b는 reg.intercept_ 속성에 저장되어있음.
* coef_는 각 입력 feature에 하나씩 대응됨
2) Ridge : least square와 비슷하지만 w의 절댓값을 가능한 한 작게 만들어 모든 원소가 0에 가깝게 함. 직관적으로는 모든 feature가 output에 주는 영향을 최소한으로 만듬(regularization). regularization이란 overfitting이 되지 않도록 모델을 강제로 제한한다는 의미. L2 패널티 사용(2-norm). alpha 매개변수를 통해 training set의 성능 대비 모델을 얼마나 단순화할지 지정할 수 있음. alpha값을 높이면 계수를 더 0에 가깝게 만들어 성능은 저하되지만 일반화는 잘됨
3) Lasso : Ridge와 마찬가지로 w를 0에 가깝게 함. Ridge와는 달리 L1 패널티를 사용함(1-norm). L1 regularization의 결과로 어떤 w는 실제로 0이 되는데, 이 말인 즉슨 완전히 제외되는 feature가 생긴다는 것. 어떻게 보면 feature selection이 자동으로 이뤄진다고 볼 수 있음. 일부 계수를 0으로 만들면 모델 이해가 쉬워지고 모델에서 가장 중요한 특성이 무엇인지 찾기 쉬워짐.
4) Least Angle
5) Bayesian
6) Logistic
7) Stochastic Gradient Descent(SGD)
... 뭐 이렇게 많은거지
# k-NN(k-Nearest Neighbors)
# decision tree
# Ensemble methods
1) Forests of randomized trees
2) Gradient tree boosting : 여러개의 decision-tree를 묶는 방법. Forests of randomized tree 와 달리 무작위성이 없고 이전 트리의 error를 보완하는 방식으로 순차적으로 트리를 만듬. 대신 사전 가지치기가 이루어짐. 일반적으로 depth를 1~5 사이로 하기 때문에 메모리를 적게 사용하고 예측이 빠름. 근본적인 아이디어는 간단한 트리를 많이 연결하는 것이고, 각각의 트리는 데이터의 일부에 대해서만 예측을 잘 수행할 수 있어 트리가 많이 추가될 수록 성능이 좋아짐.
+ loss function을 정의하고 gradient descent 방법으로 다음에 추가될 트리가 예측해야 할 값을 보정함
* learning_rate : 이전 트리의 error를 얼마나 강하게 보정할지 결정하는 매개변수. 크면 트리는 보정을 강하게 하기 때문에 복잡한 모델을 만듬
* n_estimators : ensemble에 트리가 더 ensemble 추가되어 복잡도가 커지고 training set에서의 실수를 바로잡을 기회가 많아짐