5. Spot-Check Classification Algorithm [파이썬으로 배우는 데이터 사이언스]

Spot-Check Classification Algorithm |
Contents:
1. Spot-Checking
2. 분류 알고리즘
· linear 모델 분류 알고리즘
· non-linear 모델 분류 알고리즘
1. Spot-Checking
- 스팟 체킹 이란 머신 러닝 문제를 풀 때, 문제 / 데이터 에 맞는 좋은 결과를 내는 알고리즘을 찾아가는 과정이다.
- trial & error. 괜찮은 모델들 선택 후 하이퍼 파라미터 튜닝 -> 알맞은 알고리즘 선택
- try Mixture of algorithm representation; (e.g. instances / trees)
- try Mixture of learning algorithm; (e.g. different algorithms for learning the same type of representation)
- try Mixture of algorithm modeling types; (e.g. linear / nonlinear functions or parametric / non parametric)
2. 분류 알고리즘
1) Linear Models
* Logistic Regression
· 가우시안 분포를 가정하고 바이너리 분류 문제에 사용된다.
* Linear Discriminant Analysis(LDA)
· 가우시안 분포를 가정하고 바이너리 / 멀티클래스 분류에 사용된다.
from sklearn.model_selection import KFold, cross_val_score
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
kfold=KFold(n_splits=10,random_state=6)
model=LinearDiscriminantAnalysis()
results=cross_val_score(model,X,y,cv=kfold)
print(results.mean())
2) Non Linear Models
* K-Nearest Neighbors
· 거리 측정을 통하여 새로운 인스턴스에 대하여 k 개의 가장 가까운 인스턴스를 찾고
k개의 값들의 평균값을 output으로 낸다.
from sklearn.model_selection import KFold,cross_val_score
from sklearn.neighbors import KNeighborsClassifier
model=KNeighborsClassifier()
kfold=KFold(n_splits=10,random_state=6)
results=cross_val_scroe(model,X,y,cv=kfold)
print(results.mean())
* Naïve Bayes
· 네이브 베이즈는 각각의 클래스(레이블)에 대한 확률과, 각각의
input(feature)주어졌을 때, 클래스(레이블)의 확률
(=conditional probability; p(class | each input feature)를 계산한다.
· 새로운 input이 들어오면 위를 바탕으로 각각의 input feature에 대한
조건부 확률들을 곱하여 예상되는 확률을 구한다.
이 때, 모두 독립적인 관계라 가정한다.
· 가우시안 분포를 따른다 가정하고 Gaussian Probability Density Function
사용하여, 새로운 input feature 들에 대한 확률을 쉽게 구할 수 있다.
from sklearn.model_selection import KFold,cross_val_score
from sklearn.naïve_bayes import GaussianNB
model=GaussianNB()
kfold=KFold(n_splits=10,random_state=6)
results=cross_val_scroe(model,X,y,cv=kfold)
print(results.mean())
* Classification and Regression Trees(CART)
· CART는 트레이닝 데이터로부터 바이너리 트리를 만든다.
· 트리기반 모델의 특징인 split을 greedy하게 cost function이
minimize 되도록 고른다(like Gini index)
from sklearn.model_selection import KFold,cross_val_score
from sklearn.tree import DecisionTreeClassifier
model=DecisionTreeClassifier()
kfold=KFold(n_splits=10,random_state=6)
results=cross_val_scroe(model,X,y,cv=kfold)
print(results.mean())
* Support Vector Machine(SVM)
· SVM은 클래스 들을 잘 나누는 선을 고른다. 그리고 이 선에 가까운 인스턴스들은
support vectors라고 부르고 어떤 라인이 좋은지에 영향을 준다.
· SVM은 멀티 클래스 들로도 넓혀졌다.
· 커널 파라미터를 통한 각각의 다른 커널들에 특정한 인스턴스가 사용된다.
· default로 Radial Basis Function이 사용된다.
from sklearn.model_selection import KFold,cross_val_score
from sklearn.svm import SVC
model=SVC(gamma='auto')
kfold=KFold(n_splits=10,random_state=6)
results=cross_val_scroe(model,X,y,cv=kfold)
print(results.mean())
Spot-Check Regression Algorithm
Spot-Check Classification Algorithm |
Contents:
1. 회귀 알고리즘
- Linear 모델 회귀 알고리즘
- Non-linear 회귀 모델 알고리즘
1. 회귀 알고리즘
- Linear 모델 회귀 알고리즘
* Linear Regression
· input 변수들이 가우시안 분포를 가지고 output 변수와 관련이 있다고 가정한다.
· input 변수들간의 high correlation이 없다고 가정한다.(if not -> collinearity 문제)
from sklearn.model_selection import KFold,cross_val_score
from sklearn.linear_model import LinearRegression
model=LinearRegression()
kfold=KFold(n_splits=10,random_state=6)
results=cross_val_scroe(model,X,y,cv=kfold,scoring='neg_mean_squared_error')
print(results.mean())
* Ridge Regression
· linear regression 의 연장선.
· L2-norm: 로스함수가 sum(squared (value's coefficient)) 를 minimize하도록 한다.
from sklearn.model_selection import KFold,cross_val_score
from sklearn.linear_model import Ridge
model=Ridge()
kfold=KFold(n_splits=10,random_state=6)
results=cross_val_scroe(model,X,y,cv=kfold,scoring='neg_mean_squared_error')
print(results.mean())
* LASSO Linear Regression; Least Absolute Shrinkage and Selection Operator
· linear regression의 연장선
· L1-norm: 로스함수가 sum(abs(value's coefficient)) 를 minimize하도록 한다.
from sklearn.model_selection import KFold,cross_val_score
from sklearn.linear_model import Lasso
model=Lasso()
kfold=KFold(n_splits=10,random_state=6)
results=cross_val_scroe(model,X,y,cv=kfold,scoring='neg_mean_squared_error')
print(results.mean())
* Elastic Net Regression
· Ridge + RASSO 의 특징을 합침.
· L2와 L1 norm 모두를 사용하여 magnitude & # of regression coefficients를
최소화 하도록 한다.
from sklearn.model_selection import KFold,cross_val_score
from sklearn.linear_model import ElasticNet
model=ElasticNet()
kfold=KFold(n_splits=10,random_state=6)
results=cross_val_scroe(model,X,y,cv=kfold,scoring='neg_mean_squared_error')
print(results.mean())
* non-linear회귀 모델 알고리즘
· K-Nearest Neighbors(KNN)
from sklearn.model_selection import KFold,cross_val_score
from sklearn.neighbors import KNeighborsRegressor
model=KNeighborsRegressor()
kfold=KFold(n_splits=10,random_state=6)
results=cross_val_scroe(model,X,y,cv=kfold,scoring='neg_mean_squared_error')
print(results.mean())
* Classification and Regression Trees(CART)
from sklearn.model_selection import KFold,cross_val_score
from sklearn.tree import DecisionTreeRegressor
model=DecisionTreeRegressor()
kfold=KFold(n_splits=10,random_state=6)
results=cross_val_scroe(model,X,y,cv=kfold,scoring='neg_mean_squared_error')
print(results.mean())
* Support Vector Machines(SVM)
from sklearn.model_selection import KFold,cross_val_score
from sklearn.svm import SVR
model=SVR(gamma='auto')
kfold=KFold(n_splits=10,random_state=6)
results=cross_val_scroe(model,X,y,cv=kfold,scoring='neg_mean_squared_error')
print(results.mean())
Compare Models
Contents:
1.지속적인 모델 비교
- 같은 평가방법/데이터로 머신 러닝 알고리즘 비교
2. 템플릿
from matplotlib import pyplot
from sklearn.model_selection import KFold,cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.naïve_bayes import GaussianNB
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
# prepare models
models = []
models.append(('LR', LogisticRegression(solver='liblinear')))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC(gamma='auto')))
# evaluate each model in turn
results = []
names = []
scoring = 'accuracy'
for name, model in models:
kfold = KFold(n_splits=10, random_state=7)
cv_results = cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
results.append(cv_results)
names.append(name)
msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
print(msg)
# boxplot algorithm comparison
fig = pyplot.figure()
fig.suptitle('Algorithm Comparison')
ax = fig.add_subplot(111)
pyplot.boxplot(results)
ax.set_xticklabels(names)
pyplot.show()
data-learning.tistory.com
* 해당 게시물은 첫번째 배너 및 출처를 첨부하면 상업적 용도를 제외하고 사용하실수 있습니다.
'Machine Learning > 파이썬_데이터사이언스' 카테고리의 다른 글
| 7. Ensembles [파이썬으로 배우는 데이터 사이언스] (0) | 2020.02.06 |
|---|---|
| 6. Pipelines [파이썬으로 배우는 데이터 사이언스] (0) | 2020.02.05 |
| 4. 머신러닝 모델 평가 [파이썬으로 배우는 데이터 사이언스] (0) | 2020.01.31 |
| 3. Feature Selection [파이썬으로 배우는 데이터 사이언스] (0) | 2020.01.30 |
| 2. 머신러닝을 위한 데이터 준비 [파이썬으로 배우는 데이터 사이언스] (0) | 2020.01.30 |
댓글