분석 Python(343)
-
Tabular) 좋은 피처 만드는 전처리 방법 정리해보기 (preprocessing)
정형 데이터를 딥러닝에 사용할 때 임베딩하는 방법에 대해서 정리해보고자 한다. 흔히 아는 머신러닝과 딥러닝의 차이를 이런 식으로 표현한다. (물론 딥러닝은 머신러닝의 부분집합이긴 해서 이렇게 구분하는 게 맞지는 않기는 한 것 같다) 여기서 말하는 머신 러닝은 흔히 이야기하는 tree 계열 알고리즘이나 회귀분석 같은 통계 기반의 방법론들을 생각해 주면 될 것 같다. 정형데이터 AI 모델 개발 방식 말하고자 하는 것은 흔히 딥러닝을 써서 얻을 수 있는 기대효과는 알아서 데이터에 대한 정보를 추출(feature extraction)할 수 있다는 믿음하에 딥러닝 방법론을 많이 사용하게 된다. 정형데이터 AI 모델 개발 방식 트렌드 크게 현재 데이터로 많이 사용하는 것이 tabular, image, text, g..
2023.10.04 -
TimeSeries) [MultiHead Self Attention] multi target 예측
새로운 모델 구조 만들어보기 해당 시도는 Multi Head Self Attention을 이용하면, 각 Head 마다 고유한 특징을 잡는 것을 이용하여 예측하는 코드와 분석을 통해서, gradient 실제로 다르게 가는 지를 확인하고자 함. Load Library import numpy as np import torch import matplotlib.pyplot as plt import torch.optim as optim from IPython.display import clear_output 데이터 정의 이번 블로그에서는 타깃 3개를 예측하는 것을 정의해서 예측하고자 함. # 예제 데이터 생성 t = np.linspace(0, 100, 1000) # 0에서 100까지 1000개의 점 y1 = np...
2023.09.23 -
Pytorch) 모델 가중치 로드 시 테스트 (전체 모델에서 서브 모델 가중치만 가져오기)
상황 조금 더 일반화된 학습을 하기 위해 멀티 타겟에 대한 일반화된 모델을 만들고, 그 모델에서 부분적인 타겟에 대하서 추출할 때 가중치를 잘 가져오는 지에 대한 테스트를 수행해봄. 기대 효과 공유하는 네트워크(Shared Network)가 일반화되게 잘 학습이 되고, 부분적으로 학습시킬 때 좋은 인풋으로써의 기능을 할 수 있지 않을까 함. 방법 각 타겟에 대해서 Dict 으로 키로 관리하고, 나중에 load 시 strict=False를 하면, 알아서 파라미터가 매칭이 안되도 들어갈 것이다라는 생각으로 시작 엄밀하게 제거하는 작업도 있지만, 제거하지 않아도 자동으로 맵핑되는 지 보고 싶었음 코드 중간에 가중치를 임의로 지정하여 테스트 굳이 forward까지 구현하지 않아도 되므로 패스하고 진행한다. im..
2023.09.15 -
Windows 10) Superset Install Guide (locally)
라이센스 Apache 2.0 패키지 버전 : 2.1.0 python : 3.8, 3.9, 3.10, 3.11 windows 10에서 superset을 아직 지원하지 않기 때문에 도커를 사용해야 한다. 그래서 이 글에서는 windows 10에서 docker를 이용해서 설치하는 것을 해보려고 한다. 일단 docker desktop on windows를 먼저 설치해 보자 Install Docker Desktop on Windows 이 글의 목적은 superset 설치를 하는 것이기 때문에 docker desktop은 아래 문서를 참조해서 설치해 주시기 바란다. https://docs.docker.com/desktop/install/windows-install/ Install Docker Desktop on W..
2023.08.21 -
Python) AVLTree Search를 통해서 특정 값의 범위 찾기 (ChatGPT와 함께)
FastAVLTree는 AVL 트리 데이터 구조의 구현을 제공하는 파이썬 라이브러리입니다. AVL 트리는 자체 균형 이진 검색 트리의 일종으로, Georgy Adelson-Velsky와 Evgenii Landis에 의해 1962년 처음 소개되었으며, 이들의 이름을 따서 명명되었습니다. AVL 트리는 모든 노드의 왼쪽과 오른쪽 서브트리의 높이 차가 최대 하나 이하인 이진 검색 트리입니다. 이는 트리가 항상 균형을 유지하므로 트리의 높이가 노드 수에 대해 로그 적이라는 것을 보장합니다. 이 속성은 AVL 트리가 검색, 삽입 및 삭제 작업을 빠르게 수행할 수 있도록 보장하며, 최악의 경우 시간 복잡도는 노드 수에 대해 O(log n)입니다. FastAVLTree는 Python에서 AVL 트리의 빠르고 메모리 ..
2023.03.22 -
git) submodule 다루기
submodule 추가하기 git submodule 추가하기 git submodule add 확인하기 cat .gitmodules 추가한 내용 반영하기 git commit -m "add submodule" git push # git push origin main # git push origin master 서브모듈을 최신 버전으로 업데이트 submodule 최신으로 업데이트하기 git submodule foreach git pull origin main submodule 안에 submodule이 없는 경우 git submodule update --remote submodule 안에 submodule이 있는 경우 git submodule update --remote --recursive 서브모듈이 있는 g..
2023.02.15 -
python) metaflow 파이썬 스크립트에서 실행해보기
metaflow를 이용해서 python script를 실행하는 방법에 대해서 공유 subprocess를 실행하고, 대기 상태를 건 다음에 다음 flow를 실행하게 해 봤다. import subprocess import time print("first") p = subprocess.Popen(['python', './metaflow/tutorials/02-statistics/stats.py','run']) while p.poll() is None: print('.', end='', flush=True) time.sleep(1) print('returncode', p.returncode) print("second") p = subprocess.Popen(['python', './metaflow/tutoria..
2023.02.10 -
Python) multiprocessing 코어 수 제한해서 돌리기
이 글의 목적은 병렬코드를 작성할 때 자기에게 주어진 코어가 제한되어 있는 경우에 대한 팁이 담겨 있는 글이다. 팁을 적기 전에 언제 병렬코드가 필요하고, 또 언제 코어 수를 제한해야 하는 지 생각해 보자. 작업을 하다 보면, loop를 쓰는 경우가 많고, task마다 다르겠지만, 각각의 job은 서로 관련이 없는 경우를 푸는 경우가 있다. 이럴 때 가장 쉽게 생각할 수 있는 것은 병렬로 코드를 짜는 것을 생각한다. 아래 그림처럼 100,000개를 처리할 때 각각의 record끼리 관계가 없다고 하면, 해당 작업을 끝내는 동안 계속 기다려야 한다. 바쁜 우리들은 할 게 많기 때문에 이 시간을 줄이고 싶다는 생각을 하게 되고, 결국 Multi-Processing을 사용하려고 검색을 하게 된다. 아래 그림처..
2023.02.04 -
Python) pyarrow 사용 방법
2022.11.26 - [분석 Python/구현 및 자료] - Python) pyarrow 다뤄보기 2022.12.21 - [분석 Python/구현 및 자료] - Python) pyarrow 사용 방법 라이브러리 import numpy as np import pyarrow.parquet as pq import pandas as pd from sklearn.datasets import make_classification 데이터 생성 X_pd= pd.DataFrame(X,columns =[ f"feature_{i}" for i in range(X.shape[1])]) X_pd['class'] =y 파티션별로 저장 X_pd.to_parquet( path="./test.parquet", engine='pyarr..
2022.12.21 -
Python) pyarrow 다뤄보기
2022.11.26 - [분석 Python/구현 및 자료] - Python) pyarrow 다뤄보기 2022.12.21 - [분석 Python/구현 및 자료] - Python) pyarrow 사용 방법 Apache Arrow란? (https://realsalmon.tistory.com/21) 직렬화(Serialization)란? (https://realsalmon.tistory.com/21) Zero-Copy 직렬화 Pyarrow란? 아파치 애로우(Apache Arrow)라는 메모리 내 분석을 위한 개발 플랫폼인데, 빅데이터를 빠르게 처리하고 이동할 수 있도록 하는 일련의 기술을 제공하는 라이브러리를 파이썬 PyArrow를 통해 구현할 수 있다. 기존의 pandas로 용량이 큰 csv파일을 로드하면 시간..
2022.11.26 -
(진행중) SHAP (Shapley Additive exPlanations) 이해하기
SHAP에 대해서 좀 더 이해를 해보고자 블로그를 참고하는데, 블로그를 보고 정확히 이해하려니 매우 어렵지만 이해해보려고 한다... 게임 이론 게임이론이란 우리가 아는 게임을 말하는 것이 아닌 여러 주제가 서로 영향을 미치는 상황에서 서로가 어떤 의사결정이나 행동을 하는지에 대해 이론화한 것을 말한다. 즉, 의사결정자는 자신의 결정뿐 아니라 상대방의 결정이 무엇이 될 것인가에 대해서 관심을 가지게 될 수밖에 없고 이러한 상황의 문제를 다루는 의사결정학의 한 분야라고 한다. 게임 이론 분류 Shapley value 개념 및 예시 게임 이론의 개념을 기반으로 하며 예측에 대한 각 피처의 기여도를 계산하여 기계 학습 모델의 예측을 설명하는 데 사용할 수 있습니다. Shap Value에 대한 간단한 이야기를 해..
2022.11.21 -
Catboost & Shap) 예시 코드
catboost와 shap 관련 예시 코드 catboost를 사용할 때, shap.Explanation을 잘 사용해야 함. cat_features = list(train_x.select_dtypes("category")) train_dataset = cb.Pool(train_x, train_y,cat_features=cat_features) test__dataset = cb.Pool(test_x, test_y,cat_features=cat_features) model = cb.CatBoostRegressor(loss_function='RMSE',random_state=1234, custom_metric=['RMSE', 'MAE', 'R2']) grid = {'iterations': [100, 150, 2..
2022.11.16