ml
Pandas ewm
Pandas ewm Pandas ewm Pandas에서는 ewm이라는 메서드를 통해 각 열에 대한 지수 가중 함수를 계산할 수 있게 해 줌 ewm().mean()을 통해, 지수 이동 평균을 계산 가능 지수 가중 함수를 계산할 때, 매 번 alpha 값을 곱해서 계산 이 alpha 값을 parameter로 직접 줄 수 있음 com, span, halflife parameter를 주면, 각 값을 바탕으로 자동으로 다음과 같이 alpha 값을 계산해 줌 com: alpha 값이 1 / (1 + com) span: alpha 값이 2 / (1 + span) halflife: alpha 값이 1 - exp(ln2 / halflife) 어쨌거나 alpha, com, span, halflife 중 하나는 제공되어야 함 min_periods parameter를 통해 계산에 필요한 최소의 값 수를 계산 adjust가 True인 경우, 상대적 가중치의 불균형을 해소하기 위해 추가로 값을 나눔 평균을 구할때는 True로 둬야 하며, True 가 기본 times 는 datetime 형태의 리스트를 인자로 줄 수 있음 시간을 주어지면 날짜를 바탕으로 자동으로 지수 가중 함수를 계산 이 값이 주어지면 alpha, com, span, halflife 중 하나를 제공하지 않아도 된다고 함 method: numba 엔진을 사용한다고 명시했을 때만 사용 가능, 연산을 단일 행 / 열에 대해 수행할 것인지, 테이블 단위로 수행할 것인지 결정 가능 References https://pandas.
read moreml
Pandas iloc
Pandas iloc Pandas iloc Pandas 에서 index를 통해 데이터에 접근해야 할 때가 많이 있음 이때 iloc 메서드를 사용하면 됨 데이터프레임 df에 대해 적용하는 경우 df[i] 를 사용하면 i 번째 행(Seires)을 얻을 수 있음 df[[i]] 를 사용하면 i 번째 행(DataFrame)을 얻을 수 있음 df[[True, False, True]] 를 통해 0, 2번째 행을 얻을 수도 있음 df[i, j] 를 사용하면 i 번째 행의 j번째 열을 얻을 수 있음 i, j 와 같은 정수 뿐만 아니라 a:b 와 같은 형태로 슬라이싱도 가능 df[[x1, x2], [y1, y2]] 와 같은 형태로 x1, x2 행의 y1, y2 열을 얻는 것도 가능 이외에도 굉장히 많은 응용 가능 References https://pandas.
read moreml
Bagging Boosting
Bagging Boosting Bagging Boosting Bagging 데이터를 여러 번 샘플링한 후, 개별 모델을 학습하는 방식 이후 각 모델의 결과를 투표하거나 평균을 내서 결과를 취합 각 개별 모델은 독립적으로 Overfitting의 위험성 존재 Boosting 오분류된 데이터에 더욱 큰 가중치를 주어 학습하는 방식 약한 모델부터 시작해서, 순차적으로 모델의 틀린 부분을 학습해 나감 References https://icim.nims.re.kr/post/easyMath/838
read moreml
F1 Score
F1 Score F1 Score 모델이 어떤 데이터의 참 / 거짓을 예측한다고 해 보자 단순히 데이터의 참 / 거짓을 맞춘 비율은 accuracy로 나타냄 그러나 이것은 모델을 평가하는 좋은 지표가 아닐 수 있으므로, 다른 지표들이 등장 Precision: 모델이 참이라고 예측한 것 중 실제로 참인 데이터의 비율 거짓인 데이터를 참이라고 예측하면 큰일나는 경우 유용 모든 데이터를 참이라고 예측하는 경우, Recall은 높아도 Precision은 낮음 Recall: 실제로 참인 것들 중 모델이 참이라고 예측한 데이터의 비율 참인 데이터를 거짓이라고 예측하면 큰일나는 경우 유용 암 환자를 못 찾는다고 생각해 보자!
read moreml
Decision Tree
Decision Tree Decision Tree 주어진 데이터가 어느 범주에 속하는지 알 수 있는 분류 문제에 사용 가능한 모델 회귀 문제에도 사용 가능하지만, 분류 문제 기준으로 설명 기본적으로 Tree 구조를 가짐 각 중간 노드는, 입력 데이터를 두 개의 영역으로 구분 이 과정에서 데이터의 특정 기준을 이용해 영역을 결정 ex) 이를테면 특정 필드의 값이 10보다 큰 경우 / 작거나 같은 경우 마지막 노드에서는 데이터의 범주를 결정하게 됨 기준을 삼을 때, 엔트로피가 가장 감소하는 방향으로 기준을 삼게 됨 나뉘기 전의 데이터 집합이 X라고 가정 X를 Y, Z 두 개의 집합으로 나눈 경우, 엔트로피는 $p_yH(Y) + p_zH(Z)$가 됨 이 엔트로피가 가장 최소가 되는 방향으로 데이터를 나누면 됨 왜 엔트로피가 최소가 되는 방향으로 나누는가?
read moreml
Imputation
Imputation Imputation 데이터에서 발생한 결측값을 대체하는 방법을 imputation이라고 함 2차원 데이터에 대해, 다음과 같은 방법으로 결측치를 대체할 수 있음 결측값을 무시하고 알고리즘이 누락된 데이터를 처리하게 놔둠 행 혹은 특정 열을 제거하는 방법, 중요 데이터 유실 가능 열을 기준으로 평균 / 중앙값 사용, 숫자만 가능 열을 기준으로 최빈값 사용, 숫자가 아닌 데이터에서도 사용 가능 결측치를 0 혹은 특정 상수값으로 대체 K-NN을 통해 가장 가까운 이웃의 값으로 대체 MICE (하기 설명) 딥 러닝을 활용해 누락된 열을 예측해서 대체 MICE 누락된 값을 여러 번 채우는 방식으로 동작 Imputation : 우선 imputation을 거친 여러 데이터셋을 만듦 Analysis: 해당 데이터셋들을 분석함 Pooling: 데이터셋들의 결과를 합침 불확실성이 줄어드는 효과가 있음 References https://dining-developer.
read moreml
nDCG
nDCG nDCG 추천 시스템에서 많이 쓰이는 평가 지표 각 아이템들을 순서대로 추천한 경우, 각 아이템마다 점수(관련성)가 존재 이 점수는 관련이 있는지 없는지에 따라 1 혹은 0이 됨 혹은 문제에 따라 세분화된 값을 가질 수도 있음 더 관련이 있는 경우 높은 점수를 가지는 방식 등 CG (Cumulative Gain) 추천 결과의 상위 p개의 점수의 합 가장 직관적이지만, 상위 p개의 점수를 모두 같은 방식으로 계산한다는 점이 문제가 될 수 있음 DCG (Discounted Cumulative Gain) CG에서는 1등을 정확하게 맞추는 것과, 10등을 정확하게 맞추는 것의 차이를 두지 못함 상위 p개의 점수의 합을 두되, 낮은 등수를 맞출수록 작은 가중치를 주는 방법 i번째 등수에 대해 $\frac{1}{log_2(i + 1)}$ 을 곱해서 가중 합을 계산 더 낮은 등수에 대한 중요도를 덜 측정 그러나 p값에 따라 결과값이 상이하다는 문제점이 존재 IDCG (Ideal Discounted Cumulative Gain) 이론상 최대가 되는 DCG 값 nDCG (normalized Discounted Cumulative Gain) DCG / IDCG 값이 0 ~ 1 사이로 나오기 때문에, 항상 정규화된 값을 가짐 p 값이 달라도, 성능 비교를 수행할 수 있음 References https://velog.
read moreml
Entropy
Entropy Entropy 여기에서 말하는 엔트로피는 정보 이론에서의 엔트로피 각 데이터에 대한 정보의 평균 값을 의미 수식으로는 어떤 확률 변수 X에 대해, 다음 값을 의미 $$ H(X) = -\sum_{x \in X} p(x) log_2p(x) $$
해석 (주관 가미) 확률이 낮을수록, 해당 정보는 유용함 어떤 사건 x가 일어날 확률은 p(x) 이 p(x)에 대한 정보의 가치는 -log(p(x))가 되는 것 -log(p(x))는 p가 작을수록 커지기 때문 즉, 정보의 기댓값은 위 식처럼 계산되는 것 물론 p가 0에 가까워지면 -logp는 아주 커지지만, 그만큼 발생 확률이 낮아져서 의미가 줄어듦 n개의 사건에 대해, 각 사건이 일어날 확률이 정확히 1/n 일 때 최대 엔트로피를 가짐 References https://en.
read moreml
PCA
PCA PCA 데이터의 차원이 너무 크다면, 데이터의 의미를 제대로 표현하지 못함 데이터의 분산을 최대한 보존하며, 서로 직교하는 낮은 차원의 새로운 basis를 찾는 방법 데이터가 의미있으려면, 각 값 별로 분산이 큰 방향을 찾는 것이 중요함 이를테면 각 테이터들이 a라는 방향을 기준으로 값이 별로 차이나지 않는다면, a 방향으로 데이터를 분석하는 것은 의미가 적음 반대로 b 방향으로는 값이 넓게 퍼져있는 경우(분산이 큰 경우), b 방향을 이용해 데이터의 특성을 분석하는 것이 유리 즉, b 방향처럼 분산이 가장 커지는 방향의 벡터(주성분)를 basis로 삼으면 됨 이 basis로 span된 저차원 공간으로, 고차원의 데이터를 projection 하면 됨 Basis를 구하기 위해서는 공분산행렬 $AA^T$에 대해 Eigen Decomposition을 수행해야 함 가장 큰 eigen value를 가지는 eigen vector를 뽑으면 됨 차원은 줄이면서, 데이터의 특성은 최대한 보존할 수 있음 References https://ratsgo.
read more