캡쳐 사진 및 글작성에 대한 도움 출저 : 유튜브 - 허민석님


Norm

Norm이란 무엇일까?

선형대수 안에서는 Norm이란 벡터공간에서 벡터의 크기 또는 길이를 측정할 때 사용되는 개념이다.
공식은 아래와 같이, 절대값을 취한뒤 다 더해주는 것이다. 이것은 양수가 나오며 길이나 사이즈를 측정할 수 있게 된다.
image

대표적으로 Norm은 2가지 종류가 있다.

  1. L1 Norm : 위 공식상의 p값이 1이다.
    image

  2. L2 Norm : p값이 2이다. 해당 x값을 제곱해서 더하고, 마지막에 루트를 취한다.
    image


아래부터는 쥬피터 노트북 실습화면으로 같이 보자.


실습

2. Norm
In [1]:
from IPython.core.display import display, HTMLdisplay(HTML("<style> .container{width:90% !important;}</style>"))

L1 Norm : 주사위 게임으로 이해하기

  • 1부터 6대신 -3부터 3까지 나오는 주사위을 굴린다.
  • -3이 나오면 뒤로 3걸음, 3이 나오면 앞으로 3걸음 갈 것이다
In [2]:
import pandas as pdimport numpy as npfrom numpy import linalg #리니어 알제브라 함수

1. 데이터 프레임 만들기

  • size (3,3) 으로 -3~3이 나오도록 만든다.
  • 각 행별로,총 3사람이 주사위를 던지는 것이다.
  • 각 칼럼별로, 3회 던지는 것이다.
In [4]:
df = pd.DataFrame( np.random.randint(low=-3, high = 3, size=(3,3)))df
Out[4]:
0 1 2
0 -3 -3 1
1 1 2 2
2 -3 1 0
In [5]:
df.columns=['move_1', 'move_2','move_3',]
In [6]:
df
Out[6]:
move_1 move_2 move_3
0 -3 -3 1
1 1 2 2
2 -3 1 0

2. 누가 가장 많이 걸었을까?

  • 뒤로 걷든, 앞으로 걷든 벡터의 크기를 구해야한다
  • 이 때 사용되는 개념이 **L1 Norm**일 것이다.
  • 간단하게 p=1이므로, 각 행을 절대값 취해서 더할 때 L1 norm을 쓴다.

2-1. 계산을 위해 df를 array로 만든다.

In [8]:
movements = df.values
In [9]:
movements
Out[9]:
array([[-3, -3,  1],       [ 1,  2,  2],       [-3,  1,  0]])

2-2. norm은 numpy의 linearalgebra 모듈안에 있다.

Norm의 종류는 ord로 구분한다.

  • ord = 1 : L1 norm을 사용한다.
  • ord = 2 : L2 norm을 사용한다.

    L1 norm을 axis=1로 행방향으로 절대값 취해서 더해진다.

In [10]:
# Norm의 종류는 ord로 구분한다.linalg.norm(movements, ord=1, axis=1)
Out[10]:
array([7., 5., 4.])

3. L1 norm(절대값 취해서 다 더하는 것)은 Computer Science에서는 어디서 사용할까?

  • L1 Regularization
  • Computer Vision에서 사용된다.

L2 Norm

공식상으로 p=2이므로, 각 x를 제곱해서 다 더한다음 마지막에 루트를 취한다.

고등학교 때 배운 피타고라스의 정리와 일치한다.

1. 각 데이터 포인트의 거리를 측정하기 위해 df를 만들자.

  • 3행2열의 size로, 1부터 10까지 랜덤한 정수가 들어가도록 만들자
In [11]:
df = pd.DataFrame( np.random.randint(low=1, high=10, size=(3,2)))df
Out[11]:
0 1
0 5 1
1 2 2
2 2 1
In [12]:
df.columns = ['x', 'y']df
Out[12]:
x y
0 5 1
1 2 2
2 2 1

2. df로 만든 x, y 좌표쌍을 시각화하자

In [13]:
import matplotlib.pyplot as pltimport seaborn as sns%matplotlib inline #plot명령시 바로 차트가 보여진다.

2-1. 벡터의 크기를 구하는 피타고라스 같은 L2 norm이므로.. 차트를 그려놓고 보자

In [16]:
sns.lmplot('x', #x축 들어갈 칼럼                  'y', #y축 들어갈 칼럼          data=df, #dataFrame          fit_reg=False, #Regression line을 표시할 것인가          scatter_kws={'s':200}) # S maker와 sizeplt.title('data point visualization')plt.xlabel('x')plt.ylabel('y')
Out[16]:
Text(6.675,0.5,'y')

3. (0,0)에서 가장 가까운 점을 찾기위해 L2 Norm을 사용해보자.

3-1. 어떠한 계산을 위해서는 df->values로 array로 풀어주자

In [18]:
data_points = df.valuesdata_points
Out[18]:
array([[5, 1],       [2, 2],       [2, 1]])
In [19]:
## 3-2. array를 가지고 L2 norm을 적용시켜보자.linalg.norm(data_points, ord=2, axis=1)
Out[19]:
array([5.09901951, 2.82842712, 2.23606798])

L2 norm은 어디서 사용할까?

머신러닝에서 사용하는 유클리디언 디스턴스가 바로 L2 norm이다.

  • kNN algorithm
  • kmean algorithm

둘다 벡터의 거리가 이용되는 알고리즘 들이다.


+ Recent posts