Python을 사용한 데이터 과학 : 선형 회귀를 수행하고 속도를 측정하는 8 가지 방법

이 기사에서는 Python 코드 / 패키지를 사용하여 간단한 선형 회귀를 수행하는 8 가지 방법에 대해 설명합니다. 우리는 그들의 장단점을 훑어보고 그들의 상대적인 계산 복잡성 측정을 보여줍니다.

많은 데이터 과학자에게 선형 회귀는 많은 통계 모델링 및 예측 분석 프로젝트의 시작점입니다. 큰 데이터 세트에 선형 모델을 (정확하고 빠르게) 맞추는 것의 중요성은 아무리 강조해도 지나치지 않습니다. 이 기사에서 지적했듯이 선형 회귀 모델의 ' LINEAR '용어는 특성의 정도가 아니라 계수를 나타냅니다.

특징 (또는 독립 변수)은 어느 정도 나 지수, 로그, 사인 곡선과 같은 초월 함수일 수 있습니다. 따라서 출력과 특징 간의 기능적 관계가 매우 비선형 인 경우에도 이러한 변환과 선형 모델을 사용하여 자연 현상의 큰 몸체를 (대략) 모델링 할 수 있습니다.

반면에 Python은 데이터 과학자가 선택한 사실상의 프로그래밍 언어로 빠르게 부상하고 있습니다. 따라서 데이터 과학자는 선형 모델을 상당히 큰 데이터 세트에 신속하게 맞출 수있는 모든 다양한 방법을 인식하고 프로세스 결과에서 각 기능의 상대적 중요성을 평가하는 것이 중요합니다.

그러나 Python에서 선형 회귀 분석을 수행하는 방법은 하나뿐입니까? 사용 가능한 옵션이 여러 개인 경우 가장 효과적인 방법을 선택하는 방법은 무엇입니까?

기계 학습 라이브러리 scikit-learn의 광범위한 인기로 인해 일반적인 접근 방식은 해당 라이브러리에서 선형 모델 클래스를 호출하고 데이터를 맞추는 것입니다. 이것은 머신 러닝의 다른 파이프 라인 기능 (예 : 데이터 정규화, 모델 계수 정규화, 선형 모델을 다른 다운 스트림 모델에 공급)을 적용하는 추가 이점을 제공 할 수 있지만 데이터 분석가가 빠른 속도를 필요로 할 때 가장 빠르고 깔끔한 방법은 아닙니다. 회귀 계수 (및 일부 기본 관련 통계)를 결정하는 쉬운 방법입니다.

더 빠르고 깨끗한 방법이 있습니다. 그러나 이들 모두는 동일한 양의 정보 나 모델링 유연성을 제공하지 않을 수 있습니다.

계속 읽어주세요.

다양한 선형 회귀 방법에 대한 전체 상용구 코드는 여기 내 GitHub 저장소에서 사용할 수 있습니다. 대부분은 SciPy 패키지를 기반으로합니다.

SciPy는 Python의 Numpy 확장을 기반으로 구축 된 수학적 알고리즘 및 편의 함수 모음입니다 . 사용자에게 데이터 조작 및 시각화를위한 고급 명령과 클래스를 제공하여 대화 형 Python 세션에 상당한 힘을 추가합니다.

각 방법에 대해 간략히 설명하겠습니다.

메서드 : Scipy.polyfit () 또는 numpy.polyfit ()

이것은 데이터 세트와 모든 정도의 다항식 함수 (사용자가 지정)를 받아들이고 제곱 오차를 최소화하는 계수 배열을 반환하는 매우 일반적인 최소 제곱 다항식 적합 함수입니다. 기능에 대한 자세한 설명은 여기에 있습니다. 단순 선형 회귀의 경우 차수 1을 선택할 수 있습니다. 더 높은 차수의 모델을 맞추려면 선형 특성 데이터에서 다항식 특성을 구성하고 모델에도 맞출 수 있습니다.

메서드 : Stats.linregress ()

이것은 Scipy의 통계 모듈 내에서 사용할 수있는 고도로 전문화 된 선형 회귀 함수입니다. 두 세트의 측정에 대해서만 선형 최소 제곱 회귀를 계산하도록 최적화되어 있으므로 유연성이 상당히 제한됩니다. 따라서이를 사용하여 일반화 된 선형 모델이나 다변량 회귀를 적합 할 수 없습니다. 그러나 특화된 특성으로 인해 단순 선형 회귀와 관련하여 가장 빠른 방법 중 하나입니다. 적합 계수 및 절편 항 외에도 R ² 계수 및 표준 오차와 같은 기본 통계를 반환합니다 .

방법 : Optimize.curve_fit ()

이것은 Polyfit 방법과 동일한 선을 따르지만 본질적으로 더 일반적입니다. scipy.optimize 모듈의이 강력한 함수는 최소 제곱 최소화를 수행하여 모든 사용자 정의 함수를 데이터 세트에 맞출 수 있습니다.

단순한 선형 회귀의 경우 선형 mx + c 함수를 작성하고이 추정기를 호출하면됩니다. 다변량 회귀에서도 작동한다는 것은 말할 필요도 없습니다. 최소 제곱 측정 값이 최소화 된 함수 매개 변수 배열과 관련 공분산 행렬을 반환합니다.

메서드 : numpy.linalg.lstsq

이것은 행렬 분해에 의해 선형 연립 방정식에 대한 최소 제곱 해를 계산하는 기본적인 방법입니다. numpy 패키지의 편리한 선형 대수 모듈에서 나옵니다. 내부적으로 유클리드 2- 노름을 최소화 하는 벡터 x 를 계산 하여 방정식 ax = b 를 풉니 다 || b — ax || ² .

