본문 바로가기

Python12

Python으로 Custom Sparse Matrix 생성하기 파이썬은 sparse-matrix를 만들기 위한 훌륭한 라이브러리들을 가지고 있다. one-hot encoding 역시 코드 1~2줄이면 간단하게 사용이 가능하다. 하지만 추천 시스템과 같이 대용량의 sparse-matrix를 처리하거나, Factorization Machine 같은 알고리즘을 사용하는 경우, scikit-learn이나 pandas가 제공하는 dummy encoder 만으로는 부족한 경우가 많다. 모델의 Input 타입이 idx:value 와 같은 text file로 구성되어 있는 경우에 해당한다. 추천 시스템의 경우는 대부분 extreme-sparse matrix를 생성하기 때문에, 학습의 batch시에 hashing으로 idx:value를 지정해 주는 것이 일반적이다. 이렇게 구조를 .. 2018. 12. 8.
Python으로 싱글톤 패턴 사용하기 github 자료와 메모 자료들을 정리하던 도중, CS 관련 지식들을 정리해놓은 자료들을 발견했다.아주 기초적이고 쉬운 내용들이지만, 복습 겸 블로그에 다시 정리하고자 한다. 이번 포스팅에서는 파이썬으로 싱글톤 패턴을 사용하는 매우 간단한 방법에 대해 정리하겠다. 싱글톤 패턴이란 프로그래밍 디자인 패턴의 하나로, 가장 간단하면서도 유용한 디자인 패턴이다. 인스턴스를 하나만 생성하여 사용하기 위한 디자인 패턴이 싱글톤 패턴의 정의이다. 실행중인 프로세스(OOP로 구현된)에서 오로지 하나의 인스턴스만을 유지하기 위해 생성자에 접근 제한을 두고, 유일한 단일 객체를 반환하기 위해 정적 메소드를 사용한다. 또한, 유일한 단일객체 역시 정적 참조변수가 필요하다. Java, C++과 같은 대표적인 OOP 언어와 마.. 2018. 5. 24.
Python으로 regression 학습 구현하기 Machine Learning에서 가장 중요한 것 중 cost function과 theta update이 있다. 일례로, Deep learning으로 RMSE를 낮추는 prediction 모델링을 한다고 할 때 더 고급 알고리즘을 사용하거나, Batch normalization 기법을 적용하는 것 보다 learning rate나 threshold, batch size를 수정해보는 것이 훨씬 좋은 결과를 얻는 경우가 많다. 사실 해보지 않으면 잘 모른다. 해봐도 모르는 경우가 많다. 그래서 이 내용들을 제대로 이해하려면 한 번쯤 직접 구현해보는 것이 좋다고 생각했고, 파이썬으로 basic한 머신러닝 이론들을 구현하는 Implementation 프로젝트를 시작했다(github 링크). 본 포스팅에서는 간단한.. 2018. 5. 6.
파이썬 기초 문법 - 5 (format, map, isinstance 함수) 1. format 함수 format 함수는 str 타입과 관련된 함수이다. Cython을 기준으로 한 문법이며, c언어로 문자열을 출력할 때 printf 에 %를 붙이는 것과 유사한 출력 포맷이다. 원래는 파이썬으로 출력문을 작성할때 c언어와 매우 유사한 구조였지만, format 함수로 인해 이런 방식으로 코딩을 많이 하는 편이다. ##### format 함수 inputpath = '/hello/world' # :0>2 는 2자리보다 커지지 않게 숫자 앞을 0으로 채우는것 inputFormat = '{0}/{1}/{2:0>2}/{3:0>2}/time-{4:0>2}.*' print(inputFormat.format(inputpath, 2018, 2, 4, 12.1231131)) print(inputForm.. 2018. 4. 4.
Python - 한글 형태소로 워드클라우드 시각화 워드클라우드는 자연어 분석과정에서 흔히 사용하는 기초적이며 간단한 시각화 방법이다. 패키지를 사용한다면 구현이 매우 간단함과 동시에, tf-idf나 word2vec처럼 사람이 직관적으로 관찰하기 힘든 알고리즘을 주로 사용하는 자연어 분석 영역에서 매우 유용한 시각화 툴이기 때문이다. python에서도 여러 워드클라우드 모듈을 제공하지만, KoNLP에서는 pytagcloud를 이용한 시각화 튜토리얼을 제안한다.http://konlpy.org/ko/v0.4.3/examples/wordcloud/ 위 링크에 나와있는 튜토리얼을 기반으로, input text data를 형태소 기반으로 처리하며,동시에 불용어까지 제거하여 tokenize 해주는 코드를 추가하여 사용해보았다. import random import .. 2017. 8. 22.
인공뉴런(퍼셉트론, 에이다라인)과 그래디언트 디센트(Gradient Descent)의 개념 및 구현 머신러닝의 핵심 원리1. 인공 뉴런의 개념머신 러닝과 관련된 학문은 초기에 인공 뉴런을 표방하는 것으로 시작되었다. 뇌가 어떻게 일하는지를 이해하려는 노력의 산물이 바로 인공 뉴런이다. 뉴런은 뇌에서 서로 연결되어있는 신경 세포를 의미하는데, 이를 알고리즘으로 해부하면 다음과 같다. 하나하나의 신경세포는 바이너리 출력을 갖는 간단한 논리 게이트를 가지고 있다. 신경세포가 다음 신경세포로 신호를 보내는 임계치를 판단하는 것이 바로 활성함수의 개념이다. (정확히는 활성함수의 아웃풋은 비용함수로 이용되고, 임계함수가 최종 판단의 역할을 한다. 아래의 예제코드에서 활성함수는 new_input, 임계함수는 predict이다. 글을 정독한 뒤 다시 이 문단을 읽으면 이해가 된다) 이 활성함수의 최적의 가중계수를 자.. 2017. 8. 3.
배치 방식과 온라인 방식의 모델 학습 배치방식, 온라인 방식에 대한 개념일반적으로 대중화된, 아이리스 데이터 등으로 데스크탑에서 손쉽게 돌려볼 수 있는 머신러닝 자료들은 데이터를 통째로 IDE로 불러들인 다음 메모리상에 올려두고 작업하는 방식이었을 것이다. 모델을 학습함에 있어서도 모든 트레이닝 데이터셋의 결과값을 한번에 구한 뒤, 데이터셋과 쌍이 맞는 레이블과의 차이를 구해서 비용함수를 한번에 개선하는 방식의 학습을 n-iterative 하게 진행하였을 것이다. 하지만 머신러닝을 진행함에 있어서 데이터의 크기는 언제든지 늘어나게 된다. 아마 실전의 대부분은, 한 개의 데스크탑에서 불러올 수 없는 양의 데이터가 대부분일 것이다. 이런 경우 R 혹은 Python등의 툴로는 데이터를 메모리에 올려놓고 한번에 처리하기가 힘들어진다. 그렇게 되면 .. 2017. 8. 3.
Mini Batch Processing 방식의 구현과 학습모델의 임베딩 아웃 오브 코어 기법 (mini batch processing 방식)배치 방식이 아닌 온라인 방식으로 모델을 학습한 뒤, 학습한 모델을 저장해보고 다시 읽어보는 예제를 진행하였다. in-memory 방식으로 대용량 데이터를 학습시키고 모델을 만들기에는 한계가 있다. 따라서 mini batch의 방식으로 데이터를 chunk로 나누어서 처리해야 한다. 감성분석에서 사용한 대용량 데이터를 다시 예제로 사용하였다. tf-idf를 추출하기 위해서는 TfidfTransformer 클래스를 사용했지만, mini batch 방식(=온라인)에서는 사용할 수가 없다. 하지만 비슷한 일을 해주는 HashingVectorizer가 있다. 이를 통해 전체 문서에서 tf-idf를 하는 것과 비슷한 작업을 해줄 수 있다. 참고로,.. 2017. 8. 2.
파이썬 기초 문법 - 4 ('_' 언더스코어의 의미) 4. 언더스코어의 의미타 언어에서 언더스코어 '_'은 단순히 스네이크 표기법 정도로만 사용이 되곤 한다. 파이썬에서 언더스코어는 조금 특별한 기능을 하는데, 이는 파이썬이 인터프리터 언어라는 속성에 기인한다. 4.1 파이썬 인터프리터에서의 사용위 그림은 IPython으로 파이썬 인터프리터를 실행한 것이다. 언더스코어는 다음에서 볼 수 있듯, 마지막 변수를 저장하는 역할을 한다. 4.2 특정 값을 skip할 때a, _, b = 1, 3, 2 # a=1, b=2 a, _, b = [1, 2, 3] # a=1, b=3 for _ in range(10): print("hello")4.3 숫자의 구분자로써 활용a = 1_000_00_0 # a=1000000 b = 0b_11_0_1 # b=134.4 네이밍의 용도.. 2017. 7. 27.
파이썬 기초 문법 - 3 (클래스와 오브젝트) 클래스와 오브젝트################################################################# ################################################################# ### 클래스에서 self, cls, static의 역할 # class는 붕어빵 빵틀, object는 붕어빵이라고 비유가 가능. # self는 붕어빵 각각이 가지는 속성이고, cls는 붕어빵 빵틀이 가지는 속성임. # 클래스의 멤버변수를 선언할때 아래처럼 선언하면 빵틀 변수가 되는 것이고, # init 에서 self로 선언하면 붕어빵의 변수가 되는 것이다. class InstanceCounter: count = 0 count2 = 0 def __init__.. 2017. 7. 27.