인공지능(32)
-
히토 슈타이얼 - 데이터의 바다
Overview 팀원들과 함께 국립 현대 미술관에서 진행 중인 "히토 슈타이얼 - 데이터의 바다" 전시를 다녀왔다. 입장하기 전까지도 어떤 내용인지 잘 모르고 그냥 데이터에 대한 내용이겠거니 하고 들어갔다가 이런저런 생각들에 적잖이 충격을 받고 나왔다. 전시가 대부분 영상으로 되어 있고, 영상 하나가 20분 ~ 30분 정도 진행되는 것들이 많아서 모든 전시를 한 번에 다 보려 하기보다, 인상 깊거나 관심 있는 전시 한두 개 정도를 깊게 보면서 이런저런 생각을 해 보는 것을 추천한다. 최근에 관심있게 지켜보고 있던 여러 가지 이슈들, 이를테면 일론 머스크의 트위터 인수라든지, 페이스북 알고리즘에 대한 내부 고발, 그리고 증시 불황과 스웨덴 게이트와 연관 지어 전시를 감상하게 되었고, 그중 인상 깊었던 몇 ..
2022.06.15 -
[RNN] Vanila RNN을 이용한 SPAM Filter구현
지난 [SPAM FILTER] 간단한 스팸 분류기 포스팅에서는 Scikit-learn 라이브러리와 RandomForest Classifier를 사용해서 간단한 스팸 필터(스팸 분류기)를 만들어보았습니다. 이 스팸 필터의 경우 98%에 가까운 정확도를 보여주었지만, 이는 과대적합의 가능성도 있을 뿐더러(포스팅 당시에는 과대적합여부를 따로 판단하지는 않았습니다.) 단어 사이의 문맥이나 연관 관계를 고려하지 않고, 스팸 메일에 속할만한 단어가 많으면 스팸 메일로 판단할 가능성이 높아지는 방식을 택한다는 한계점이 있었습니다. 따라서 RNN(Recurrent Neural Network)을 이용한 이번 포스팅과 LSTM(Long-Short-Term-Memory)를 이용한 다음 포스팅을 통해서 이를 점진적으로 개선해..
2020.04.19 -
[SPAM FILTER] 간단한 스팸 분류기
이번 포스팅에서는 spamassassin에서 제공하는 스팸 메일과 정상 메일 데이터셋을 가지고 스팸 메일을 분류하는 간단한 머신 러닝 모델을 만들어 보았습니다. 실제로 사용되고 있는 스팸 메일 분류기는 RNN (Recurrent Neural Network)등을 응용한 딥 러닝 모델을 사용하여 높은 정밀도와 효율성을 보여주고 있습니다. 이번에 구현할 스팸 필터 분류기는 주어진 메일에 들어있는 단어들의 집합만을 가지고 메일을 분류하는 모델이기 때문에, 단어의 맥락이나 전체 글의 맥락까지 고려할 수 있는 딥러닝 기반 RNN 스팸 메일 분류기보다는 효율적이지는 못하지만, 그래도 테스트 셋에서 꽤 정밀한 결과를 나타낸다는 점과, 간단한 머신 러닝 모델에 대한 전반적인 파이프라인을 공부한다는 점에서 의의가 있습니다..
2020.04.15 -
[TITANIC] 타이타닉 생존자 예측 모델
이번 포스팅은 Kaggle에서 제공하는 타이타닉 데이터셋을 가지고 어떤 사람이 타이타닉 침몰 상황에서 살아남을 수 있을지를 예측하는 머신 러닝 모델을 만드는 과정에 대해 살펴보려고 합니다. Kaggle Titanic Tutorial 에서 해당 데이터셋과 여러 가지 가이드라인들을 제공받을 수 있으며, 동일한 데이터셋으로 다른 사람들이 어떤 모델을 가지고 어느 정도의 정확도를 나타내었는지도 확인해 볼 수 있습니다. 이번 모델은 MNIST때 사용하였던 RandomForest Classifier를 사용하였으며, 여러 가지 Map함수와, 데이터 전처리를 통해 학습에 용이한 Feature들을 추출하여 학습시켰습니다. 먼저 데이터 분석 및 전처리를 위한 여러 라이브러리들을 Import하고, 데이터셋을 다운받아줍니다...
2020.04.14 -
[MNIST] Random Forest를 이용한 간단한 모델 만들기
MNIST는 기계학습계의 "Hello world"라고 불릴 만큼 유명한 데이터셋입니다. MNIST데이터셋에는 여러 가지 종류가 있지만 이번 포스팅에서는 가장 기초적인 머신 러닝 모델 학습을 위해 숫자 데이터셋을 이용하도록 하겠습니다. 모델은 28*28 크기의 손글씨 숫자 데이터를 입력받아 해당 손글씨가 나타내는 숫자를 출력하는 간단한 모델입니다. 코드는 Jupyter notebook을 이용하여 Python3 환경에서 작성 및 실행되었으며, 제 Github Repository 에 전체 코드가 작성되어 있습니다. 머신러닝 모델을 만들기 전에 해야 할 가장 중요한 일 중의 하나는 모델에 학습시킬 데이터의 형태, 구조등을 분석하는 것입니다. 크기는 어느 정도인지, 몇 가지의 Feature가 있는지, 그리고 그 ..
2020.04.12 -
Principal Component Analysis(PCA)
Overview 머신러닝 혹은 딥러닝으로 모델을 학습시키다 보면, 엄청난 양의 행렬 연산이 요구되는 경우가 다반사입니다. 컴퓨터는 이미지, 데이터 분포등의 정보를 벡터들로 구성하여 인식하는 경우가 많기 때문에 대부분의 전처리된 Input Data는 벡터의 모습을 띄게 됩니다. 하지만 때때로 이 전처리된 벡터의 크기는 굉장히 커서, 딥 러닝 모델에 과도한 부하를 주고 학습의 효율을 떨어뜨립니다. 벡터를 구성하는 모든 차원(크기가 n인 벡터라고 할 때 n차원)의 정보가 의미있는 것은 아니며, 의미있는 부분들만 추려내어 차원을 축소시킬 수 있다면, 이는 데이터의 형태(분포)를 유지하면서 데이터의 크기를 줄여 학습의 효율을 높일 수 있을 것입니다. 예를 들어 아래 그림에서 데이터는 3차원 분포를 나타내지만, 실..
2020.04.02