Note
0203-0217
z_e
2025. 2. 17. 11:24
*Cosine similarity를 임베딩 간 유사성 비교에 사용하는 이유
- 크기 차이 무시, 방향 비교
- Word2Vec, BERT, scRNA-seq ..등의 임베딩에서 코사인 유사도 사용해 벡터 간 의미적 유사성 비교
- 고차원 공간에서 euclidean distance 보다 더 신뢰가능.. 고차원 공간에서는 모든 벡터들이 서로 떨어지기 때문에 유클리디안 거리가 큰 의미가.. 그러나 코사인 유사도는 차원이 증가해도 상대적으로 더 일관된 유사성 제공
*Dot Product(내적) : 두 벡터의 방향, 크기를 모두 고려하여 유사성 측정
*squeeze(dim=0)은 첫 번째 차원(0번 차원)이 크기 1인 경우 제거
import torch
# 3D 텐서 생성
tensor = torch.rand(1, 3, 4) # shape: (1, 3, 4)
print(tensor.shape) # 출력: torch.Size([1, 3, 4])
# squeeze(0) 적용
squeezed_tensor = tensor.squeeze(0)
print(squeezed_tensor.shape) # 출력: torch.Size([3, 4])
tensor2 = torch.rand(2, 3, 4) # shape: (2, 3, 4)
squeezed_tensor2 = tensor2.squeeze(0)
print(squeezed_tensor2.shape) # 출력: torch.Size([2, 3, 4]) (변화 없음)
* 벡터 유사도 비교 시 정규화를 수행하여 unit vector를 사용. 방향성만 학습하게 만듬
L2 정규화는 벡터를 크기 1로 변환하는 것
Dot Product 값 == Cosine Similarity 값과 동일
*Early stopping
: 과적합(overfit)방지하기 위해, 검증 데이터의 성능을 모니터링하다가 손실이 개선되지 않는 상태가 일정 횟수(patient) 이상 지속되면 학습을 중단
os.path.splitext()
: 파일명과 확장자를 분리하는 함수, 모든 확장자(.txt, .csv, .h5ad 등)에 대해 범용적으로 동작
import os
file_names = [os.path.splitext(filename)[0] for filename in anndata_list]