우노
[ML] NNLS(Non-negative least squares)란? 본문
기본 선형 회귀란?
- 기본 선형 회귀 분석에서는 독립변수 (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]
-
실제 구현 코드
- 기본선형회귀와 NNLS 비교
'AI > Machine Learning' 카테고리의 다른 글
[ML] SVM (Support Vector Machine) 이란? (0) | 2020.09.12 |
---|---|
[ML] 기본선형회귀 모델과 NNLS 모델 비교 코드 (0) | 2020.09.07 |
[ML] 교차검증 (CV, Cross Validation) 이란? (8) | 2020.08.14 |
[ML] 의사결정트리(Decision Tree) 란? (11) | 2020.08.13 |
[ML] Data Preprocessing - Missing Value (결측치 처리) (0) | 2020.08.11 |
Comments