MNIST 모델은 ML, Deeplearning 입문자에게 연습용으로 훌륭한 dataset이다. 이 dataset을 다양한 model을 활용하여 분석해보려 한다. 활용할 model은 logistic regression, K-NN classifiers, SVM classifiers, Random forest classifiers이다.
IDE : colab
Library : scikit learn
data : Keras, MNIST digits classfication dataset (https://keras.io/api/datasets/mnist/)
training dataset 60000, test dataset 10000
Hypothesis :
Sigmoid function :
cost function :
기존의 linear regression의 cost function ( ) 과는 다른 형태를 보이는데 이는 continuous한 linear regression과 달리 classification을 해야하는 logistic 특성상 discrete한 값을 도출 해야하기 때문
실험에서는 C(inverse of regularization strength)값과 iteration 값을 변화하면서 값을 변경해 보았다.
c, iteration | 50 | 100 | 200 | 300 |
---|---|---|---|---|
0.1 | 0.9222 | 0.9232 | 0.9215 | |
1 | 0.9222 | 0.9231 | 0.9207 | 0.9207 |
10 | 0.9219 | 0.9234 | 0.9224 | |
100 | 0.9234 |
최적의 accuracy는 C = 10, iteration = 100일 때 최고의 performance를 낸다. iteration이 200일 때부터는 overfitting 되어 test set에 대한 accuracy가 감소하는 것을 확인할 수 있었다.
advantage
매우 효율적이고 엄청난 양의 계산 리소스를 필요로 하지 않음. 정규화도 쉽고단순함
disadvantage
비선형 문제를 해결하는 데 사용할 수 없음. 단순하고 심플한 만큼 performance가 제안됨
option : euclidean distance 사용
실험에서는 n_niehgbor값을 변경해 보았다.
n_neighbor | 1 | 3 | 5 |
---|---|---|---|
accuracy | 0.9469 | 0.9472 | 0.9469 |
advantage
기존 분류 체계 값을 모두 검사하기 때문에 정확도가 높은 편이다. 또한 상위 n개의 데이터만 사용하기 때문에 outliyer 또한 고려되지 않는다.
disadvantage
모든 데이터를 비교하기 때문에 데이터가 많을 수록 처리 시간이 매우 증가한다.
고차원 데이터에 대해선 '차원의 저주'를 피할 수 없어 이를 수행하기 전에 차원 축소를 권장
사용한 kernel은 linear, polynomial, RBF이며 C값을 변화하면서 실험을 진행하였다.
svm 특성상 학습시간이 너무 느려 training data subset를 10000, test를 5000으로 줄여서 학습시켰다.
c | 10 | 1 | 0.1 |
---|---|---|---|
linear | 0.9122 | 0.9122 | 0.9174 |
poly | 0.959 | 0.9058 | 0.5572 |
rbf | 0.9506 | 0.9432 | 0.8822 |
가장 최적의 조건은 kernel이 polynomial, c=10일때로 추정됐다. 이를 기점으로 본래 training dataset(60000)을 학습시킨 결과 0.9802의 정확도가 나왔다.
advantage
과적합 피할 수 있다. 분류문제와 예측문제에 같이 사용가능하고 예측 정확도가 높다. 적은 차원의 데이터의 일반화에서 강한 performance를 보임
disadvantage
최적화를 위해 kernel과 모델 파라미터를 조절하는데 많은 시간이 들며 학습 시간 또한 오래 걸림
information gain을 위한 metric으로는 entropy를 사용했다. n_estimate(number of tree)의 개수를 변경해가며 실험을 진행해 보았다.
n_estimate | 10 | 50 | 100 | 200 |
---|---|---|---|---|
accuracy | 0.9496 | 0.9706 | 0.9725 | 0.9727 |
tree의 수가 200일 때 좋은 performance를 보였다. 100과 200의 차이가 미미한 것으로 충분한 fitting이 되었다고 생각된다. 추가적으로 meteric을 바꾸어 gini를 활용해 본결과 0.9735로 성능이 향상 되었다.
advantage
ensemble 및 bagging model 특성상 overfitting이 발생하지 않으며 performance가 우수한 편에 속한다.
disadvantage
여러 모델을 학습해야 하다 보니 차원이 크도 메모리 소모가 크다.