오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-03 00:01
관리 메뉴

우노

[ML] NNLS(Non-negative least squares)란? 본문

AI/Machine Learning

[ML] NNLS(Non-negative least squares)란?

운호(Noah) 2020. 9. 7. 14:29

기본 선형 회귀란?

  • 기본 선형 회귀 분석에서는 독립변수 (X)와 종속 변수 (Y)의 최적화 된 선형 관계를 설명하기 위해
  • 적절한 가중치(weight)와 편향(bias)을 찾습니다.

NNLS (Non-Negative Least Squares) 회귀란?

  • 이때, NNLS는 가중치(weight)가 음수가 되는 것을 허용하지 않는 수학적 최적화 기술입니다.

  • 독립변수 X와 종속 변수 Y가 주어졌을 때 최적화 하고자 하는 식

    • 여기서 b ≥ 0 은 벡터 b 의 각 성분이 음수가 아니어야 함을 의미하고

    • ‖ · ‖₂ 는 Euclidean norm 을 나타냅니다 .

  • 즉, 유클리드 표준 값을 최소로 하며 양수값을 가지는 가중치(weight)를 찾는 것 입니다.

  • 간단한 예제 코드

    • 제공하는 독립변수와 종속변수

      • 60 b1 + 90 b2 + 120 b3 = 67.5
      • 30 b1 + 120 b2 + 90 b3 = 60
    • 위 식이 주어졌을 때 유클리드 표준 값을 최소로 하는 가중치와 편향을 찾는 예제입니다.

        import numpy as np
        from scipy.optimize import nnls 
      
        A = np.array([[60, 90, 120], 
                      [30, 120, 90]])
      
        y = np.array([67.5, 60])
      
        # coef : 가중치, intercept : 편향
        coef, intercept = nnls(A,y)
      
        print(coef)
        print(intercept)
        # [0.         0.17857143 0.42857143]
        # 0.0
      
        # NNLS에서 나온 각 weight 추출
        C0=np.array(pd.DataFrame(coef).iloc[0])
        C1=np.array(pd.DataFrame(coef).iloc[1])
        C2=np.array(pd.DataFrame(coef).iloc[2])
      
        # 구한 가중치와 편향을 사용해 임의의 데이터 결과를 출력해보기
        print(90*C0 + 120*C1 + 60*C2)
        print(120*C0 + 60*C1 + 90*C2)
        #[47.1428571429]
        #[49.2857142857]

실제 구현 코드

Comments