문득 머신러닝/딥러닝을 공부하는데
아래의 내용이 반복해서 나오기 시작했다. 뭔가 정리가 필요하다 .
0~1 사이 숫자
확률
정규화
스케일링
Sigmoid
Softmax
MinMaxScaler
활성화함수. Softmax, Sigmoid
출력값을 특정형태로 변환하는 역할
데이터전처리 스케일링/정규화 표준화처리 MinMaxScaler, StandardScaler
머신러닝 모델에 넣기전에 데이터를 변환하는 전처리 기법.
softmax
모델 출력의 각 라벨에 점수들을 0~1값으로 변환되어 전체의 합이 1이된다.
출력노드가 여러개이다 .
다중 분류 즉 고양이, 개, 자동차, 비행기 중 하나 선택할때 사용한다. softmax의 결과는 각 클래스일 확률처럼 해석할 수 있다.
고양이 : 2.1
개 : 8.3
자동차 : 1.2
비행기 : 2.0
고양이 : 0.02
개 : 0.95
자동차 : 0.01
비행기 : 0.02
sigmoid
0~1로 출력한다 .
스팸, 비스팸 분류 등의 이진분류에 사용된다. 출력노드는 1개.
0.95면 95%확률로 스팸으로 해석되는것. softmax와 비슷하지만 출력노드가 여러개가 아님으로 각 클래스를 독립적으로 판단할 수 있다. 또 각 출력이 독립적이기에 전체합이 1일 필요도 없다 .
입력 = 10
출력 = 0.99995
입력 = -10
출력 = 0.00005
MaxAbsScaler
최대 절대값으로 나눈다. 범위: -1 ~ 1 절대값 최대치를 기준으로 스케일링해 희소행렬에 유리하다.
*희소행렬: Sparse Matrix 행렬 대부분이 0 인 행렬반대는 밀집행렬이라부른다. Dense Metrix
from sklearn.preprocessing import MaxAbsScaler
data = [[-10], [5], [20]]
scaler = MaxAbsScaler()
result = scaler.fit_transform(data)
print(result)
min-max scaling
최솟값을 0, 최댓값을 1로 두고 입력데이터를 정규화하는 것.
키
150
170
190
0.0
0.5
1.0
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
RobustScaler
이상치의 영향을 줄인다. 아래처럼 100 같은 이상치가 있어도 영향을 덜받도록 한다 . 실제 업무에서 많이 사용한다.
from sklearn.preprocessing import RobustScaler
data = [[1], [2], [3], [100]]
scaler = RobustScaler()
result = scaler.fit_transform(data)
print(result)
Normalizer
각 행의 길이를 1로 만든다. 일반 정규화는 열 기준, 특징기준으로 정규화 계산되는데 normalizer은 행을 정규화한다. 내 NLP에서 자주쓰는데 방향만 비교하고 데이터 크기를 제거하는 용도라고 이해하면 된다.
*NLP Natural language processing 자연어처리. Chatgpt도 NLP 분야에 속한다. 문장에서는 각각 의 행과열에 어떻게 자리값이 되었느냐, 또 크기가 아닌 방향을 중요하게본다. 문서 길이는 무시하고 단어 사용패턴만 비교할수있다 . 다만 과거에 많이 사용했고 요즘은 LSTM Transformer, BERT GPT를 사용해서 임베딩 벡터를 만들고 Transformer 내부 정규화는 주로 layernorm을 사용하기에 현대에 딥러닝에서 normalizer를 직접 쓰는 경우는 많지않다 .다들 layernorm을 씀..
from sklearn.preprocessing import Normalizer
data = [
[3, 4]
]
scaler = Normalizer()
result = scaler.fit_transform(data)
print(result)
QuantileTransformer
분포 자체를 변환한다. 균등분포 혹은 정규분포 형태로. 스케일링보다 분포 변형기에 가깝다. 이상치가 있을때 순위만 사용해서분포를 균일하게 맞푸는 것이다 .0~ 1사이의 균등분포.
+ 정규분포로 만들고 싶다면 속성을 지정하며 평균 0, 표준편차 1근처의 정규분포 형태로 변환할 수도 있다.
from sklearn.preprocessing import QuantileTransformer
data = [[1], [2], [3], [1000]]
scaler = QuantileTransformer()
result = scaler.fit_transform(data)
print(result)
from sklearn.preprocessing import QuantileTransformer
scaler = QuantileTransformer(
output_distribution="normal"
)
standardscaler
이것도 꽤많이 봤다. 기본적인 정규화 표준화도구인데
평균을 0, 분산을 1, 표준편차를 1로 둔다.
음수 ~ 양수 로 표시된다.
각 라벨에서 키와 연봉이 있다면 키보다 연봉의 숫자가 보통 더 크기때문에 머신러닝이 연봉을 더 중요하게 생각할 수 있다.
KNN, SVM, PCA, Logistic Regression, Neural Network 등 크기에 민감한 알고리즘 학습전에 사용한다.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
즉
softmax = 합이 1
sigmoid = 예/아니오 확률
minmaxscaler 데이터 크기 맞춤 0~1
standardscaler 평균1, 분산 1의 숫자 표준화
RobustScaler
'이론' 카테고리의 다른 글
| TorchVision : PyTorch 공식 홈페이지에서 제공하는 컴퓨터 비전 전용 라이브러리 (0) | 2026.06.04 |
|---|---|
| ResNet, 역전파를 그대로 사용하되 Residual Connection을 추가한 CNN (0) | 2026.06.04 |
| 가중치란?: Weight 이 특징을 얼마나 중요하게 볼것인가? 수치표현 (0) | 2026.06.04 |
| ILSVRC이란? : ImageNet 데이터를 이용한 이미지 인식 대회 (0) | 2026.06.04 |
| ImageNet이란?: WordNet 명사개념마다 실제 이미지를 연결한 데이터셋. (0) | 2026.06.04 |