KNN 알고리즘 개념 k최근접 알고리즘(k-nearest neighbors algorithm, KNN) 알고리즘은 분류(classify) 문제에도 사용할 수 있고, 회귀(Regression) 문제에도 사용할 수 있으며, 수많은 알고리즘의 중간 과정(예를 들어 추천 알고리즘인 CF에서도 사용)에서도 자주 쓰이는 알고리즘이다. KNN의 k라는 것은 숫자를 뜻하며 여기에 숫자는 이웃이고, k만큼의 이웃을 지정하여 그 이웃들의 값을 토대로 계산한다. KNN은 쉽게 생각하면 유사 알고리즘과 같다 컬럼별로 유사한 이웃들을 찾아서 값을 계산하고, 이를 통해 최종적으로 분류 및 회귀 문제를 풀기 때문이다. 키와 몸무게를 기반으로 헌병과 그외의 보직을 예측한다고 가정을 해보자. 이는 실제 데이터가 아니라 어디까지나 예시..
텐서(Tensor)라고 하면 텐서플로우를 떠올리기 쉽지만, 사실 딥러닝에서는 데이터를 처리하기 위한 데이터의 형태라고 이해하면 된다. 0차원의 데이터는 보통 스칼라(Scalar)라고 하는데 파이토치에서는 0-Tensor(랭크 0)이며, 스칼라 데이터의 나열인 벡터는 1-Tensor(랭크 1), 행렬은 2-Tensor(랭크 2)이다. 텐서는 파이썬의 대표적인 라이브러리인 넘파이(numpy)와 유사하고 넘파이와 데이터를 쉽게 서로 변환 할 수도 있다. 위 내용들을 좀 더 쉽게 설명하자면, 우리가 프로그램으로 사용하는 변수들을 딥러닝으로 처리하기 위해서는 변환을 해야 하는데 그 단위가 바로 텐서라고 생각하면 된다. 텐서 데이터타입 [1] 데이터 타입 dtype CPU tensor GPU tensor 32-bi..
파이토치(Pytorch)는 페이스북에서 바톤터치를 한 이후 계속 만들고 잘 관리하고 있으며 한 때 텐서플로우로 딥러닝 시장이 제패될 것 같던 상황에서 파이토치가 기가 막히게 생명력을 유지하면서 최근에는 특정 분야는 더 앞서는 모습을 보여주기도 한다. Pytorch는 그냥 학문에서나 쓰이며 박사나 일부 연구원들이 사용하는 것이라 다짐하며, 다시는 배우지 않을거라 생각했지만 최근 들어 자연어처리쪽의 파이토치의 약진이 무섭다. 그래서 신기술을 빠르게 익히기 위해서 Pytorch를 배운다는 것은 선택이 아니라 필수가 되어 버렸다. 그럼 설치와 사용에 앞서 각각은 언제 사용하는 것이 좋은지 해외 아티클들을 뒤지면서 정리해보았다. Pytorch vs Keras vs Tensorflow 우선 초창기의 텐서플로우(Te..
결정 트리 혹은 의사결정 나무(Decision Tree) 분류기는 무언가를 설명할 때, 매우 유용한 퍼포먼스를 보여주는 모델이다. 최근에는 설명 가능한 인공지능(Explainable AI, XAI)이라는 것이 이슈이며, 몇몇 국회의원은 IT 기업들의 알고리즘을 공개해야 된다는 이야기까지 나오기도 하였다. 또다른 관점으로는 새로운 서비스의 창출이다. 예를 들어, 설명을 할 수 있을 정도의 모델이라면 리포트(Report)를 보여준다던지, 설명 값을 토대로 다른 서비스를 만들 수도 있을 것이다. 결정 트리는 바로 이러한 방식에 특화된 알고리즘이며, 설명이 가능한 것을 제외하고 나쁘지 않을까 생각할 순 있지만, 아직도 많이 사용될 정도로 성능 또한 뒤쳐지지 않는다. 결정 트리의 구성도 일단 결정 트리인 이유는 ..
해밍 거리(Hamming Distance)는 리차드 웨슬리 해밍이라는 수학자가 만든 같은 크기를 가진 데이터를 놓고, 같은 위치에 있는 값들끼리 비교를 하는 매우 직관적인 알고리즘이다. 해밍거리 예시 "머신러닝"과 "머신건"이 얼마나 유사한지 해밍 거리로 비교를 해보자. 머 신 러 닝 머 신 건 O O X X 위와 같이 총 2개가 유사하고, 2개는 다르기에 둘간의 거리는 즉 2가 된다. 여기서 머신건은 3글자이고 머신러닝은 4글자이기 때문에 부족한 글자는 공백으로 치환을 하고 계산을 해야 한다. 계산을 할 때 공백을 추가하지 않을 경우 에러가 발생된다. 글자수가 다를 경우 에러 화면 Traceback (most recent call last): File "E:/Python/Post/similar/hamm..
데이터 분석을 해야 하거나 할 줄 아는 사람이라면 처음에 데이터의 형태를 파악해야 할텐데 히스토그램(Histogram)은 데이터의 분포도를 볼 때 매우 유용한 통계 시각화 기법이다. 원래 통계 기법은 R이 상징적인 언어였으나 최근에는 데이터 분석을 하는 사람들이 굳이 R로 하지 않고 파이썬에서 하는 경우가 많아졌다. 히스토그램용 데이터 가져오기 (housing dataset) import os import tarfile import urllib.request as urllib import pandas as pd data_url = "https://raw.githubusercontent.com/ageron/handson-ml2/master/datasets/housing/housing.tgz" data_pa..
자카드 유사도(Jaccard Similarity)니, 자카드 계수(Jaccard Coefficient)니 자카드 지수(Jaccard Index)니 사실 다 같은 말이지만 여기서는 제목을 자카드 유사도로 지정하였고, 많은 사람들이 자카드 다음에 유사도를 더 많이 검색을 하는 것 같아서 본 포스팅은 자카드 유사도로 용어를 통일하도록 한다. 유사도(Similairy) 유사도란 A라는 아이템과 B라는 아이템이 얼마나 유사한가를 수치로 표현한 값이다. 유사도 측정 방법에는 유클리디안 거리, 맨하튼 거리, 피어슨 상관 계수, 코사인 유사도, 자카드 유사도, 타니모토 유사도 등이 있으며 가장 보편적으로 유클리디안, 자카드, 피어슨 상관 계수, 코사인 등을 활용하고 있다. 사실 자카드 유사도라는 것을 설명해야 될 것인..
트랜스퍼 러닝(Transfer Learning) 즉 전이 학습은 특정 태스크에서 학습된 모델을 이용하여 다른 태스트에 재사용하는 기법을 말한다. 전이 학습은 최근 들어 자연어 처리 분야에 상당 부문 많이 활용이 되고 있는데 BERT(Bidirectional Encoder Representations from Transformers)나 GPT(Generative Pre-trained Transformer)와 같은 모델을 이용하여 대규모의 데이터셋을 학습하고 이 학습된 모델을 토대로 다른 분야에 많이 활용 되곤 한다. 전이학습을 사용하는 이유 일반적으로 전이학습이 없이 모두 한번에 학습하는 일반적인 방식은 속도도 매우 오래 걸리고, 태스크(Task)간의 최적화를 이루어낼 수 없다. 이를 현실 세계로 예시를 ..
보통 문자열을 인식하는 기능등은 많은 라이브러리나 정규표현식으로 쉽게 가져올 수 있지만 한자만 가지고 오는 방법은 별도의 작업을 수행해야 한다. 사실 한자라는 것이 무궁무진한 글자이고 한글과 다르게 무한대로 확장이 가능한 글자라서 컴퓨터 영역에서는 표현하기가 상당히 까다로운데 이럴땐 유니코드를 이용해서 추출하거나 인식할 수 있다. Java 소스 코드 public static void main( String[] args ) { String text = "가불有 大韓民國"; for(int i = 0; i = '\u2E80' && charAt = '\u3400' && charAt = '..
이진화(binarization) 이진화는 숫자의 값을 0 혹은 1의 값으로 변환하는 것을 말한다. 대표적으로 활용되는 것으로 0~255의 값을 0-1의 흑백 값으로 변환하는 이미지 이진화가 대표적이며, 그외에도 데이터를 압축하기 위해서도 활용이 된다. 이진화를 만들기 위해서는 기준값(threshold)가 필요한데 이 기준값보다 높으면 1, 낮으면 0의 값을 세팅하는 어찌보면 매우 간단한 기능이라 할 수 있다. 충분히 개인이 펑션등을 만들어서 이진화를 구현할 수 있지만 여기서는 사이킷런(Sci-kit)에서 제공하는 전처리(preprocessing) 라이브러리로 이진화 기능을 사용해보도록 한다. 이진화 예제 from sklearn import preprocessing X = [[-1,2,3],[-0.2,0...
모멘텀(Momentum) 모멘텀이란 물리학에서 쓰이는 용어인 운동량, 동력을 뜻하며 이를 옵티마이저 개념에 적용한 것이 모멘텀 옵티마이저이다. 우선 모멘텀을 이해하기 위해서는 이전에 등장한 경사하강법 계열들을 이해해야 하는데 이 개념이 나온 이유가 바로 경사하강법 특히 확률적 경사하강법(Stochastic Gradient Descent, SGD)에서 나온 개념이기 때문이다. SGD의 지그재그로 움직이며 최적화되는 것을 해결하기 위해서 나왔으며 너무 왔다갔다 해서 지역 최소값(local minimum)에 갇혀 빠져나오지 못하는 경우가 많은데 이를 위해 관성과 가속도 넣어서 지그재그가 아니라 한 방향으로 좀 더 이동할 수 있게 한 것이다. 현재 이동하는 방향과는 별개로 과거에 이동을 했었던 방향을 기억하여 ..
바로 이전 포스팅에서는 형태소 분석기별 가장 중요한 명사를 추출하는 성능(속도 측면)을 비교해 봤습니다. 품사 태깅(pos-tagging)은 우리가 흔히 형태소 분석기라는 말과 동의어로 생각하는 기능으로 명사만 추출하는게 아니라 문장의 모든 품사를 분석하게 됩니다. 명사만 추출하는 것은 사실 어렵지 않습니다. 단어안에 명사를 그냥 찾으면 그만이니까요. 하지만 pos-tagging은 한국어 문법을 제대로 이해해야 하고, 분석 방법과 퀄리티에 따라 속도에 큰 영향을 주게 됩니다. 즉, 명사만 추출하는 것으로 속도가 오래 걸리지 않지만 대다수 pos-tagging 작업으로 인해서 형태소 분석기가 오래 걸리게 되는 것이죠. 예를 들어, 자모 단위로 분리해서 분석을 한다면 상당히 큰 cpu 자원을 사용할 수도 있..