데이터분석

[Scikit-learn] large data set 학습시키는데 발생하는 문제

쌍쌍바나나 2017. 2. 7. 21:19
반응형

  scikit-learn을 이용해 기존에 학습하는 데이터 셋이 작을때는 SVC에서 kernel로 모델을 생성했다. 하지만 샘플의 개수가 늘어남에 따라 문제가 생기기 시작했다. 그 이유는 간단하다. scikit-learn에서 이미 샘플의 수가 많으면 동작이 안된다고 명시하고 있다.


  정리하면 SVC kernel은 scalable하지 않기 때문에, training set의 small subset에 적합하고, incremental/online learning을 지원하지 않는다. oneline learning은 간단하게 말하면, 모든 데이터를 한번에 모델을 학습시키는데 사용하지 않고, batch 형태로 데이터를 나누어서 학습시킨다. 기존에는 한번의 batch 작업으로 모델을 생성했다면, 여러번의 batch로 모델을 업데이트한다는 느낌으로 생각하면 된다. 



  위 이유로 scikit-learn의 online learning은 데이터의 양이 많아지면 사용할 수 없다. 그렇다면 mini batch learning이 가능한 SGD Classifier를 사용을 하면 된다. 역시 안되는건 없구나 SGD Classifier에 대한 reference는 아래와 같다. 



http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier


  하지만 문제가 있으니 SGD는 linear svm에 대해서서만 support를 해주게 된다. 즉 SVC에서 kernel method를 사용했다면, SGD의 linear로는 구현을 할 수 없다. 그래서 찾아보니 학습하고자 하는 데이터셋을 미리 non-linear에 대해서 처리하기 위해 kernel function을 통해 mapping을 하고 SGD Classifier를 사용하면 non-linear svm이 가능하다. kernel function에 대한 설명은 아래와 같다. 


http://scikit-learn.org/stable/modules/kernel_approximation.html


[참고]


https://adventuresindatascience.wordpress.com/2014/12/30/minibatch-learning-for-large-scale-data-using-scikit-learn/https://adventuresindatascience.wordpress.com/2014/12/30/minibatch-learning-for-large-scale-data-using-scikit-learn/


반응형