편집거리 개념 편집거리 알고리즘(Levenshtein Distance)는 두 개의 문자열 간의 편집거리를 측정하는 알고리즘 입니다. 편집 거리는 문자열을 다른 문자열로 변경하는데 필요한 최소한의 삽입, 삭제 및 대체 작업 수를 나타냅니다. 편집거리 알고리즘은 다양한 응용 분야에서 사용될 수 있는데 맞춤법 검사, 음성 인식, 텍스트 유사성 측정 등에서 사용됩니다. 알고리즘 설명 위 예시는 편집거리를 계산하는 것을 보여주는 예시로 비(rain)와 빛나다(shine)로 설명을 합니다. 우선 rain을 shine으로 변환하려면 r을 s로 바꾸고, a를 h로 바꾸고 e를 삽입합니다. 고로 이 편집거리는 3입니다. 기차(rain)와 빛나다(shine)에 대해서 작업을 하게 된다면, shine앞에 t를 붙이고, s를..
DBSCAN의 개념 DBSCAN은 Density-Based Spatial Clustering of Applications with Noise의 약자로, 한국말로 풀이하면 노이즈를 적용한 밀도 기반 공간 클러스터링이라고 해석할 수 있다. 한마디로 Density-Based 알고리즘이기 때문에, "밀도 기반"으로 클러스터링을 하게 된다는 의미이다. K-Means의 문제점 DBSCAN을 이해하기에 앞서, 대표적인 클러스터 알고리즘인 K-Means을 떠올려보자. K-Means은 이상치(outlier)가 있어도 이상치 값을 이해 할 수 없으며, 이상치가 심지어 K-Means를 자신의 주변으로 끌고 와서 centroid값을 바꿔버릴 수 있다. 이는 클러스터의 품질을 심하게 망칠 수 있는 critical risk이다...
KNN 알고리즘 개념 k최근접 알고리즘(k-nearest neighbors algorithm, KNN) 알고리즘은 분류(classify) 문제에도 사용할 수 있고, 회귀(Regression) 문제에도 사용할 수 있으며, 수많은 알고리즘의 중간 과정(예를 들어 추천 알고리즘인 CF에서도 사용)에서도 자주 쓰이는 알고리즘이다. KNN의 k라는 것은 숫자를 뜻하며 여기에 숫자는 이웃이고, k만큼의 이웃을 지정하여 그 이웃들의 값을 토대로 계산한다. KNN은 쉽게 생각하면 유사 알고리즘과 같다 컬럼별로 유사한 이웃들을 찾아서 값을 계산하고, 이를 통해 최종적으로 분류 및 회귀 문제를 풀기 때문이다. 키와 몸무게를 기반으로 헌병과 그외의 보직을 예측한다고 가정을 해보자. 이는 실제 데이터가 아니라 어디까지나 예시..
모멘텀(Momentum) 모멘텀이란 물리학에서 쓰이는 용어인 운동량, 동력을 뜻하며 이를 옵티마이저 개념에 적용한 것이 모멘텀 옵티마이저이다. 우선 모멘텀을 이해하기 위해서는 이전에 등장한 경사하강법 계열들을 이해해야 하는데 이 개념이 나온 이유가 바로 경사하강법 특히 확률적 경사하강법(Stochastic Gradient Descent, SGD)에서 나온 개념이기 때문이다. SGD의 지그재그로 움직이며 최적화되는 것을 해결하기 위해서 나왔으며 너무 왔다갔다 해서 지역 최소값(local minimum)에 갇혀 빠져나오지 못하는 경우가 많은데 이를 위해 관성과 가속도 넣어서 지그재그가 아니라 한 방향으로 좀 더 이동할 수 있게 한 것이다. 현재 이동하는 방향과는 별개로 과거에 이동을 했었던 방향을 기억하여 ..
기계학습(Machine Learning, 머신러닝)과 딥러닝(Deep Learning)이 현재 이정도까지 수준까지 발전하기에는 수많은 사람들의 노력과 정교한 수학적 모델들이 계속 고도화되었으며 많은 사람들이 실제 프로젝트에 활용하면서 무엇이 어떤 상황에 좋고 나쁨을 피드백하거나 논문등으로 발표하기 때문일거라 생각한다. 머신러닝의 성능 개선법 머신러닝, 딥러닝의 성능을 좌우하는 녀석 중에 옵티마이저(Optimizer, 최적화)가 있는데 DB를 잘아는 사람들은 옵티마이저가 최소의 Cost로 결과를 찾아주는 것으로 알고 있을 것이다. 사실 DB와 머신러닝, 딥러닝에서 말하는 옵티마이저의 궁극적인 목적은 동일할 것이다. DB에서 최소의 코스트로 결과를 찾는 개념과 신경망의 모델이 실제 결과와 예측 결과의 차이를..
머신러닝(딥러닝 포함)의 작업에 대해서 아직 많은 사람들이 어떤 부분들이 중요한지 모르며, 간혹 자신의 역할이 매우 작은것이라 생각해서 업무를 비하하는 사람들이 많다. 특히, 데이터 전처리의 경우 "전처리"라는 명칭 때문에 자신의 작업은 사소하고, 마치 축구에서 수비수의 역할과 같다 생각해서 일을 그만두고 모델러로 전향하는 경우가 많은데 정말 잘못된 생각이라 말을 하고 싶다. 머신러닝의 작업 플로우 데이터 수집 (Data Acquisition) 데이터 수집 이전에 데이터 설계, 데이터의 분석 등이 전제되어야 하겠지만 그 부분을 배제하고 개발단으로 설명을 하자면 제일 먼저 데이터를 수집해야 될 것이다. 자연어처리(NLP)의 경우 말뭉치를 만든다던지, 분석을 위한 기본 데이터(Raw Data) 뿐만 아니라 ..
이 포스팅은 직접 구현해본 나이브 베이즈 분류기 #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 포스팅에서 설명하는 스텝 즉 나이브베이즈의 정석인 사전확률, 우도, 사후확률을 쉽게 이해하고자 각각 메소드로 구현을..
4차 산업혁명을 주도하는 것은 무엇일까? IoT? 5G? 3D Print? 블록체인? 뭐 다 맞는말이다 할 수 있지만, 4차 산업혁명이라는 것을 제대로 만들어주는 공격수는 인공지능(Artificial Intelligence)이라 할 수 있겠다. 5G가 된다 한들 우리는 4차 산업혁명이라는 것을 인지하지 못한다. 그리고 우리가 사용하고 있는 수많은 IT 기기들이 있다고 해도 IoT가 4차 산업혁명의 주역이라 인지하지 못할 것이다. 왜냐하면 3차 산업혁명과 차이점을 명확히 하기가 힘들기 때문이다. 우리의 머리속에 4차 산업혁명은 로봇들과 수많은 AI가 가득할 것이다. 즉 로봇들과 인간들이 공존하고, 인간의 업무를 대체하거나 편리하게 해주는 세상. 즉, 4차 산업혁명의 핵심은 인공지능이라고 자신있게 말할 수 ..
머신러닝(Machine Learning) 즉, 기계학습이란 컴퓨터가 학습을 통해서, 기계에게 지식을 주입하는 것을 말한다. 우리가 어떠한 사람에게 "우리나라 수도인 서울은 대한민국에서 가장 인구가 많은 도시야"라고 누군가에게 지식을 전달 했을 때, 그 지식을 습득한 당사자는 "한 나라에서 인구가 가장 많은 도시는 수도일 확률이 높겠군"이라고 생각할 수 있다. 즉 이러한 어찌보면 확률을 컴퓨터에게 심어주는 것이 머신러닝이다. 기계학습의 종류는 크게 지도학습과 비지도학습으로 나뉘는데 최근에는 딥러닝으로 인해서 강화학습이 추가되어 3가지로 나뉘는 경우가 많다. 그럼 각각의 학습에 대한 정의는 무엇이고, 어떠한 알고리즘이 있는지 확인해보도록 하자 1. 지도학습(Supervised Learning) 가장 기본이 ..
이 포스팅은 머신러닝 및 데이터마이닝, 인공지능을 위한 파이썬 강좌입니다. 추후 간단한 머신러닝과 추천에 관련된 데이터마이닝을 할 예정입니다. Java로 가능한 부분은 Java와의 코드를 비교하여 파이썬의 속도 및 수준등을 비교 할 예정입니다. 현재 이 글을 쓰고 있는 사람은 데이터마이닝(추천 관련)을 전문적으로 하고 있으나, 파이썬에 대해서는 아직은 기초지식만 가지고 있는 상태이고, 여러가지의 책들과 포스팅등을 통해서 저 역시 공부를 하면서 포스팅을 하고 있으니 비슷한 수준이구나 생각하시면서 보시면 됩니다. 이 포스팅을 읽는 대상은 프로그래밍을 배우지 않는 분들도 쉽게 따라할 수 있게 할 예정입니다. 추후 이 포스팅은 제가 다니고 있는 회사분들에게 강의를 하는 목적도 가지고 있기 때문에 최대한 쉽게 작..
인공지능이라는 개념을 제일 처음 만든 사람은 누구일까? "이미테이션 게임"이라는 영화를 본 사람은 튜링이 마지막에 기계와 인간 사이에서 혼란을 느끼는 장면에 의아해 했을 것이다. 앨런 튜링은, 최초의 컴퓨터(물론 기준을 어떤걸로 잡느냐에 따라서 최초냐 아니냐 말이 많다.)를 만드는 것부터 시작해서 인공지능의 개념까지 만든 컴퓨터계에서 입지전적인 인물이다. 베네딕트 컴버배치와 전혀 안 닮았지만, 왠지 튜링은 베네딕트와 더 어울린다.;;; 사람들마다 인공지능에 대한 기준이 존재한다. 누구는 정말 인간같이 똑같이 생각하는 마치 "매트릭스"에서의 컴퓨터 수준의 인공지능으로 볼 수 있지만, 앨런 튜닝은 간단했다. 인간이 컴퓨터와 대화를 하는데 컴퓨터를 사람으로 착각한다면, 해당 컴퓨터는 사고를 가지고 있고, 그것..