분석 Python(343)
-
[Pyro] 개념 파악 및 실습으로 알아보기
요즘 점점 결과가 나올 때 결과에 대한 불확실성에 대한 설명을 많이 필요로 한다는 것을 느끼고 있다. 기존 방식을 사용하면, 근사적으로라도 불확실성을 측정하는 수단(DROPOUT, 등등)이 있는 것 같다. 이제 불확실성이라는 것이 중요한데, 이걸로 구현을 할 수도 있어야 하니, 많은 라이브러리 중에서 토치를 지금 주로 사용하고 있으니 Pyro라는 것으로 사용하고 예제를 보면서, 이 쪽 부분을 이해하고자 한다. 미적분이 변화의 속도에 대한 추론을 위한 수학인 것처럼, 확률은 불확실성 하에서 추론의 수학이다. 그것은 현대 기계 학습과 AI의 많은 부분을 이해하기 위한 통일된 이론적 프레임워크를 제공한다. 확률 언어로 구축된 모델은 복잡한 추론을 포착하고, 모르는 것을 알고, 감독 없이 데이터에서 구조를 밝힐..
2022.08.20 -
Python) pregex 로 편하게 정규 표현식 사용하기
텍스트에서 원하는 부분을 추출하기 위해서 정규표현식을 작성하는데, 고수들은 다 잘할 것이겠지만, 좀 더 편하게 하는 패키지를 찾은 것 같아서 테스트도 해볼 겸 작성한다. 소개할 패키지는 pregex라는 패키지이다. 사람 친화적인 방식으로 정규 표현식을 쓸 수 있어서 가독성 면에서나 활용면에서 쓸만해보인다. 문제는 파이썬 3.9 이상부터 지원된다는 것이라서, 이번 기회에 기존 유저들은 자연스럽게 파이썬 버전을 올리면 좋을 것 같다 ㅎㅎ 설치 방법 파이썬 3.9 이상 pip install pregex 파이썬 예시 간단한 URL 찾기 아래 TEXT에서 URL을 찾는 행위를 한다고 해보자. 그것을 일반적으로 찾으려고 하면, 위의 그림처럼 복잡하게 코딩을 해야 하고, 의도를 파악하기 위해서는 만든 사람의 설명이 ..
2022.07.30 -
[머신러닝][전처리] 변수 이산화(Discretization) 방법
이산화(Discretization)란 이산화에서는 전체 변수 값 범위에 걸쳐 있는 연속 간격 모음을 생성하여 연속 변수를 이산 기능으로 변환합니다. 이러한 불연속 값은 범주형 데이터로 처리됩니다. 이산화의 첼린지는 연속된 값이 정렬될 간격을 정의하는 임계값 또는 한계를 식별하는 것이다. 이를 위해 우리가 사용할 수 있는 다양한 이산화 방법이 있는데, 각각 장단점이 있다. 필요한 이유 의사 결정 트리(decision treeo) 및 Naive Bayes와 같은 여러 회귀 및 분류 모델은 이산 값에서 더 나은 성능을 보입니다. 의사 결정 트리는 속성의 이산적 분할(discrete partitions)에 기초하여 결정을 내린다. 의사 결정 트리는 이상적인 절단점을 결정하기 위해 훈련하는 동안 모든 featur..
2022.07.09 -
개선된 OneHotEncoder 알아보기(v1.1 이후)
이번에 scikit-learn에서 버전을 업데이트하면서 OneHotEncoder가 수정이 됐는데, 일반적으로 카테고리 처리하는 데 고민이 되던 부분을 많이 개선해서 올려준 것 같다. 기존에는 하려면, 복잡하게 짜서 해야하지만 이제는 그러지 않아도 돼서 좋은 것 같다 ㅎㅎ https://scikit-learn.org/stable/modules/preprocessing.html#one-hot-encoder-infrequent-categories 6.3. Preprocessing data The sklearn.preprocessing package provides several common utility functions and transformer classes to change raw feature vec..
2022.05.25 -
[ Python ] jpg, png 를 gif 또는 mp4로 만들기
jpg를 gif로 만들려는데, 먼가 잘 안돼서 이것저것 하다가 아는 형의 코드를 참고해서 결국 성공하게 되었다. 이 글에서 포인트는 다음과 같다. 1. 각 이미지 사이즈가 다른 것이 있어서 사이즈를 맞춰주는 작업이 필요함. 2.기존에 하던 방식을 했는데, 작동하지 않아서 새로운 방법으로 gif를 만들었음. 기존 방식) 아래와 같은 방법이 작동하지 않았다. GIF import os os.system('convert -delay 15 -loop 0 ./pngs/*.png ./UI.gif') 일단 이미지 사이즈가 다르니 이미지 사이즈를 맞춰줬다. 사진이 뭉개질까봐 가장 작은 사이즈 기준으로 맞췄다. from PIL import Image import cv2 result = [] for idx , path in..
2022.05.22 -
[Python] 이산화된 공간 안에 속하는 좌표 찾기
이전에 했던 작업을 조금 수정하여 다시 올림 아래와 같이 어떤 특정 영역을 표현하는 이산화 된 점이 있을 때 이 영역 안에 들어있는 점들을 찾는 방법에 대한 글이다. coordinate = [(0,0),(2,2),(4,4),(6,2),(6,0),(0,0)] 아래 코드를 통하여 선이 지나가는 grid 한 좌표를 탐색한다. total_grid = [] for idx in range(len(coordinate) - 1): start = coordinate[idx] end = coordinate[idx + 1] discrete_line = list( zip( *line( *start, *end, ) ) ) for i in discrete_line: if i not in total_grid: total_grid...
2022.05.19 -
Python) list와 nested list안에 값을 기준으로 병합하는 코드
이름을 어떻게 해야 할지 모르겠지만, 일단 시작하면 다음과 같은 문제가 있었다. 2개의 list가 있는 데 하나는 그냥 list고 하나는 nested 형태의 list이다. 이 안에는 idx가 있고, 이 nested list에도 idx를 묶어 놓은 list들이 있다. 이 2개를 합치는 작업이 필요해서 고민하다가 나온 결과를 공유한다. 다음과 같은 예시가 있다고 하자. _list = [0,1,5,12,16] _nested_list = [[2,3,4],[6,7,8],[9,10,11],[13,14,15]] 나의 목적은 이 2개를 순서를 유지하면서 합치는 것이 목표이다. [0, 1, [2, 3, 4], 5, [6, 7, 8], [9, 10, 11], 12, [13, 14, 15], 16] 위와 같이 idx의 순서..
2022.05.06 -
Python) 직선 기준 점 대칭 이동 구현
직선과 점이 있을 때 대칭 점을 구하는 파이썬 코드를 구현해봤다. 위의 그림처럼 우리가 하나의 직선을 알고 하나의 점(A)을 알 때 A'를 구하는 방법이다. 실제 구현하는 공식은 다음과 같다. 그래서 우리가 알아야 하는 것은 2개이다. 바로 점의 좌표와 직선의 방정식을 구하면 된다. def get_symmetry_point(two_point,one_point): dx, dy = np.array(two_point[0]) - np.array(two_point[1]) w = dy / dx b = two_point[0][1] - w * two_point[0][0] x1, y1 = one_point[1] new_x0 = x1 - 2 * w * (w * x1 - 1 * y1 + b) / (w**2 + 1) new_..
2022.04.29 -
Python) Heap 정리 및 heap sort 구현해보기
우연히 찾은 컴퓨터 알고리즘 강의인데, 출퇴근길에 들어보고 있다. 자료 구조 중의 하나인 Heap에 대해 알아보고 구현하는 것까지 해보려고 한다. 일단 Heap을 사용하는 이유부터 알아보자 Heap은 Prioirty Queue와 같이 우선순위가 존재하는 자료 구조이다. Heap(힙)이란? 완전 이진 트리의 일종으로 우선순위 큐를 위하여 만들어진 자료구조이다. 여러 개의 값들 중에서 최댓값이나 최솟값을 빠르게 찾아내도록 만들어진 자료구조 완전 이진 트리(complete binary tree)에 가까운 형태 이진트리(Binary tree)는 각 노드의 자식수가 2 이하인 경우 완전 이진 트리는 Root 노드부터 Leaf 노드까지 빠짐없이 채워져 있는 트리 종류 최대힙 (max-heap property) 부모..
2022.04.08 -
Pytorch) multioutput Regression 구현해보기
Pytorch에서 multioutput regression을 구현해보고자 한다. 구현하게 된 이유는 sckit-learn에서 RegressorChain이라는 것을 보고 도움이 될 것 같아서 해보려고 한다. 실제 구현된 코드를 보니 다음과 같이 구현이 되어 있었다. 구현된 방식은 Chain인 경우에 X에다가 y 예측값을 붙이고, 또 그것을 사용해서 다시 y를 예측하는 방식이었다. 이 부분을 참고해서 딥러닝이다 보니 약간은 다르게 구현을 해봤다. class _BaseChain(BaseEstimator, metaclass=ABCMeta): def __init__(self, base_estimator, *, order=None, cv=None, random_state=None): self.base_estimat..
2022.03.26 -
torchfunc) titanic data에 model parallel training 해보기
jax 예시로 나온 것처럼 소규모 네트워크를 빠르게 학습시키는 방법에 대해 공유합니다. 소규모 네트워크를 훈련하는 경우 병렬화의 근본적인 한계에 부딪힙니다. 확실히 2계층 MLP는 ResNet-50보다 훨씬 빠르게 실행됩니다. 그러나 ResNet에는 약 4B의 곱셈 누산 연산이 있는 반면 MLP에는 100K만 있습니다.1 우리가 원하는 대로 MLP는 ResNet보다 40,000배 더 빠르게 훈련하지 않으며 GPU 사용률을 검사하면 그 이유를 알 수 있습니다. . GPU의 ~100%를 사용하는 ResNet과 달리 MLP는 2-3%만 사용할 수 있습니다. 더 많은 컴퓨팅을 병렬로 사용하는 한 가지 방법은 배치 크기를 늘리는 것입니다. 예를 들어 128개 요소의 배치를 사용하는 대신 GPU를 채울 때까지 이를..
2022.03.26 -
Python) 고객 생애 가치(CLV) 예측하기
고객 생애 가치를 예측할 때는 기존 회귀 모델 방식보다는 다른 특정 가정을 사용하고 있는 모델을 사용해야 한다. lifetimes이라는 패키지를 사용하는 예시를 해보고자 한다. 고객 생애 가치(CLV)는 고객이 인수부터 비즈니스와의 관계가 종료될 때까지 지출할 총금액입니다. 참고 부탁드립니다. 2022.03.17 - [분석 Python/구현 및 자료] - Python) 고객 생애 가치(CLV)에 대해서 알아보기 예측(Prediction)과 Calculation(계산)에 차이는 무엇일까요? CLV를 계산할 때, 오로지 현재 상황을 조사하고 분석만 할 수 있습니다. 그래서 우리는 고객에 새로운 상품을 살 때나 특정한 한계에 도달했을 때 추측할 수가 없습니다. 예측을 통해 우리는 기계 학습을 프로세스에 추가하..
2022.03.17