방정식은 과소, 잘 또는 과다 결정될 수 있습니다 (즉, a 의 선형 독립 행의 수는 선형 독립 열의 수보다 작거나 같거나 클 수 있습니다). 경우 A는 , 광장과 전체 순위입니다 후 X (그러나 반올림 오류에 대한) 방정식의 "정확한"솔루션입니다.

이를 사용하여 단순 또는 다변량 회귀를 수행하고 계산 된 계수 및 잔차를 반환 할 수 있습니다. 한 가지 작은 트릭은이 함수를 호출하기 전에 가로 채기 항을 계산하기 위해 x 데이터에 1의 열을 추가해야한다는 것입니다. 선형 회귀 문제를 시도하는 더 빠른 방법 중 하나입니다.

메서드 : Statsmodels.OLS ()

Statsmodels는 다양한 통계 모델을 추정하고 통계 테스트를 수행하고 통계 데이터를 탐색하기위한 클래스와 함수를 제공하는 아주 작은 Python 패키지입니다. 각 추정기에 대해 광범위한 결과 통계 목록을 사용할 수 있습니다. 결과는 정확성을 보장하기 위해 기존 통계 패키지에 대해 테스트됩니다.

선형 회귀의 경우이 패키지에서 OLS 또는 Ordinary-Least-Square 함수를 사용하여 추정 프로세스에 대한 완전한 통계 정보를 얻을 수 있습니다.

기억해야 할 작은 트릭은 절편을 계산하기 위해 x 데이터에 상수를 수동으로 추가해야한다는 것입니다. 그렇지 않으면 기본적으로 계수 만보고합니다. 아래는 OLS 모델의 전체 결과 요약 스냅 샷입니다. R 또는 Julia와 같은 기능적 통계 언어만큼 풍부합니다.

방법 : 역행렬 방법을 사용한 분석 솔루션

조건이 좋은 선형 회귀 문제 (적어도 데이터 포인트 수> 특징 수)의 경우 최소 제곱 최소화를 보장하는 계수를 계산하기위한 간단한 폐쇄 형 행렬 솔루션이 존재합니다. 다음과 같이 주어집니다.

이 솔루션에 대한 자세한 파생 및 논의는 여기에서 설명합니다.

여기에는 두 가지 선택이 있습니다.

(a) 단순 곱셈 행렬 역 사용.

(b) 먼저 무어-펜로즈 x- 데이터의 일반화 된 의사 역행렬을 계산 한 다음 y- 데이터로 내적을 취합니다. 이 두 번째 프로세스에는 특이 값 분해 (SVD)가 포함되기 때문에 속도가 느리지 만 조건이 제대로 조정되지 않은 데이터 세트에 대해 잘 작동 할 수 있습니다.

메서드 : sklearn.linear_model.LinearRegression ()

이는 대부분의 기계 학습 엔지니어와 데이터 과학자가 사용하는 전형적인 방법입니다. 물론 실제 문제의 경우에는 거의 사용되지 않으며 Lasso 회귀 또는 Ridge 회귀와 같은 교차 검증되고 정규화 된 알고리즘으로 대체됩니다. 그러나 이러한 고급 기능의 핵심은이 모델에 있습니다.

이러한 방법의 속도 및 시간 복잡성 측정

데이터 과학자로서 데이터 모델링 작업을 수행하려면 항상 정확하면서도 빠른 방법 / 기능을 찾아야합니다. 방법이 본질적으로 느린 경우 대용량 데이터 세트에 대한 실행 병목 현상이 발생합니다.

확장 성을 결정하는 좋은 방법은 데이터 세트 크기를 늘리기 위해 모델을 실행하고 모든 실행에 대한 실행 시간을 추출하고 추세를 그리는 것입니다.

여기에 대한 보일러 플레이트 코드가 있습니다. 그리고 여기에 결과가 있습니다. 단순성으로 인해 stats.linregress 및 단순 행렬 역 메소드가 가장 빠르며 최대 1 천만 데이터 포인트까지 가능합니다.

요약

데이터 과학자는 항상 동일한 분석 또는 모델링 작업을 해결하기위한 여러 옵션을 탐색하고 특정 문제에 가장 적합한 것을 선택해야합니다.

이 기사에서는 단순 선형 회귀를 수행하는 8 가지 방법에 대해 논의했습니다. 대부분은보다 일반화 된 다변량 및 다항 회귀 모델링으로 확장 가능합니다. 모든 방법이 1에 매우 가깝기 때문에 이러한 방법에 대한 R² 적합도를 나열하지 않았습니다.

수백만 개의 인위적으로 생성 된 데이터 포인트가있는 단일 변수 회귀의 경우 회귀 계수가 매우 잘 추정됩니다.

이 기사의 목표는 주로 이러한 방법의 상대적인 속도 / 계산 복잡성을 논의하는 것입니다. 우리는 크기가 증가하는 합성 데이터 세트 (최대 1,000 만 샘플)를 테스트하여 각각의 계산 복잡도 측정을 보여주었습니다. 놀랍게도 간단한 행렬 역 분석 솔루션은 scikit-learn의 널리 사용되는 선형 모델에 비해 매우 빠르게 작동합니다.

공유 할 질문이나 아이디어가 있으면 tirthajyoti [AT] gmail.com 의 작성자에게 문의하시기 바랍니다 . 또한 작성자의 GitHub 리포지토리 에서 Python, R 또는 MATLAB 및 기계 학습 리소스의 다른 재미있는 코드 조각을 확인할 수 있습니다 . 저처럼 기계 학습 / 데이터 과학 / 반도체에 대한 열정이 있다면 LinkedIn에 저를 추가하거나 Twitter에서 저를 팔로우하세요.