2024. 1. 26. 19:00ㆍpython/intermediate
선형 회귀용 Python 패키지
이제 Python에서 선형 회귀 구현을 시작할 시간입니다. 이를 위해 적절한 패키지와 해당 기능 및 클래스를 적용합니다.
NumPy 는 1차원 및 다차원 배열에 대한 많은 고성능 작업을 허용하는 기본 Python 과학 패키지입니다. 또한 많은 수학적 루틴을 제공합니다. 물론 오픈소스입니다.
NumPy에 익숙하지 않은 경우 공식 NumPy 사용자 가이드를 사용 하고 NumPy 자습서: Python의 데이터 과학에 대한 첫 번째 단계를 읽어보세요 . 또한 Look Ma, No forLoops: NumPy 및 Pure Python을 사용한 배열 프로그래밍과 NumPy 및 TensorFlow 성능 비교를 통해 NumPy를 적용할 때 얻을 수 있는 성능 향상에 대한 좋은 아이디어를 얻을 수 있습니다.
scikit-learn 패키지는 NumPy 및 기타 패키지를 기반으로 구축되어 널리 사용되는 기계 학습용 Python 라이브러리입니다. 데이터 전처리, 차원 축소, 회귀 구현, 분류, 클러스터링 등을 위한 수단을 제공합니다. NumPy와 마찬가지로 scikit-learn도 오픈 소스입니다.
scikit-learn 웹사이트 의 일반화 선형 모델 페이지를 확인하여 선형 모델에 대해 자세히 알아보고 이 패키지의 작동 방식에 대한 더 깊은 통찰력을 얻을 수 있습니다.
선형 회귀를 구현하고 scikit-learn 범위를 넘어서는 기능이 필요한 경우 statsmodels 를 고려해야 합니다 . 통계 모델 추정, 테스트 수행 등을 위한 강력한 Python 패키지입니다. 오픈소스이기도 합니다.
statsmodels에 대한 자세한 내용은 공식 웹사이트 에서 확인할 수 있습니다 .
이제 이 튜토리얼을 따라하려면 다음 패키지를 모두 가상 환경 에 설치해야 합니다 .
!python -m venv lecture
!source lecture/bin/activate
!python -m pip install numpy scikit-learn statsmodels
그러면 NumPy, scikit-learn, statsmodels 및 해당 종속 항목이 설치됩니다.
scikit-learn을 사용한 단순 선형 회귀
가장 간단한 사례인 단순 선형 회귀부터 시작하겠습니다. 선형 회귀를 구현할 때 다음과 같은 5가지 기본 단계가 있습니다.
- 필요한 패키지와 클래스를 가져옵니다.
- 작업할 데이터를 제공하고 최종적으로 적절한 변환을 수행합니다.
- 회귀 모델을 만들고 이를 기존 데이터에 맞춥니다.
- 모델 피팅 결과를 확인하여 모델이 만족스러운지 확인하십시요.
- 예측을 위해 모델을 적용합니다.
이러한 단계는 대부분의 회귀 접근 방식 및 구현에 대해 다소 일반적입니다. 자습서의 나머지 부분에서는 여러 가지 시나리오에 대해 이러한 단계를 수행하는 방법을 배우게 됩니다.
1단계: 패키지 및 클래스 가져오기
첫 번째 단계는 다음에서 패키지 numpy와 sklearn.linear_model로 부터 class.LinearRegression를 가져오는 것입니다
import numpy as np
from sklearn.linear_model import LinearRegression
이제 선형 회귀를 구현하는 데 필요한 모든 기능을 갖추었습니다.
NumPy의 기본 데이터 유형은 numpy.ndarray라 부르는 어레이 타입입니다. 이 튜토리얼의 나머지 부분에서는 배열이라는 용어를 사용하여 유형 numpy.ndarray 의 인스턴스를 나타냅니다.
이 sklearn.linear_model.LinearRegression 클래스를 사용하여 선형 및 다항식 회귀를 수행하고 그에 따라 예측을 수행합니다.
2단계: 데이터 제공
두 번째 단계는 작업할 데이터를 정의하는 것입니다. 입력(회귀변수, 𝑥)과 출력(응답, 𝑦)은 배열 또는 유사한 객체여야 합니다. 이는 회귀용 데이터를 제공하는 가장 간단한 방법입니다.
x = np.array([5, 15, 25, 35, 45, 55]).reshape((-1, 1))
y = np.array([5, 20, 14, 32, 22, 38])
이제 x 입력 , y 출력 이라는 두 개의 배열이 있습니다. 이 배열은 2차원 이어야 하며 더 정확하게는 하나의 열과 필요한 만큼의 행을 가져야 하기 때문에 .reshape()호출 해야 합니다 . 이것이 바로 .reshape() 의 인수 (-1, 1) 을 지정하는 것입니다.
x
y
보시다시피 x에는 두 개의 차원이 있고 x.shape 는 (6, 1)인 반면에 y는 단일 차원이고 y.shape는 (6,) 입니다 .
3단계: 모델 생성 및 피팅
다음 단계는 선형 회귀 모델을 만들고 기존 데이터를 사용하여 피팅하는 것입니다.
회귀 모델을 나타내는 클래스의 LinearRegression 인스턴스를 만듭니다 .
model = LinearRegression()
이 문은 LinearRegression 인스턴스인 변수 model을 생성합니다. 다음과 같은 여러 선택적 매개변수를 LinearRegression에게 제공할 수 있습니다.
- fit_intercept는 True 이면 절편 𝑏₀을 계산하거나 False 일 경우 0 과 같다고 간주하는 부울 입니다 . 기본값은 .True 입니다.
- normalize은 True일 경우 입력 변수를 정규화하기로 결정하는 부울입니다 . 기본값은 False 입니다. 이 경우 입력 변수를 정규화하지 않습니다.
- copy_X는 입력 변수를 복사(True)할지 덮어쓸지(False)를 결정하는 부울입니다. 기본값은 True입니다.
- n_jobs은 정수이거나 None 입니다. 이것은 병렬 계산에 사용되는 작업 수를 나타냅니다. 기본값은 None 으로, 일반적으로 하나의 작업을 의미합니다. -1 은 사용 가능한 모든 프로세서를 사용한다는 의미입니다.
위에서 정의한 대로 모든 매개변수의 기본값을 사용합니다 .
이제 모델 사용을 시작할 시간입니다. 먼저 model 위에 .fit()을 호출해야 합니다.
model.fit(x, y)
.fit()과 함께 를 사용하면 기존 입력 및 출력 및 x, y를 인수로 사용하여 가중치 𝑏₀ 및 𝑏₁의 최적 값을 계산합니다 . 즉,.fit()은 모델에 적합합니다. 변수 model 자체인 self 를 반환합니다 . 그렇기 때문에 마지막 두 명령문을 다음 명령문으로 바꿀 수 있습니다.
model = LinearRegression().fit(x, y)
이 명령문은 이전 두 명령문과 동일한 작업을 수행합니다. 단지 더 짧을 뿐입니다.
4단계: 결과 얻기
모델을 피팅한 후에는 결과를 얻어 모델이 만족스럽게 작동하는지 확인하고 해석할 수 있습니다.
.score()가 model을 호출하여 결정 계수 𝑅²를 얻을 수 있습니다.
r_sq = model.score(x, y)
print(f"coefficient of determination: {r_sq}")
.score()를 실행하였을 때, 인수는 예측변수 x와 응답 y이고 반환 값은 𝑅²입니다.
model의 속성은 𝑏₀ 계수를 나타내는 .intercept_ 이고 .coef_ 는 𝑏₁ 입니다.
print(f"intercept: {model.intercept_}")
print(f"slope: {model.coef_}")
위의 코드는 𝑏₀ 및 𝑏₁을 얻는 방법을 보여줍니다. .intercept_는 스칼라이고 .coef_ 는 배열이라는 것을 알 수 있습니다 .
참고: scikit-learn에서는 관례 에 따라 뒤에 오는 밑줄이 속성이 추정됨을 나타냅니다. 이 예에서 .intercept_및 는 .coef_추정값입니다.
𝑏₀의 값은 약 5.63입니다. 이는 𝑥가 0일 때 모델이 반응 5.63을 예측한다는 것을 보여줍니다. 𝑏₁ = 0.54 값은 𝑥이 1 증가할 때 예측 반응이 0.54 증가한다는 것을 의미합니다.
y2차원 배열로도 제공할 수 있다는 것을 알 수 있습니다 . 이 경우 비슷한 결과를 얻게 됩니다.
new_model = LinearRegression().fit(x, y.reshape((-1, 1)))
print(f"intercept: {new_model.intercept_}")
보시다시피 이 예제는 이전 예제와 매우 유사하지만 이 경우에는 .intercept_는 단일 요소 𝑏₀로 구성된 1차원 배열이고 .coef_는 단일 요소 𝑏₁로 구성된 2차원 배열입니다.
5단계: 반응 예측
만족스러운 모델이 있으면 기존 데이터나 새 데이터를 사용하여 예측에 사용할 수 있습니다. 예측된 응답을 얻으려면 .predict() 사용하십시오.
y_pred = model.predict(x)
print(f"predicted response:\n{y_pred}")
.predict() 를 적용할 때, 회귀 변수를 인수로 전달하고 해당 예측 응답을 얻습니다. 이는 반응을 예측하는 것과 거의 동일한 방법입니다.
y_pred = model.intercept_ + model.coef_ * x
print(f"predicted response:\n{y_pred}")
이 경우에는 x 의 각 요소를 model.coef 와 곱하고 _model.intercept_를 결과물에 더하면 됩니다 .
여기의 출력은 차원에서만 이전과 다릅니다. 예측된 응답은 이제 2차원 배열이지만 이전 사례에서는 1차원이었습니다.
1차원 수를로 줄이면 이 두 가지 접근 방식은 동일한 결과를 산출합니다. x를 model.coef_와 곱할 때 x를 .x.reshape(-1), x.flatten(), 혹은 x.ravel()로 대체하는 것에 의해 이를 수행할 수 있습니다
실제로 회귀 모델은 종종 예측에 적용됩니다. 이는 적합 모델을 사용하여 새로운 입력을 기반으로 출력을 계산할 수 있음을 의미합니다.
x_new = np.arange(5).reshape((-1, 1))
x_new
y_new = model.predict(x_new)
y_new
여기 .predict()에 새로운 회귀 분석기 x_new에 적용되어 y_new 응답이 생성됩니다. 이 예제에서는 0은 포함하고 5는 배제하는, 즉, 0, 1, 2, 3및 4인 배열을 생성하기 위하여 numpy로 부터 arange()을 사용합니다.
'python > intermediate' 카테고리의 다른 글
Python 이름의 단일 및 이중 밑줄 I (1) | 2024.01.28 |
---|---|
Python의 선형 회귀 III (1) | 2024.01.27 |
Python의 선형 회귀 I (1) | 2024.01.25 |
Python3 중급 주제 (0) | 2024.01.24 |
프롬프트 엔지니어링 실제 사례 (1) | 2024.01.23 |