경기도미래기술학교 AI개발자 부트캠프 27일차 TIL- 벡터 공부

2023. 6. 15. 20:18python

반응형

https://www.youtube.com/watch?v=g3n1VxiXgrE 

속력 : 크기 이다. -> 스칼라.

 

속도 : 크기 + 방향이다.  -> 벡터

 

화살표 하나가 있으면 벡터 표현이 가능하다.

 

화살표의 길이 : 크기

화살표의 방향 : 벡터의 방향.

 

시작점 A를 시점. 끝점 B를 종점.

 

AB의 크기가 1이면 단위벡터(유닛벡터)다. 크기가 1로 고정되어 있는 것이 단위벡터다. 단위벡터는 방향을 나타내는데 집중을 한다.

 

시점과 종점이 같은 벡터는? 영벡터라고 한다. 영벡터는 방향을 고려하지 않는다.

 

벡터가 서로 같을 조건 : 크기와 방향이 동일하면 위치에 상관없이 같은 벡터이다. 정육각형의 예시.

 

AO 벡터와 OD 벡터는 서로 같다.

 

OA과 OD는 크기는 같지만 방향이 다르다.

 

 

 

#####################################################################################

 

https://needjarvis.tistory.com/454

 

유클리디안 거리(Euclidean Distance) 개념과 구현해보기

유클리디안 거리(Euclidean Distance) 혹은 유클리드 거리는 매우 심플하고, 베이직한 값들간의 거리를 구하는 알고리즘이다. 이틀 토대로 값들간의 유사도를 구할 수 있어서 유클리디안 거리로 유사

needjarvis.tistory.com

유클리디안 거리.

 

Mean Subtraction(평균 차감)

http://aikorea.org/cs231n/neural-networks-2-kr/

 

CS231n Convolutional Neural Networks for Visual Recognition

목차: 데이터 및 모델 준비 앞 장에서 내적(dot product) 및 비선형성(non-linearity)을 연산을 순차적으로 수행하는 뉴런(Neuron) 모델과 이러한 뉴런들의 다층구조(layers)로 구성된 신경망(Neural Networks)에

aikorea.org

 

평균 계산할 때 그냥 나눠도 되고 statistics 모듈을 사용해서도 가능하다.

import statistics

scores = [10,20,30]
n_student = len(scores)

mean = statistics.mean(scores)

#평균의 제곱
square_of_mean = mean**2

#제곱의 평균
mean_of_square = (scores[0]**2 + scores[1]**2 + scores[2]**2)/n_student

variance = mean_of_square - square_of_mean

std = variance **0.5

print(mean)

print(std)

https://www.youtube.com/watch?v=ApC2qr_Itmc 

표준정규분포 : 평균이 0이고 표준편차가 1인 정규분포N이다(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)

norm은 벡터의 크기이다. 각 엘리먼트들을 제곱해서 더한 것을 제곱근한다.

Unit Vectors : 각 요소를 norm 값으로 나누고 그 나눈 요소를 더해서 제곱근 하면 1이 나온다?

유닛 벡터의 각 엘리먼트를 제곱하여 더한 값은 1이 나와야 함? 이거 두개 중에 뭐지? 

 

cosine_similarity : 두 벡터 사이의 유사성을 측정하기 위한 척도.

내적(Dot Product) /두 벡터 크기의 곱

 

hat : 예측값 나타내는 표기. 평균 제곱 오차를 쓸 때 사용한다.

평균 제곱 오차 : 예측값과 실제값을 비교하는 것으로 회귀 모델의 예측 성능을 측정하는 데 주로 사용된다.

 

Euclidean Distance (유클리디안 거리) : 두 점 사이의 거리를 계산한다.

 

#유클리디안 거리로 두 점 사이의 거리 구하기.

d = (((a[0]-b[0])**2) + ((a[1]-b[1])**2))**0.5

print(d)

