본문 바로가기

분류 전체보기

(174)
Faiss를 이용한 K-means구현 [사이킷런에 비해 8X 빠르고, 27X 적은 에러 구현] 페이스북에서 대용량 벡터(Vectoer)의 유사도(Similarity)검색을 위한 오픈소스 Faiss를 공개하였는데요. SIFT데이터셋을 사용하여 데이터가 10만개일 때는 쿼리 속도가 20ug로 종전의 최고 성능과 유사하지만 데이터가 10억개일 때는 17.7us로 종전 최고 성능보다 8배 정보 빠르게 구현할 수 있다고 합니다. 아쉽게도 현재 Linux와 OSX(Mac)만을 지원하고 있습니다. Faiss을 통해 K-Means를 빠르게 단 몇줄의 코딩으로 구현을 할 수 있게 됩니다. faiss library를 설치합니다. faiss가 포함된 k-means는 일반적인 Scikit-Learn에 비해 매우 빠르게 실행이 됩니다. import numpy as np import faiss class FaissKMea..
감성 분석 (Sentiment Analysis) - 비지도학습 기반, VADER 비지도 감성 분석은 Lexicon을 기반으로 합니다. 많은 감성 분석용 데이터는 이러한 결정된 레이블 값을 가지고 있지 않습니다. 이러한 경우에 Lexicon은 유용하게 사용될 수 있습니다. (검색을 통해 여러가지 한글 Lexicon을 찾아볼 수 있습니다.) 텍스트 분석(Text Analytics)을 하다보면 시맨틱(Semantic)이라는 용어를 자주 접하게 될 것입니다. '문맥상 의미'입니다. 이 문맥상 의미에 따라 동일한 단어라도 완전하게 달라지기 떄문에 제공되는 감성사전은 이 문맥을 파악하는데 가장 중점을 두고 있습니다. 감성사전을 위한 몇가지 사전은 하기와 같습니다. 1. NLTK: 시맨틱을 프로그램적으로 인터페이스화 할 수 있게 제공합니다. 제공되는 WordNet은 다양한 상황에서 같은 어휘라도..
감성 분석 (Sentiment Analysis) - 지도학습 기반 감성 분석에 있어 지도 학습은 학습 데이터와 타깃 레이블 값을 기반으로 감성 분석 학습을 수행한 뒤 이를 기반으로 다른 데이터의 감성 분석을 예측하는 방법으로 일반적인 텍스트 기반의 분류와 거의 동일합니다. 실습데이타는 이곳에서 다운로드합니다. [링크] labeledTrainData.tsv 이 화일을 다운로드하면 됩니다. 1. 화일 다운로드 후 불필요한 내용을 정리하기 위한 string 정리를 합니다. import pandas as pd import re review_df = pd.read_csv('C:\\Users\\HANA\\PycharmProjects\\HANATOUR\\NLP\\TEXT_Example\\labeledTrainData.tsv', header=0, sep="\t", quoting=3)..
머신러닝 모델의 예측 평가에 대해 #2 - 오차행렬 & F1 Score 오차 행렬 (Confusion Matrix) 이진 분류에서 성능 지표로 잘 활용되는 오차행렬(Confusion Matrix)은 학습된 분류 모델이 예측을 수행하면서 얼마나 혼동하고(Confusion)있는지를 보여주는 지표입니다. 즉, 이진 분류의 예측 오류가 얼마인지와 더불어 어떠한 유형의 예측 오류가 발생하고 있는지를 함께 나타내는 지표입니다. 오차 행렬은 4분면 행렬에서 실제 레이블 클래스 값과 예측 레이블 클래스 값이 어떠한 유형을 가지고 매핑되는지를 나타냅니다. 4분면의 왼쪽, 오른쪽을 예측된 클래스 값 기준으로 Negative와 Positive로 분류하고, 4분면의 위, 아래를 실제 클래스 값 기준으로 Negative와 Positive로 분류하면 예측 클래스와 실제 클래스의 값 유형에 따라 결정..
Python에서의 lambda(람다) Function의 사용 Python에서의 Lambda는 한시적으로 사용하는 함수의 정의를 의미합니다. 즉 일반적 함수로 def 선언을 해주는 것이 아니라 필요한 곳에서 사용하고 즉시 폐기되는 함수입니다. Lambda는 명료하며 ML에서 자주 사용을 하게 되는데 무엇보다 매우 빠른 연산 처리에 능합니다. 하기 형식으로 표현이 됩니다. 잘 이용하면 Python의 Loop, for를 대체하며 속도를 높일 수 있습니다. Lambda 인자리스트 : 표현식 아래의 형식을 확인하면 간단하게 이해할 수 있습니다. 람다 정의에서는 "return"문이 포함되어 있지 않습니다. g = lambda x:x**2 print(g(8)) f = lambda x,y:x+y print(f(2,2)) 만약 "return"문과 유사하게 반환 값을 만드는 표현식..
Data Scientist, ML Engineer가 구독해야 할 Youtube - 렉스 프리드먼 (Lex F ridman), 켄 지(Ken Jee), 야닉 킬처(Yannic Kilcher), 조던 해로 드(Jordan Harrod) 1. 렉스 프리드먼 (Lex F ridman) 머신 러닝 실무자에게 가장 통찰력있는 채널이라 할 수 있습니다. Lex Fridman 자신과 컴퓨팅, 기계 학습, 딥 러닝, AI 등과 같은 분야의 선구자 또는 최고 전문가와의 통찰력있는 대화를 합니다. 기술적인 내용보다 ML.AI가 우리의 미래를 어떻게 변하게 할지에 대한 자극을 주게 됩니다. Lex Fridman Videos exploring research topics in artificial intelligence, deep learning, autonomous vehicles, and beyond. www.youtube.com 2. 켄 지(Ken Jee) 데이터 과학 분야에서 경력을 가지고 있는 험을 가진 가장 재미있는 데이터 과학 YouTube 인..
문서 유사도 측정 - 코사인 유사도(Cosine Similarity)와 실전 연습 코드 문서와 문서 간의 유사도 비교는 일반적으로 코사인 유사도(Cosine Similarity)를 사용합니다. 코사인 유사도는 벡터와 벡터 간의 유사도를 비교할 때 벡터의 크기보다는 벡터의 상호 방향성이 얼마나 유사한지에 기반합니다. 즉 코사인 유사도는 두 벡터 사이의 사잇각을 구해서 얼마나 유사한지 수치로 적용한 것입니다. 코사인 유사도가 문서의 유사도 비교에 가장 많이 사용되는 이유는 문서를 피처 벡터화 변환하면 차원이 매우 많은 희소 행렬이 되기 쉽습니다. 이러한 희소 행렬 기반에서 문서와 문서 벡터간의 크기에 기반한 유사도 지표는 정확도가 떨어지기 쉽습니다. 또한 문서가 매우 긴 경우 단어의 빈도수도 더 많을 것이기 때문에 이러한 빈도수에만 기반해서는 공정한 비교를 할 수 없습니다. - 코사인 유사도(..
머신러닝 모델의 예측 평가에 대해 #1 - Intro & 정확도 (Accuracy) ML의 모델 평가 Intro 머신러닝 모델은 여러 가지 방법으로 예측 성능을 평가할 수 있습니다. 성능 평가 지표값과 예측값의 오차 평균값에 기반합니다. 성능 평가 지표는 일반적으로 모델이 분류 혹은 회귀에 따라 여러 종류로 나뉩니다. 회귀의 경우 대부분 실제값과 예측값의 오차 평균값에 기반합니다. 예를 들어 오차에 절댓값을 씌운 뒤 평균 오차를 구하거나 오차의 제곱 값에 루트를 씌운 평균 오차를 구하는 방법과 같이 기본적으로 예측 오차를 가지고 정규화 수준을 재가공하는 방법이 회귀의 성능 평가 지표 유형입니다. 분류의 평가방법도 일반적으로는 실제결과가 데이터와 예측 결과 데이터가 얼마나 정확하고 오류가 적게 발생하는가에 기반하지만, 단순히 이러한 정확도만 가지고 판단했다가는 잘못된 평가 결과에 빠질 수..
Pycharm과 Jupyter Notebook 연결하기 Python에서 가장 유명한 IDE인 PyCharm에서 Jupyter NoteBook을 연결하는 방법에 대해 알아보겠습니다. 우선 Anaconda를 설치해야 합니다. Python의 ML과 AI Platform으로 데이타사이언티스티라면 모두가 사용할 것 같습니다. Anaconda에서는 Python 기본 지원하는 것은 물론, Numpy, Pandas, Tensorflow 등의 데이터 분석에 꼭 필요한 수많은 Python Library를 집합해 두어 Anaconda만 설치를 하여도 데이타 분석에 필요한 다양한 Library를 일일이 설치하는 번거로움을 덜 수 있습니다. [다운로드] Anaconda에 설치된 내용 중 Jupyter NoteBook의 장점은 셀 단위로 작성하여 실행할 수 있기에 큰 파이썬 파일도 ..
한글 텍스트 처리 위한 KoNLPy를 이용한 네이버 영화 평점 감정 분석 일반적으로 한글 언어 처리는 영어 등의 라틴어 처리보다 어렵습니다. 그 주된 원인은 '띄어쓰기'와 '다양한 조사'때문입니다. 잘 알다시피 한글은 띄어쓰기를 잘못하면 의미가 왜곡되어 전달될 수 있습니다. 또 하나 한글 언어 처리의 어려움은 '조사'처리입니다. 조사는 주어나 목적어를 위해 추가되며, 워낙 경우의 수가 많기 때문에 어근 추출(Stemming/Lemmatization)등의 전처리시 제거하기가 까다롭습니다. KoNLPy는 파이썬의 대표적인 한글 형태소 패키지입니다. 형태소의 사전적인 의미는 '단어로서 의미를 가지는 최소 단위'로 정의할 수 있습니다. 형태소 분석(Morphological Analysis)이란 말뭉치를 이러한 형태소 어근 단위로 쪼개고 각 형태소에 품사 태깅을 부탁하는 작업을 일반적..
문서 군집화 실전 예제 - Opinion Review Data Set 문서 군집화는 비슷한 텍스트 구성의 문서를 군집화(Clustering)하는 것입니다. 문서 군집화는 동일한 군집에 속하는 문서를 같은 카테고리 소속으로 분류할 수 있으므로 앞에서 소개한 텍스트 분류 기반의 문서 분류와 유사합니다. 하지만 텍스트 분류 기반의 문서 분류는 사전에 결정 카테고리 값을 가진 학습 데이터 세트가 필요한 데 반해, 문서 군집화는 학습 데이터 세트가 필요없는 비지도학습 기반으로 동작합니다. 예제는 UCI의 Opinion Review의 데이타를 이용합니다. 하기 화일을 다운로드 후 압축을 풀어도 됩니다. import pandas as pd import glob, os path = r'C:\\Users\\HANA\\PycharmProjects\\HANATOUR\\NLP\\TEXT_Exa..
[TIP] Pycharm, Run Window에서 결과 값 전체 보이게 하기 Pycharm에서 Python을 실행 후 결과값이 너무 길어 Row와 Column의 값이 생량되어 "..."형태로 잘리는 경우가 있습니다. 원인은 Pandas의 기본 max_rows와 max_colwidth가 각 60과 50으로 되어 있어 그 이상이 넘어가면 결과가 ... 형태로 변경이 되게됩니다. import pandas as pd print(pd.get_option('display.max_rows')) print(pd.get_option('display.max_colwidth')) 이럴경우 display.max_colwidth와 display.max_rows속성을 set_option을 이용하여 조절하면 됩니다. None인 경우 모든 결과를 추출하며 숫자를 넣어주면 그에 맞게 조정이 됩니다. impor..
텍스트 분류 실전 예제 - 뉴스그룹 분류 [추천시스템 구축을 위한 텍스트 분석 이해 #2 - BOW]에서 설명했듯 텍스트를 피처 벡터화로 변환하면 일반적으로 희소 행렬 형태가 됩니다. 그리고 이러한 희소 행렬에 분류를 효과적으로 잘 처리할 수 있는 알고리즘은 로지스틱 회귀, 선형 서포트 벡터 머신, 나이브 베이즈 등입니다. 텍스트를 기반으로 분류를 수행할 때는 먼저 텍스트를 정규화한 뒤 피처 벡터화를 적용합니다. 이 후 적합한 머신러닝 알고리즘을 적용해 분류를 학습/예측/평가합니다. 실습을 위해 사이킷런의 fetch_20newsgroups() API를 이용해 뉴스그룹의 분류를 수행해 볼 수 있는 예제 데이터를 Download합니다. from sklearn.datasets import fetch_20newsgroups from sklearn.fe..
추천시스템 구축을 위한 텍스트 분석 이해 #2 - BOW Bag of Words - BOW Bag of Words 모델은 문서가 가지는 모든 단어(Words)를 문맥이나 순서를 무시하고 일괄적으로 단어에 대해 빈도 값을 부여해 피처 값을 추출하는 모델입니다. Bag of Words란 단어들의 순서는 전혀 고려하지 않고, 단어들의 출현 빈도(frequency)에만 집중하는 텍스트 데이터의 수치화 표현 방법입니다. Bag of Words를 직역하면 단어들의 가방이라는 의미입니다. 단어들이 들어있는 가방을 상상해봅시다. 갖고있는 어떤 텍스트 문서에 있는 단어들을 가방에다가 전부 넣습니다. 그러고나서 이 가방을 흔들어 단어들을 섞습니다. 만약, 해당 문서 내에서 특정 단어가 N번 등장했다면, 이 가방에는 그 특정 단어가 N개 있게됩니다. 또한 가방을 흔들어서 단어를 ..
추천시스템 구축을 위한 텍스트 분석 이해 #1 텍스트 분석은 비정형 데이터인 텍스트를 분석하는 것입니다. ML모델은 주어진 정형 데이터 기반에서 모델을 수립하고 예측을 수행했습니다. 그리고 머신러닝 알고리즘은 숫자형의 피처 기반 데이터만 입력받을 수 있기 때문에 텍스트를 머신러닝에 적용하기 위해서는 비정형 텍스트 데이터를 어떻게 피처 형태로 추출하고 추출된 피처에 의미 있는 값을 부여하는가 하는 것이 매우 중요한 요소입니다. 텍스트를 word(또는 word의 일부분) 기반의 다수의 피처로 추출하고 이 피처에 단어 빈도수와 같은 숫자 값을 부여하면 텍스트는 단어의 조합인 벡터 값으로 표현될 수 있는데, 이렇게 텍스트를 변환하는 것을 피처 벡터화(Feature Vectorization)또는 피처 추출(Feature Extraction)이라고 합니다. 대..
로지스틱 회귀 : Logistic Regression, 시그모이드(sigmoid)를 이용한 분류 회귀 로지스틱 회귀는 선형 회귀 방식을 분류에 적용한 알고리즘입니다. 즉, 로지스틱 회귀는 분류에 사용됩니다. 로지스틱 회귀 역시 선형 회귀 계열입니다. 회귀가 선형인가 비선형인가는 독립변수가 아닌 가중치(weight) 변수가 선형인지 아닌지를 따릅니다. 로지스틱 회귀가 선형 회귀와 다른 점은 학습을 통해 선형 함수의 회귀 최적선을 찾는 것이 아니라 시그모이드(Sigmoid) 함수 최적선을 찾고 이 시그모이드 함수의 반환 값의 확률에 따라 분류를 결정한다는 것입니다. 많은 자연, 사회 현상에서 특정 변수의 확률 값은 선형이 아니라 위의 시그모이드 함수와 같이 S자 커브 형태를 가지게 됩니다. 만약 1이 Yes이고 0이 No를 나타내는 데이타값이 있다면 회귀를 적용하면 데이터가 모여 있는 곳으로 선형 회귀 선을..