순환신경망(RNN)의 개념 순환신경망(Recurrent Neural Network, RNN)은 입력과 출력을 시퀀스(Sequence) 단위로 처리하는 모델이다. 여기서 시퀀스란 연관된 연속의 데이터를 의미하며, 시계열 데이터에 적합한 신경망 모델이라 할 수 있다. ex) 자연어 처리, 순서를 가지는 정보, 연속적인 시간 간격으로 배치된 데이터 심층 신경망(Deep Neural Network, DNN)의 경우 파라미터들이 모두 독립적이었으나, RNN의 파라미터들은 모두 공유하는 것이 특징이다. 장기 의존성 문제점 (Long-Term Dependency Problem) 일반적인 RNN의 경우 짧은 시퀀스를 처리할 경우 유리하며, 관련 정보와 그 정보를 사용하는 지점 사이 거리가 멀어지는 경우 학습 능력이 현..
머신러닝(딥러닝 포함)의 작업에 대해서 아직 많은 사람들이 어떤 부분들이 중요한지 모르며, 간혹 자신의 역할이 매우 작은것이라 생각해서 업무를 비하하는 사람들이 많다. 특히, 데이터 전처리의 경우 "전처리"라는 명칭 때문에 자신의 작업은 사소하고, 마치 축구에서 수비수의 역할과 같다 생각해서 일을 그만두고 모델러로 전향하는 경우가 많은데 정말 잘못된 생각이라 말을 하고 싶다. 머신러닝의 작업 플로우 데이터 수집 (Data Acquisition) 데이터 수집 이전에 데이터 설계, 데이터의 분석 등이 전제되어야 하겠지만 그 부분을 배제하고 개발단으로 설명을 하자면 제일 먼저 데이터를 수집해야 될 것이다. 자연어처리(NLP)의 경우 말뭉치를 만든다던지, 분석을 위한 기본 데이터(Raw Data) 뿐만 아니라 ..
단어들이나 문장들을 벡터로 표현이 가능할 경우 이 벡터간의 거리를 이용해서 유사성을 알 수 있으며 본 포스팅은 대표적으로 많이 활용하는 코사인 유사도를 설명하고 문장간의 유사도를 Python으로 구현해보도록 한다. 코사인 유사도는 벡터간의 코사인 각도를 이용하여 서로간에 얼마나 유사한지를 산정한다. 각도를 유사도로 판별하기 때문에 거리가 중요하지 않을 경우 사용되는 방식이라 할 수 있겠다. 예를 들어 다음과 같은 문장이 있다고 가정을 해보자 첫번째 문장 : 안녕하세요 저는 자비스 입니다. 두번째 문장 : 안녕하세요 저는 자비스 입니다. 안녕하세요 저는 자비스 입니다. 위 문장에서는 동일한 내용을 다루고 있다. 공백기준으로 벡터화를 한다면, 첫번째 문장은 [안녕하세요, 저는, 자비스, 입니다] 정도로 벡터..
이 포스팅은 직접 구현해본 나이브 베이즈 분류기 #1에 연이은 포스팅으로 #1을 아직 못보신 분들은 이전 포스팅을 읽고 오셔야 이해가 될 것이다. #1 포스팅을 보고 싶으면 본 포스팅의 끝에 있는 연관 글을 찾고 해당 글을 클릭하면 된다. 빈도테이블의 값 출력(디버깅) for(String feat : freqMap.keySet()) { System.out.println(feat + "=>" + freqMap.get(feat)); } temperature=>{mild={no=2, yes=4}, cool={no=1, yes=3}, hot={no=2, yes=2}} humidity=>{normal={no=1, yes=6}, high={no=4, yes=3}} outlook=>{rainy={no=2, yes=3..
이 포스팅은 머신러닝 알고리즘 중 하나인 나이브 베이즈 분류기를 자바(Java)로 구현해본 것으로 개발자가 쉽게 접근할 수 있는 것을 목표로 합니다. 쉽고 강력한 머신러닝, 나이브 베이즈 분류 (Naive Bayes Classification) 쉽고 강력한 머신러닝, 나이브 베이즈 분류 (Naive Bayes Classification) ※ 베이즈 정리를 모르는 분들은 나이브 베이즈를 알기에 앞서 베이즈 정리에 대해서 먼저 이해해야 한다. 확률의 함정을 간파, 베이즈 정리(Bayes' Theorem) 확률의 함정을 간파, 베이즈 정리(Bayes' T needjarvis.tistory.com 포스팅에서 설명하는 스텝 즉 나이브베이즈의 정석인 사전확률, 우도, 사후확률을 쉽게 이해하고자 각각 메소드로 구현을..
파이썬은 데이터 분석에 매우 강력한 기능을 제공하고 있고, 나이브베이즈와 같은 머신러닝은 sklearn(sk런 혹은 사이킷 런이라고 말함)에서 다양한 라이브러리를 제공한다. 나이브베이즈에 대해서 제대로 모르는 분들이 계시다면, 우선 필자가 작성했던 나이브베이즈 포스팅을 보면 이해가 될 것이다. 쉽고 강력한 머신러닝, 나이브 베이즈 분류 (Naive Bayes Classification) 쉽고 강력한 머신러닝, 나이브 베이즈 분류 (Naive Bayes Classification) ※ 베이즈 정리를 모르는 분들은 나이브 베이즈를 알기에 앞서 베이즈 정리에 대해서 먼저 이해해야 한다. 확률의 함정을 간파, 베이즈 정리(Bayes' Theorem) 확률의 함정을 간파, 베이즈 정리(Bayes' T needja..
※ 베이즈 정리를 모르는 분들은 나이브 베이즈를 알기에 앞서 베이즈 정리에 대해서 먼저 이해해야 한다. 확률의 함정을 간파, 베이즈 정리(Bayes' Theorem) 확률의 함정을 간파, 베이즈 정리(Bayes' Theorem) 베이즈 정리는 일반인들이 알고 있던 통계의 지식을 무너트리는 역할을 한다. 물리학도가 양자역학의 개념을 배울 때 새로운 신세계가 열리는 것처럼 통계에서 베이즈가 그런 역할을 하는 것 needjarvis.tistory.com 나이브 베이즈(Naïve Bayes Classification)의 개념 - 데이터가 각 클래스에 속할 특징 확률을 계산하는 조건부 확률 기반의 분류 방법이다. - 나이브(Naïve) : 예측한 특징이 상호 독립적이라는 가정 하에 확률 계산을 단순화, 나이브라는..
과적합의 개념 - 데이터가 너무 Fit하게 학습이 되면서 생기는 문제를 과적합(Over-fitting)이라 부르며, 데이터의 학습이 제대로 되지 않는 상태인 반대 개념을 언더 피팅(Under-fitting)이라 한다 과적합이 발생하는 사유 학습 데이터가 너무 적은 경우 학습 데이터 전처리를 잘못한 경우 특징(Feature) 데이터가 너무 많은 경우 과적합 사례 예를 들어 다음과 같은 설문조사 데이터를 학습 데이터로 사용해보고자 한다. 우리나라 특별시, 광역시, 도를 기반으로 지역 값을 생성하고 10대, 20대와 같은 나이대를 값으로 생성하며, 성별 값, 학력을 feature data로 놓고 최종 labeling 할 데이터를 연봉이라고 가정을 해보자 지역 설계 서울시 0 대전 1 세종 2 광주 3 울산 4..
척도(Metrics)의 개념 척도라는 것은 어떤 모델을 평가(Evaluate)하기 위해서 사용하는 값이다. 그러다보니 비슷한 개념의 목적/손실함수(Loss Function)와의 개념이 헷갈릴 수 있다. 손실함수는 모델의 성능을 끌어올리기 위해서 참조하는 값이다. 즉, 트레이닝(training, 학습)을 위해서만 사용하는 나침반과 같은 존재라고 한다면, 척도는 결과적으로 이 모델의 성능은 얼마짜리야라는 개념이다. 그렇기 때문에 척도와 손실 함수의 개념은 분리되어야 하지만 경우에 따라서는 특정 척도에 따라 최적화 하는 것이 최상일 때도 있다. 둘간의 개념이 사실상 유사하기 때문에 동일한 개념으로 어쩔땐 척도를 사용하기도 하고 어쩔땐 손실함수를 쓰기도 한다. 척도의 종류 정확도(Accuracy) 사실상 가장 ..
목적/손실 함수(Loss Function) 이란? 딥러닝 혹은 머신러닝은 컴퓨터가 가중치를 찾아가는 과정이다. 일단 아래 예를 보도록 해보자. 4 = 2a + b 6 = 3a + b 이와 같은 문제가 있다고 가정을 해보자, 사람들에게 a와 b에 들어가야 되는 답은 무엇인가? 라고 물어본다면 값을 대입해서 문제를 풀어본다던지 직관적으로 풀어본다던지 아니면 여러가지 공식을 써서 풀어본다던지 할 것이다. 2번과 3번과 같은 경우 컴퓨터에게 시키기에는 매우 힘든 작업이다. 반대로 값이 엄청 많을 경우 1번은 인간에게 힘들 수 있다. 물론 위의 문제는 너무 쉽기 때문에 값을 대충 대입해서도 충분히 맞출 것이다. 컴퓨터는 기본적으로 첫번째 방법인 값을 대입해서 문제를 풀어본다. 그래서 대입한 결과와 실제 정답간의 ..
딥러닝(Deep Learning)을 이해하기 위해서는 몇가지 개념들을 확실히 익히고 넘어가야 한다. 사실 딥러닝이라는 것은 프로그램적인 요소보다는 이미 만들어진 것을 어떻게 잘 조율해서 사용해야 하는지에 더 달려있기 때문에(요즘 트렌드 자체가 know-where 이기도 하고...) 너무 복잡하게 수식을 이해할 필요도 없고 간단하게 이해하고 넘어가도 딥러닝을 구현하는데 크게 지장이 없을 것이다. 논문을 쓰고 완전히 이쪽길로 깊게 공부하는 사람들은 당연히 수식까지 짜면서 공부를 해야 하겠지만 개발자이기도 하고 딥러닝도 어느정도 핸들링하는 사람들이라면 어느때에 이 기술이 좋더라 정도만 알아도 개발하는데 전혀 지장이 없다. 활성화 함수(Activation Function) 개념 딥러닝은 다양한 레이어(layer..
필자의 주특기(?)중 하나가 추천 알고리즘을 만드는 것이기 때문에 추천 시스템에 대해서 간략히 적어보도록 하겠다. 사실 최근에 유튜브에서 유행하는 댓글 중에 이런 말이 있다. "유튜브의 알고리즘이 나를 여기로 이끌었다." 나를 왜 이 영상을 보게 만들었는지 모르겠지만 봐보니 재미있다 이런 내용들이 많은 이 드립에 사람들은 유튜브에 경의(敬意)를 표하게 된다. 그러나 사실 크게 어려운 개념이 아니라서, 이번 포스팅에 바로 이 추천 시스템 혹은 추천 엔진(Recommender Engine)에 대해서 설명하고 어떤 알고리즘들이 있는지를 확인해보도록 하겠다. 관심이 있을만한 컨텐츠를 추천하는 추천 시스템추천 시스템(Recommender System)의 개념- 컨텐츠의 내용에 기반하거나, 사람들의 행동들을 모은 ..