각 요소의 차를 제곱해서 모두 더한다. 그 다음 제곱근 하면 된다.

 

 

 

코드 쳤던 것들

 

 

import math

# Unit Vectors : 각 요소를 norm 값으로 나누고 그 나눈 요소를 더해서 제곱근 하면 1이 나온다.


# x, y, z = 1, 2, 3
#
# norm = (x**2 + y**2 + z**2) ** 0.5
#
# print(norm)
#
#
# x,y,z = x/norm, y/norm, z/norm
#
# norm = (x**2 + y**2 + z**2)**0.5
#
# print(norm)



# Dot Productv (벡터의 내적) 요소별 곱셈과 합산을 통해 하나의 스칼라 값을 생성한다.
# 하다마드 프로덕트는 [x1*x2,y1*y2,z1*z2] 로 각각 나옴.

# x1, y1, z1 = 1,2,3
# x2, y2, z2 = 3,4,5
#
# dot_prod = x1*x2 + y1*y2 + z1*z2
#
# print(dot_prod)

#유사도는 Cosine similarity라고 한다.
#코사인 유사도로 논문 표절도 잡을 수 있다.



# Euclidean distance : 두 점을 이은 거리.
#manhattan distance : 두점의 거리를 계산할 때 상하좌우로 움직일 수 있다.

# x1,y1,z1 = 1,2,3
#
# x2,y2,z2 = 3,4,5
#
# e_distance = (x1-x2)**2+(y1-y2)**2 + (z1-z2)**2
# e_distance **= 0.5
#
# print(e_distance)


#Squared Error 제곱 오차.

# pred1, pred2, pred3 = 10, 20, 30
# y1, y2, y3 = 10, 25, 40
#
# s_error1 = (pred1 - y1)**2
# s_error2 = (pred2 - y2)**2
# s_error3 = (pred3 - y3)**2
#
# print(s_error1, s_error2, s_error3)


#Squared Error 평균 제곱 오차.

# pred1, pred2, pred3 = 10, 20, 30
# y1, y2, y3 = 10, 25, 40
# n_data = 3
#
# s_error1 = (pred1 - y1)**2
# s_error2 = (pred2 - y2)**2
# s_error3 = (pred3 - y3)**2
#
# mse = (s_error1 + s_error2 +s_error3)/n_data
# print(mse)


# scores = [10,20,30]
#
# print(scores[0])
# print(scores[1])
# print(scores[2])

# scores = [10,20,30]
# print(scores)
# scores[0]= 100
# scores[1]=200
#
# print(scores)


# scores = [10,20,30]
#
# n_student= len(scores)
#
# mean = (scores[0]+scores[1]+ scores[2])/n_student
#
# print(mean)

#Mean Subtraction
# scores = [10,20,30]
#
# n_student= len(scores)
#
# mean = (scores[0]+scores[1]+ scores[2])/n_student
#
# scores[0] -= mean
# scores[1] -= mean
# scores[2] -= mean
#
# mean = (scores[0]+scores[1]+ scores[2])/n_student
#
# print(mean)

# import statistics
#
# scores = [10,20,30]
# n_student = len(scores)
#
# mean = statistics.mean(scores)
#
# #평균의 제곱
# square_of_mean = mean**2
#
# #제곱의 평균
# mean_of_square = (scores[0]**2 + scores[1]**2 + scores[2]**2)/n_student
#
# variance = mean_of_square - square_of_mean
#
# std = variance **0.5
#
# print("score mean: ",mean)
# print("score variance: ",variance)
#
# print("score standard deviation: ",std)
#
# print(statistics.variance(scores))


