전체 글(93)
-
shap 명목형 변수 표기 방법 바꾸기
1. 배경 상황테이블 형태 데이터를 가지고 예측 모델을 만들 때 보통 명목형(object) 변수를 라벨 인코딩 혹은 원-핫 인코딩을 수행하여 모델이 학습할 수 있도록 변환한다. 이후 shap을 시각화하면 각 컬럼이 어떤 값이어서 영향을 줬는지에 대한 해석이 어려워진다.예를 들어, 모든 컬럼값이 명목형 변수인 버섯 데이터의 식용 여부를 예측하는 모델을 만들고 shap value를 계산했을 때 아래처럼 확인이 된다.더보기from sklearn.preprocessing import LabelEncoderfrom sklearn.model_selection import train_test_splitdf_encoded = df.copy()for column in df.select_dtypes('object'): ..
2024.05.21 -
7판 4선승제에서 승리 확률 계산하는 코드 (python)
from itertools import combinations# 각 경기별 승리 확률p = [0.35, 0.60, 0.60, 0.50, 0.60, 0.55, 0.45]# 전체 경기에서 이길 확률을 계산하는 함수def win_probability(p): total_games = len(p) wins_needed = len(p) // 2 + 1 total_win_prob = dict() # 가능한 모든 조합을 생성 for combo in combinations(range(total_games), wins_needed): win_prob = 1 win_scenario = '' last_game = max(combo) + 1 ..
2024.05.08 -
AWS Lambda와 API Gateway를 통해 입력 받은 이미지 처리하기
0. 목적s3에 저장되어 있는 이미지가 아닌 외부 이미지를 받아서 SageMaker의 딥러닝 모델 엔드포인트로 다루고자 함(public API) 1. lambda 함수 작성- `pillow`, `numpy`, `requests-toolbelt` 라이브러리 필요- 라이브러리 설치 방법:from PIL import Imageimport numpy as npimport boto3import ioimport jsonimport base64from requests_toolbelt.multipart import decoderfrom urllib.parse import parse_qss3_client = boto3.client('s3')runtime = boto3.client("sagemaker-runtime")ep..
2024.05.02 -
python으로 제곱근(root) 계산하는 함수 구현하기
1. Newton-Raphson Method본문에서는 이 방법으로 제곱근을 구하는 함수를 작성하였고, 이 방법을 이해 해보도록 하자.먼저 결론부터 말하면 아래와 같은 점화식에 따라 값을 계산하여 제곱근을 구한다.$\sqrt{k} = x$라고 했을 때 $x_{n+1} = \frac{1}{2} \left(x_n + \frac{k}{x_n} \right)$, $x_0^2>k$ 이제 위 점화식이 어떻게 유도되었는지를 알아보도록 하자. 점화식 유도1. $\sqrt{k} = x$라고 했을 때, $x^2-k=0$라는 방정식을 세울 수 있다. 여기서 $f(x)=x^2-k$라고 하자.2. $f(x_n)>0$이 되게 하는 점 $x_n$에 대해 $(x_n, f(x_n))$의 접선의 방정식을 구해보면 아래와 같다. - $..
2024.04.26 -
AWS Lambda만을 이용해서 날씨알림봇 만들기
2024.03.07 - [AWS] - AWS Lambda와 selenium을 이용해서 날씨알림봇 만들기 AWS Lambda와 selenium을 이용해서 날씨알림봇 만들기0. 배경 매일 아침 일어나면 오늘은 비가 올 것인지, 기온은 어떤지를 확인해본다. 그런데 이상하다. 제공사마다 강수확률과 기온이 다르다. 네이버에서는 제공사를 선택할 수 있도록 되어있지boksup.tistory.com 이전에 Lambda와 Selenium을 이용하여 네이버 날씨에서 여러 제공사의 날씨를 수집하는 봇을 만들었다. 근데 언제 생겼는지, 네이버에서 예보 비교가 가능했다. 생각보다 꽤 된 것 같은데 모르고 있었다. 그래서 해당 페이지를 활용하여 selenium 없이 날씨 데이터를 수집해보기로 했다. ..
2024.04.22 -
선형회귀로 시계열 예측 모델 만들 때 조심할 점
1. 데이터 선정 데이터 수도 많고 트렌드와 주기성도 매우 잘 보이는 Mauna Loa CO2 daily means 데이터를 이용하였다. Global Monitoring Laboratory - Carbon Cycle Greenhouse Gases (noaa.gov) 2. 데이터 전처리 선형적으로 증가하는 트렌드도 보이고 1년 주기로 증감을 반복하는 패턴이 보인다. 트렌드와 패턴을 고려한 x인자를 만들자. $y = c_0 + c_1 x + c_2 x^2 + c_3 x^3 + c_4 \sin(\frac{2\pi x} {T}) + c_5 \cos(\frac{2\pi x} {T}) + c_6 \sin(\frac{4\pi x} {T}) + c_7 \cos(\frac{4\pi x} {T}) \text{ where ..
2024.04.16 -
AWS Lambda, API Gateway로 대화형 질답봇 만들기 (Feat. 야구)
전편: 2024.03.07 - [AWS] - AWS Lambda와 selenium을 이용해서 날씨알림봇 만들기 0. 배경 이전에 AWS Lambda와 텔레그램을 이용하여 날씨알림봇을 만들었다. 또 만들만한 봇이 뭐가 있을까 고민하다 평소 관심이 많은 야구와 관련된 봇을 만들고 싶어졌다. 제일 먼저 떠오른 건 실시간 경기 알림봇이었다. 내가 응원하는 팀이 앞서가는 득점 혹은 역전을 했거나 이겼을 때 나에게 알림을 주는 걸 생각했다. 하지만 몇 가지 현실적인 문제에 부딪혔다. 첫째로, 실시간으로 알림을 받는 서비스를 구축하는데 있어 Lambda 같은 서버리스 서비스보다 EC2처럼 24시간 돌아가는 서비스가 오히려 더 유리하다는 것이었다. 둘째로, KBO, 네이버, 다음 등 문자 중계를 해주는 제공처 모두 A..
2024.04.02 -
시계열 이상탐지 (4) - 딥러닝의 시대
이하 내용은 MIT - Data to AI Lab에서 작성한 글을 일부 번역 및 요약한 것입니다. Part 1 Time series anomaly detection — in the era of deep learning 시계열 이상 탐지란 시계열 데이터: 시간을 인덱스로 가지는 점들의 집합 이상치(anomaly): 가끔 등장하는 시계열 내에 속하지 않는 데이터(정상 패턴과 다른 패턴) 이상치의 종류 - 점 이상치(Point anomalies): 낮은 밀도 영역에 속하는 단일 값. 많이 모여있으면 집합 이상치(collective anomalies)라고 불림 - 맥락적 이상치(Contextual anomalies): 낮은 밀도 영역에 속하지는 않지만 지역적으로 이상한 값들로, 시작 시간과 끝 시간으로 이루어진..
2024.03.25 -
시계열 이상탐지 (3) - VAE, TadGAN
VAE VAE(Variation AutoEncoder): 오코인코더의 변형으로 잠재 벡터가 아닌 평균과 분산을 이용한 잠재 공간(Latent Space)으로 압축하는 모델로 생성 모델로 많이 사용됨 - Reconstruction-Based - LSTM-AE와 동일한 방식으로 임계치 선정 및 모델 평가 TadGAN TadGAN: Time Series Anomaly Detection Using Generative Adversarial Networks TadGAN(Time Series Anomaly Detection Using Generative Adversarial Networks): GAN을 시계열 이상탐지에 응용한 모델. - $E$: 인코더. 생성자에 들어가기 전 랜덤 벡터(z)와 구분할 수 없도록 학습..
2024.03.22 -
torch와 tensorflow를 CNN 코드로 비교하기
Fashion MNIST 데이터 불러오기 torch의 경우 데이터를 불러올 때 Compose를 통해 normalize를 하고 배치 사이즈를 지정하여 iterator를 만든다. BATCH_SIZE = 64 from torchvision import datasets, transforms from torch.utils.data import DataLoader, random_split transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize(mean=(0.5,), std=(0.5,)) ]) full_train_dataset = datasets.FashionMNIST('dataset/', train=True, download=True..
2024.03.21