본문 바로가기

파이썬5

EM 알고리즘 (expectation maximization algorithm) # EM 알고리즘 # 상태(레이블) 아는 경우 동전의 상태(레이블)이 A, B가 존재하고 앞면이 나올 확률을 계산하고 한다. 여기서 각 확률에 대해서는 모른다고 가정한다. 동전 A와 B 중에서 랜덤으로 선택 후 10번 시행하는 것을 5번 반복한다. 위와 같이 상태(레이블)을 아는 경우에 앞면이 나올 확률을 계산할 수가 있다. 현재는 시행횟수와 반복횟수가 적어서 0.5에 근접하지는 않다. # 상태(레이블)를 모르는 경우 위와 같이 계산을 진행할 수가 없다. 그래서 EM 알고리즘을 통해 추론을 진행한다. 1) 초기에 동전 A, B의 앞면 확률을 설정한다. (랜덤 혹은 다른 방법) 2) 그 후 동전 A, B의 시행 횟수를 계산한다. 3) 동전 A, B의 앞면 확률을 계산한다. 4) 동전 A, B의 앞면 확률이.. 2023. 2. 23.
DBSCAN 설명 및 코드 다차원 데이터 분석을 하다가 기존에 공부했었던 DBSCAN도 가능할 수도 있겠다 싶었다. 그래서 해당 내용을 간단하게 정리를 하고자 한다. # 사용한 데이터셋 많은 데이터 분석에서 사용하는 iris 데이터셋으로 간단한 구현을 하였다. # 데이터셋 읽기 위한 코드 및 결과 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 from sklearn import datasets from sklearn.cluster import DBSCAN from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt import pandas as pd import numpy as np.. 2023. 2. 22.
Time Series K-Means # K-Means와 Time Series K-Means 차이 기존 K-Means는 2차원 데이터의 K개의 중심을 기준으로 클러스터링을 하게 된다. 주가 데이터처럼 시계열 데이터를 분석하는 경우에는 Time Series K-Means를 하게 되면 시계열 간의 차이를 계산할 수 있게 된다. # K-Means와 Time Series K-Means 그림 예시 # Time Series K-Means 예제 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 from tslearn.generators import random_walks from tslearn.clustering import T.. 2023. 2. 14.
pandas duplicate drop시 중복된 값을 평균 만들기 # DataFrame 생성 1 2 3 4 df = pd.DataFrame({ 'kind': ['bus', 'bus', 'cake', 'bus', 'taxi', 'taxi'], 'cnt': [1, 2, 3, 4, 3, 9] }) Colored by Color Scripter cs # duplicate drop 시 중복된 값을 평균 만들기 1) duplicate drop을 하는 경우에 바로 함수에서 제공하면 좋을 것 같지만 없는 것 같음. 2) 간단한 코드를 구현하여 해결함. (1) 먼저 중복되는 값들 확인. (2) 평균 값을 계산하여 해당 DataFrame 맨 뒤에 붙임. (3) pd.drop_duplicates 함수를 통해 맨 마지막 값만 남기고 나머지는 지움. 3) 해당 코드 1 2 3 4 5 dupl.. 2023. 2. 13.
datetime index를 통해 pandas DataFrame 생성 # datetime을 이용하여 pandas index 생성 예를 들어, 2022-01-01 ~ 2022-01-31 데이터를 생성한다고 가정 1 2 3 4 5 6 7 8 9 10 # 2022-01-01 ~ 2022-01-31 start_date = pd.to_datetime('2022-01-01') end_date = pd.to_datetime('2022-02-01') # start_date ~ end_date # freq = 1 hour # left inclusive, right exclusive data_index = pd.date_range(start_date, end_date, freq='T', inclusive='left') df = pd.DataFrame(index=data_index) Colo.. 2023. 2. 13.