#Standardization
# import statistics
# scores = [10,20,30]
# n_student = len(scores)
#
# mean = statistics.mean(scores)
#
# #평균의 제곱
# square_of_mean = mean**2
#
# #제곱의 평균
# mean_of_square = (scores[0]**2 + scores[1]**2 + scores[2]**2)/n_student
#
# variance = mean_of_square - square_of_mean
#
# std = variance **0.5
#
# print("score mean: ",mean)
# print("score variance: ",variance)
# print("score standard deviation: ",std)
#
# scores[0] = (scores[0]-mean)/std
# scores[1] = (scores[1]-mean)/std
# scores[2] = (scores[2]-mean)/std
#
#
# mean = statistics.mean(scores)
#
# #평균의 제곱
# square_of_mean = mean**2
#
# #제곱의 평균
# mean_of_square = (scores[0]**2 + scores[1]**2 + scores[2]**2)/n_student
#
# variance = mean_of_square - square_of_mean
#
# std = variance **0.5
#
# print("2. score mean: ",mean)
# print("2. score variance: ",variance)
# print("2. score standard deviation: ",std)


#
# v1, v2 = [1,2,3],[3,4,5]
#
# v3= [v1[0]*v2[0],v1[1]*v2[1],v1[2]*v2[2]]
# print(v3)
#
# v1,v2 = [1,2,3],[3,4,5]
# v3=[0,0,0]
#
# v3[0]=v1[0]*v2[0]
# v3[1]=v1[1]*v2[1]
# v3[2]=v1[2]*v2[2]
# print(v3)
#
# v1,v2 = [1,2,3],[3,4,5]
# v3 = list()
# v3.append(v1[0]*v2[0])
# v3.append(v1[1]*v2[1])
# v3.append(v1[2]*v2[2])
# print(v3)
#

# #norm
# v1= [1,2,3]
#
# norm = (v1[0]**2+v1[1]**2+v1[2]**2)**0.5
# print(norm)
#
# norm = 0
# norm += v1[0]**2
# norm += v1[1]**2
# norm += v1[2]**2
#
# norm **=0.5
#
# print(norm)


#Unit Vectors

# v1 = [1,2,3]
#
# norm = (v1[0]**2 + v1[1]**2 + v1[2]**2)**0.5
# print(norm)
#
# v1 = [v1[0]/norm, v1[1]/norm,v1[2]/norm]
# norm = (v1[0]**2 + v1[1]**2 + v1[2]**2)**0.5
# print(norm)

#dot product. 내적.
# v1,v2 = [1,2,3],[3,4,5]
#
# dot_prod = v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2]
# print(dot_prod)
#
# dot_prod=0
# dot_prod+=v1[0]*v2[0]
# dot_prod+=v1[1]*v2[1]
# dot_prod+=v1[2]*v2[2]
#
# print(dot_prod)
#
# v1[0] **=2
# v1[1] **=2
# v1[2] **=2
#
# v2[0] **=2
# v2[1] **=2
# v2[2] **=2
#
# #norm
# num1=(v1[0]+v1[1]+v1[2])**0.5
# num2=(v2[0]+v2[1]+v2[2])**0.5
#
# cosine_similarity = dot_prod/(num1*num2)
#
# print("cosine_similarity: ",cosine_similarity)

#평균제곱 오차.
# predictions = [10,20,30]
# labels = [10,25,40]
# n_data = len(predictions)
#
# mse = 0
# mse += (predictions[0]- labels[0])**2
# mse += (predictions[1]- labels[1])**2
# mse += (predictions[2]- labels[2])**2
#
# mse /= n_data
# print(mse)


# scores = [10,20,30]
#
# score_sum = 0
#
# for score in scores:
# score_sum +=score
# print(score_sum)

#
# numbers = [1,4,5,6,4,2,1]
#
# iter_cnt = 0
#
# for _ in numbers:
# iter_cnt+=1
# print(iter_cnt)

# scores = [10,20,30,40,50]
#
# for score_idx in range(len(scores)):
# scores[score_idx]+=10
#
# print(scores)


a = [2,3]

b = [5,7]

#유클리디안 거리로 두 점 사이의 거리 구하기.

d = (((a[0]-b[0])**2) + ((a[1]-b[1])**2))**0.5

print(d)
728x90