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 y’ are 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
'AI 및 Data Analysis' 카테고리의 다른 글
Difference btw '.h5ad' and '.h5' (0) | 2025.03.28 |
---|---|
[Alzheimer] 녹음 파일 불러와서 이미지로 변환하기 (0) | 2025.03.23 |
[SAM] 모델 다운로드 및 실행 (0) | 2025.02.26 |
[SK텔레콤 FLY AI] 대화형 작품 감상 AI 프로젝트 ; AI 흐름 개요 (0) | 2025.02.21 |
Metropolitan Museum of Art 데이터 CNN 학습하기 (1) | 2025.02.20 |