경기도미래기술학교 AI개발자 부트캠프 28일차 TIL-파이썬으로 하는 벡터공부 계속. Mean subtraction 하는 이유, 편차 만들기, 분산, 표준편차 등.

2023. 6. 16. 15:01python

반응형

 

https://bskyvision.com/entry/MSCNmean-subtraction-and-contrast-normalization%EC%9D%98-%EC%9D%B4%ED%95%B4

 

MSCN(mean subtraction and contrast normalization)의 이해

mean subtraction and contrast normalization (MSCN)은 Difference of Gaussian (DoG), Laplacian of Gaussian (LoG), Gradient Magnitude (GM)와 같은 이미지 전처리 방식 중에 하나이다. 눈에 보이는 것과 우리 뇌에서 이미지를 처리

bskyvision.com

Mean subtraction 하는 이유.

Mean Subtraction은 데이터 전처리 기법인데 주로 이미지 처리, 머신러닝 모델 학습 등에 사용된다.

 

이 작업을 함으로서 데이터의 중심을 원점으로 맞춰서 데이터의 각 포인트 간 상대적 위치를 유지할 수 있다.

 

편차 구하기.

data = [1,2,3,4,5]
deviation = [x-sum(data)/len(data) for x in data]

print(deviation)

numpy 쓰면 이렇게 된다.

import numpy as np

data = [1,2,3,4,5]
mean = np.mean(data)
deviations = [x-mean for x in data]

print(deviations)

표준편차(standard deviation)

data = [1,2,3,4,5]

n = len(data)
mean = sum(data)/n

#편차를 제곱한다.
squared_deviations = [(x-mean)**2 for x in data]
#평균한다.
#분산은 편차 제곱의 평균.
variance = sum(squared_deviations)/n

std_deviation = variance ** 0.5

print(std_deviation)

 

 

math_scores, english_scores = [50,60,70],[30,40,50]
n_student = len(math_scores)

math_sum, english_sum = 0,0
math_square_sum, english_square_sum = 0,0

for student_idx in range(n_student):
    math_sum += math_scores[student_idx]
    math_square_sum += math_scores[student_idx]**2

    english_sum += english_scores[student_idx]
    english_square_sum += english_scores[student_idx]**2

math_mean = math_sum / n_student
english_mean = english_sum / n_student

print(math_mean)
print(english_mean)

math_variance = math_square_sum/n_student - math_mean**2
english_variance = english_square_sum/n_student - english_mean**2

math_std = math_variance**0.5
english_std = english_variance**0.5

print("mean/std of Math:",math_mean, math_std)
print("mean/std of English:",english_mean, english_std)


for student_idx in range(n_student):
    math_scores[student_idx] = (math_scores[student_idx]-math_mean)/math_std
    english_scores[student_idx] = (english_scores[student_idx]-english_mean)/english_std

print('Math scores after standardization: ',math_scores)
print('English scores after standardization: ',english_scores)

math_sum, english_sum = 0,0
math_square_sum, english_square_sum = 0,0

for student_idx in range(n_student):
    math_sum += math_scores[student_idx]
    math_square_sum += math_scores[student_idx]**2

    english_sum += english_scores[student_idx]
    english_square_sum += english_scores[student_idx]**2

math_mean = math_sum / n_student
english_mean = english_sum / n_student

print(math_mean)
print(english_mean)

math_variance = math_square_sum/n_student - math_mean**2
english_variance = english_square_sum/n_student - english_mean**2

math_std = math_variance**0.5
english_std = english_variance**0.5

print("mean/std of Math:",math_mean, math_std)
print("mean/std of English:",english_mean, english_std)

# 1-13 Standardization. 평균이 0이고, 분산이 1로 바뀌게 된다. # 각 데이터에서 평균을 빼주고 표준편차(시그마)로 나눈다.

 

유닛벡터를 잘모른다.

 

import math

v1 = [1,2,3]
v2 = [4,5,6]

#norm 계산.
magnitude_v1 = math.sqrt(sum(x**2 for x in v1))
magnitude_v2 = math.sqrt(sum(x**2 for x in v2))

#유닛 벡터로 변환
unit_v1 = [x / magnitude_v1 for x in v1]
unit_v2 = [x / magnitude_v2 for x in v2]

print(unit_v1)
print(unit_v2)

cosine_similarity = sum(a*b for a,b in zip(unit_v1,unit_v2))

print(cosine_similarity)
v1 = [1, 2, 3]

square_sum = 0
for dim_val in v1:
    #각 요소의 제곱을 더한다.
    square_sum += dim_val**2
#제곱근.
norm = square_sum**0.5

print("norm of v1:", norm)

for dim_idx in range(len(v1)):
    v1[dim_idx] /= norm

print(v1)

# 유닛 벡터의 각 엘리먼트를 제곱하여 더한 값은 1이 나와야 함
add_element=0
for dim_idx in range(len(v1)):
    add_element += v1[dim_idx]**2

print(add_element**0.5)

두 개의 코드를 확인 하기. 유닛 벡터는 각 엘리먼트를 제곱해서 더하면 1이 나온다.

728x90