본문 바로가기
코드스테이츠 Ai Boostcamp

[선형대수] rank, span, projection

by mintee
728x90

선형대수 2

사실 선형대수의 기초적인 내용을 어제 하루 2시간 만에 다 흡수하려는 것은 말도 안된다는걸 모두가 알고 있습니다.

오늘은 조금 더 Data Science에 관련된 내용들을 추가로 배우도록 하겠습니다.

이 강의 이후에 여러분이 기억해야할 핵심 키워드들은 아래와 같습니다 .

  • 벡터와 매트릭스의 기본 연산
  • 상관계수
  • 공분산
  • Linear Projection

🏆 학습 목표

  • 공분산, 상관계수의 목적과 사용 예시, 차이점을 설명 할 수 있다.
  • 벡터의 직교와 그 조건에 대해서 설명 할 수 있다.
  • 단위 벡터와, 단위 벡터로의 구분을 설명 할 수 있다.
  • span, basis, rank의 내용을 이해 할 수 있다.
  • Gaussian elemination의 내용을 이해 할 수 있다.
  • linear projection과 예시를 설명 할 수 있다.

정리

  • [n132]

    이게 AI랑 무슨 관계가 있죠?

    • 분산, 공분산, 상관계수는 왜 나온거죠?

    다음과 같은 벡터가 있다고 칩시다.

    이를 시각화하면 아래 그림과 같을 것 입니다.

    좌표상에 있는 거의 모든 벡터는 다른 벡터와 상관이 아주 작게라도 있습니다.

    (하나가 증가할때, 다른 하나도 증가 하는 경향을 파악하는 것이 공분산 임을 기억하세요)

    딱 하나, 수직인 벡터만 상관 관계가 전혀 없다는 것이죠.

    Span

    Span 이란, 주어진 두 벡터의 (합이나 차와 같은) 조합으로 만들 수 있는 모든 가능한 벡터의 집합

    선형 관계의 벡터 (Linearly Dependent Vector)

    만약 두 벡터가 같은 선상에 있는 경우, 이 벡터들은 선형 관계에 있다고 표현합니다. 즉, 이 두 벡터들은 조합을 통해서 선 외부의 새로운 벡터를 생성 할 수 없습니다.

    선형 관계가 없는 벡터 (Linearly Independent Vectors)

    반대로 같은 선상에 있지 않은 벡터들은 선형적으로 독립되어 있다고 표현하며,

    주어진 공간 (2개의 벡터의 경우R2R^2평면)의 모든 벡터를 조합을 통해 만들어 낼 수 있습니다.

    Basis

    벡터 공간 VV의 basis 는,VV라는 공간을 채울 수 있는 선형 관계에 있지 않은 벡터들의 모음입니다. ( span 의 역개념 )예를 들어, 위의 그림에서 2개의 벡터 (빨강, 파랑)는 벡터 공간R2R^2의 basis 입니다.

    Orthogonal Basis

    Orthogonal Basis란, Basis 에 추가로 Orthogonal 한 조건이 붙는, 즉 주어진 공간을 채울 수 있는 서로 수직인 벡터들입니다.

    Orthonormal Basis

    Orthonomal Basis란, Orthogonal Basis에 추가로 Normalized 조건이 붙은 것으로, 길이가 서로 1인 벡터들입니다.

    Rank

    • 매트릭스의 rank란, 매트릭스의 열을 이루고 있는 벡터들로 만들 수 있는 (span) 공간의 차원입니다.
    • 매트릭스의 차원과는 다를 수도 있으며 그 이유는 행과 열을 이루고 있는 벡터들 가운데 서로 선형 관계가 있을 수도 있기 때문입니다.
    • 이 Rank를 확인 하는 방법은 여러가지 가 있지만, 그중 하나인 Gaussian Elimination을 통해 알아보도록 하겠습니다.

    이 행렬의 Rank 는 2이며 이는 3x3 매트릭스 이지만 R3R^3공간이 아닌 R2{R}^{2} 만을 벡터들로 만들어 낼 수 있음을 의미합니다.

    Linear Projections

과제

    • 블로그에 올리기 (그래프 부분)
    • 도전과제
    v = [7, 4]
    
    def myProjection(v):
        w = [v[0],v[0]]
        inner_product = v[0]*w[0]+v[1]*w[1]
        v_in_pro = v[0]*v[0] + v[1]*v[1]
        result = (inner_product/v_in_pro)*np.array(v)
        return result
    
    
    
    myProjection(v) # array([8.29230769, 4.73846154])
    
    # 그래프
    
    plt.xlim(-1.1, 12)          
    plt.ylim(-1.1, 10)
    
    v = [7, 4] # x=7,y=4
    w = [7, 7] # y=x=7
    proj =  np.array([8.29230769, 4.73846154])
    x_minus_proj = w - proj
    
    plt.gca().set_aspect('equal')
    
    x_vals = np.array(axes.get_xlim())
    y_vals = 4/7 * x_vals
    
    plt.plot(x_vals, y_vals, '--', color = '#636e72')
    plt.arrow(0, 0, proj[0], proj[1], linewidth = 3, head_width = .05, head_length = .05, color = '#00b894')
    plt.arrow(0, 0, v[0], v[1], linewidth = 3, head_width = .05, head_length = .05, color = '#0984e3')
    plt.arrow(0, 0, w[0], w[1], linewidth = 3, head_width = .05, head_length = .05, color = '#d63031')
    # plt.arrow(proj[0], proj[1], x_minus_proj[0], x_minus_proj[1],  linewidth = 3, head_width = .05, head_length = .05, color = '#00b894')
    
    plt.title("non x-axis projection")
    plt.show()
728x90

댓글