본문 바로가기
AI 및 Data Analysis

[ScRAT] STEP 1. Sample mixup

by doraemin_dev 2025. 3. 20.

ScRAT의 첫번째 단계 : Sample mixup

논문 4.1 Sample Mixup 부분에서는 scRNA-seq 데이터가 적은 샘플 크기로 인해 과적합(overfitting) 될 가능성이 높다는 문제를 해결하기 위해 Mixup 기법을 도입한 방법을 설명하고 있습니다.
Mixup은 원래 컴퓨터 비전에서 사용된 데이터 증강 기법으로, 두 개의 샘플을 선형 결합하여 새로운 샘플을 생성하는 방법입니다.
 
존의 적은 샘플 데이터를 보완하기 위해, 기존 샘플을 조합하여 새로운 가상 샘플을 생성하여 훈련 데이터 증가시킵니다.

x~ =λ xi​ +(1-λ)  x′i​
y~ =λ y + (1-λ)  y′

  * given two scRNA-seq samples S and S’  
  * λ[0, 1]
  * xi and x ’i are gene expression profile of cells drawn from S and S’
  * y and yare corresponding one-hot phenotype label encodings


main.py 의 mixups() 함수에서 시행

Mixup 적용 및 노이즈 추가

  • 각 세포 타입 별로 mixup을 적용.
set_union = sorted(set(cell_type_augmented[idx_1]).union(set(cell_type_augmented[idx_2])))
while diff < (args.min_size // 2):
    for ct in set_union:
        i_sub_1 = idx_1[cell_type_augmented[idx_1] == ct]
        i_sub_2 = idx_2[cell_type_augmented[idx_2] == ct]

 

  • 샘플링된 세포를 mixup하여 새로운 데이터를 생성.
  • 특정 세포 타입이 하나의 샘플에만 존재할 경우, 가우시안 노이즈(add_noise(x_mix))를 추가.
if len(i_sub_1) == 0:
    sampled_idx_1 = [-1] * diff_sub
    sampled_idx_2 = np.random.choice(i_sub_2, diff_sub)
    x_mix, _ = mixup(data_augmented[sampled_idx_1], data_augmented[sampled_idx_2], alpha=args.alpha, lam=lam)
    x_mix = add_noise(x_mix)
elif len(i_sub_2) == 0:
    sampled_idx_1 = np.random.choice(i_sub_1, diff_sub)
    sampled_idx_2 = [-1] * diff_sub
    x_mix, _ = mixup(data_augmented[sampled_idx_1], data_augmented[sampled_idx_2], alpha=args.alpha, lam=lam)
    x_mix = add_noise(x_mix)
else:
    sampled_idx_1 = np.random.choice(i_sub_1, diff_sub)
    sampled_idx_2 = np.random.choice(i_sub_2, diff_sub)
    x_mix, _ = mixup(data_augmented[sampled_idx_1], data_augmented[sampled_idx_2], alpha=args.alpha, lam=lam)

 

이후 mixpu() 함수로 넘어가서, 

샘플 데이터(x, x_p)를 mixup하는 역할을 담당합니다.

2025.03.20 - [AI 및 Data Analysis/Code] - [ScRAT] utils.py _ mixup()

 

[ScRAT] utils.py _ mixup()

🔍 mixup() 함수 상세 분석📌 1. mixup() 개요mixup() 함수는 두 개의 샘플(x, x_p)을 주어진 가중치(lam)에 따라 선형 조합하여 새로운 데이터를 생성하는 핵심 함수입니다.즉, mixups() 함수는 mixup을 수행

doraemin.tistory.com


mixups()에서 y가 mixup되는 코드

labels_augmented = np.concatenate(
    [labels_augmented, [lam * labels_augmented[idx_1[0]] + (1 - lam) * labels_augmented[idx_2[0]]] * diff])

 

예제

🔹 원본 데이터

x1 = [1, 2, 3]    # 첫 번째 샘플
x2 = [10, 20, 30] # 두 번째 샘플
y1 = [1, 0]       # 첫 번째 샘플 라벨 (One-hot, 예: Class 1)
y2 = [0, 1]       # 두 번째 샘플 라벨 (One-hot, 예: Class 2)
lam = 0.7

🔹 Mixup 적용

  • 새로운 x_mix가 생성됨.
  • y_mix = [0.7, 0.3]이므로, 모델이 이 샘플을 볼 때 70% 확률로 Class 1, 30% 확률로 Class 2로 예측하도록 학습.

📌 Mixup 라벨의 효과

  • y를 mixup하면 라벨이 단순한 정답(0 또는 1)이 아니라 확률 분포를 학습하도록 함.
  • 모델이 더 부드러운 결정 경계를 가지게 되어 과적합 방지 효과를 얻을 수 있음.

코드 전체
2025.03.20 - [AI 및 Data Analysis/Code] - [ScRAT] Code Demo

[ScRAT] Code Demo

이전 글에서, ScRAT 실행을 해보았다.2025.03.20 - [AI, 논문, 데이터 분석] - [ScRAT] scRNA Analysis [ScRAT] scRNA AnalysisPaper : Phenotype prediction from single-cell RNA-seq data using attention-based neural networks https://academic.o

doraemin.tistory.com