>  기사  >  백엔드 개발  >  Python은 LR 클래식 알고리즘을 구현합니다.

Python은 LR 클래식 알고리즘을 구현합니다.

零到壹度
零到壹度원래의
2018-04-19 16:55:445648검색

이 문서의 예에서는 Python에서 LR 클래식 알고리즘을 구현하는 방법을 설명합니다. 참고를 위해 모든 사람과 공유합니다. 세부 사항은 다음과 같습니다.

(1) 로지스틱 회귀(LR) 분류기 이해

먼저 로지스틱 회귀에는 이름에 "회귀"가 포함되어 있지만 , 실제로는 분류 방법으로 주로 2분류 문제에 사용되며 Logistic 함수(또는 Sigmoid 함수)를 사용하며 독립변수의 값 범위는 (-INF, INF), 독립변수의 값 범위는 ( 0,1), 함수 형태는


시그모이드 함수의 정의역은 (-INF, +INF)이므로 값의 범위는 (0, 1) ). 따라서 가장 기본적인 LR 분류기는 두 가지 범주(클래스 0, 클래스 1) 대상을 분류하는 데 적합합니다. 시그모이드 함수는 아래 그림과 같이 매우 아름다운 "S" 모양입니다.


LR 분류기(로지스틱 회귀 분류기)의 목적은 0/1 분류를 ​​학습하는 것입니다. 학습 데이터 특징의 모델-- 이 모델은 샘플 특징의 선형 조합을 독립 변수로 사용하고 로지스틱 함수를 사용하여 독립 변수를 (0,1)에 매핑합니다. 따라서 LR 분류기의 해결책은 일련의 가중치를 해결하는 것입니다 (는 명목 변수--상수인 더미입니다. 실제 엔지니어링에서는 x0=1.0이 자주 사용됩니다. 상수 항이 의미가 있는지 여부에 관계없이 아니면 유지하는 것이 가장 좋습니다) 로지스틱 함수에 대체하고 예측 함수를 구성합니다:

함수의 값은 결과가 1일 확률을 나타냅니다. 특성은 y=1에 속합니다. 따라서 입력에 대해 z 값을 찾습니다.

(x1,x2,...,xn은 특정 샘플 데이터의 특성이고 차원은 n입니다.)
그런 다음

---이면 찾습니다. 0.5보다 크면 y= 클래스 1이고, 그렇지 않으면 클래스 y=0에 속합니다. (참고: 통계 샘플이 균일하게 분포되어 있다고 가정하므로 임계값은 0.5로 설정됩니다.) LR 분류기에 대해 이 가중치 세트를 얻는 방법은 무엇입니까? 이를 위해서는 최대 우도 추정 MLE 및 최적화 알고리즘의 개념이 필요합니다. 수학에서 가장 일반적으로 사용되는 최적화 알고리즘은 경사 상승(하강) 알고리즘입니다.

로지스틱 회귀는 다중 클래스 분류에도 사용할 수 있지만 이진 분류가 더 일반적으로 사용되며 설명하기 쉽습니다. 따라서 실제로 가장 일반적으로 사용되는 방법은 이진 로지스틱 회귀입니다. LR 분류기는 숫자 및 명목 데이터와 같은 데이터 유형에 적합합니다. 장점은 계산 비용이 높지 않고 이해 및 구현이 쉽다는 점이며, 단점은 과소적합이 쉽고 분류 정확도가 높지 않을 수 있다는 점입니다.

(2) 로지스틱 회귀의 수학적 유도

1. 로지스틱 회귀를 해결하기 위한 경사하강법

우선, 다음과 같은 수학적 유도 과정을 이해하려면 더 많은 파생 해법 공식이 필요합니다. "자주 사용하는 기본 기초함수의 미분식과 적분식"을 참고하시기 바랍니다.

n개의 관찰 샘플이 있고 관찰 값은 다음과 같다고 가정합니다. 주어진 조건에서 yi=1을 얻을 확률을 라 하자. 동일한 조건에서 yi=0이 될 조건부 확률은 입니다. 따라서 관측값을 얻을 확률은

------이 공식은 실제로

을 얻는 포괄적인 공식 (1)입니다. 각 관측값은 독립적이므로 결합 분포는 다음과 같이 표현할 수 있습니다. 한계 분포의 곱:

(m은 통계 표본 수를 나타냄)                                                                                >                                  계산됩니다. 우리의 목표는 이 우도 함수의 값을 최대화하는 매개변수 추정치를 찾는 것입니다. 따라서 최대 우도 추정의 핵심은 위의 방정식이 최대값을 얻을 수 있도록 매개변수 를 찾는 것입니다.

위 함수의 로그를 구합니다.


최대 가능성 추정은 위 방정식이 최대값을 취할 때 θ를 찾는 것입니다. 여기서는 경사 상승 방법을 사용할 수 있습니다. 이를 해결하려면 θ가 필수 최적 매개변수입니다. Andrew Ng의 과정에서 J(θ)는 다음 공식으로 취해진다. 즉, J(θ)=-(1/m)l(θ)이며, J(θ)가 최소값일 때 θ는 필수 최적값이다. 매개변수. 경사하강법으로 최소값을 구합니다. θ의 초기 값은 모두 1.0이 될 수 있으며 업데이트 프로세스는 다음과 같습니다.

(j는 샘플의 j번째 속성, 총 n을 나타냅니다. a는 단계 크기, 즉 각 동작의 크기를 나타냅니다. 자유롭게 지정할 수 있음)


따라서 θ(모든 초기값은 1.0으로 설정 가능)의 업데이트 프로세스는 다음과 같이 작성할 수 있습니다.

(i는 i번째 통계 표본을 나타내고 j는 표본의 j번째 속성을 나타내며 a는 단계 크기를 나타냄)

이 공식은 수렴에 도달할 때까지 반복적으로 실행됩니다( 각 단계에서 반복하는 동안 특정 단계의 감소된 값이 매우 작은 값(0.001 미만)보다 작으면 수렴한다고 판단됩니다.) 또는 특정 중지 조건(예: 숫자 반복 횟수가 특정 지정된 값에 도달하거나 알고리즘이 특정 허용 오류 범위에 도달함)

2, 벡터화 솔루션

벡터화는 for 루프 대신 행렬 계산을 사용하여 계산 프로세스를 단순화하고 효율성을 향상시킵니다. 위 수식에서 볼 수 있듯이 Σ(...)는 합산 프로세스이므로 for 문이 m번 반복되어야 하므로 벡터화가 전혀 구현되지 않습니다. 벡터화 과정은 다음과 같습니다.

훈련 데이터의 행렬 형태는 다음과 같습니다. g(A)의 매개변수 A는 열 벡터이므로 g 함수를 구현할 때 의 경우 열 벡터를 매개변수로 지원하고 열 벡터를 반환해야 합니다. 위의 공식을 통해 g(A)-y로부터 hθ(x)-y를 한 단계로 계산할 수 있음을 알 수 있습니다.

θ 업데이트 프로세스는 다음과 같이 변경될 수 있습니다:

요약하자면, 벡터화 후 θ 업데이트 단계는 다음과 같습니다:
찾기 A=X *θ(여기서는 행렬 곱셈, ) 찾기 E=g(A)-y (E, y는 (m,1) 차원 열 벡터입니다)


(3) 찾기

(a는 단계 크기를 나타냄) )

3, step 긴 a

a의 선택도 경사 하강법의 수렴을 보장하는 핵심 포인트입니다. 값이 너무 작으면 수렴이 느려지고, 값이 너무 크면 반복 과정의 수렴(최소값 통과)이 보장되지 않습니다. 경사하강법 알고리즘이 올바르게 작동하려면 각 반복에서 J(θ)가 감소하는지 확인해야 합니다. 스텝 크기 a의 값이 정확하다면 J(θ)는 점점 작아져야 합니다. 따라서 a의 값을 판단하는 기준은 J(θ)가 작아지면 그 값이 맞다는 것을 의미하고, 그렇지 않으면 a의 값을 줄여야 한다는 것이다.

단계 크기 a를 선택하는 경험은 다음과 같습니다. 매번 이전 숫자의 약 3배인 값을 선택합니다. 반복이 정상적으로 진행될 수 없는 경우(J가 증가하면 단계 크기가 너무 커서 그릇 바닥을 넘습니다.) ), 더 작은 단계 크기를 사용하는 것이 좋습니다. 수렴이 느리면 단계 크기를 늘리는 것이 좋습니다. 값의 예는

…, 0.001, 0.003, 0.1, 0.3, 1…입니다.

4, 고유값 정규화

로지스틱 회귀도 회귀 알고리즘입니다. 경사법을 사용하여 다차원 특성 훈련 데이터를 회귀하는 경우 해당 고유값은 값 범위를 보장하도록 조정되어야 합니다. 특성 계산 프로세스는 동일한 척도 내에서만 수렴됩니다(특성 값의 값 범위가 매우 다를 수 있기 때문입니다. 예를 들어 특성 1의 값은 (1000-2000)이고 특성 2의 값은 (0.1-0.2)). 특성 스케일링 방법은 사용자 정의할 수 있습니다. 일반적으로 사용되는 방법은 다음과 같습니다.

1) 평균 정규화(또는 표준화)

(X - 평균(X))/std(X), std(X)는 표본의 기준 차이

2) rescaling

(X - min) / (max - min)

5, 알고리즘 최적화--확률적 경사법

경사 상승(하강) ) 알고리즘 각각의 회귀 계수를 업데이트하려면 전체 데이터 세트를 순회해야 합니다. 이 방법은 약 100개의 데이터 세트를 처리할 때 허용되지만 수십억 개의 샘플과 수만 개의 특징이 있는 경우 이 방법의 계산 복잡성이 너무 높습니다. 높은. . 향상된 방법은 한 번에 하나의 샘플 포인트로만 회귀 계수를 업데이트하는 것인데, 이를 확률적 경사 알고리즘이라고 합니다. 분류기는 새로운 샘플이 도착할 때 점진적으로 업데이트될 수 있으므로 일괄 처리를 위해 전체 데이터 세트를 다시 읽을 필요 없이 새 데이터가 도착할 때 매개변수 업데이트를 완료할 수 있습니다. 따라서 확률적 경사 알고리즘은 온라인 학습 알고리즘입니다. ('온라인 학습'에 해당하며 모든 데이터를 한 번에 처리하는 것을 '일괄 처리'라고 합니다). 확률적 경사 알고리즘은 경사 알고리즘과 동일하지만 계산상 더 효율적입니다.

(3) Python에서 로지스틱 회귀 알고리즘 구현

이전 섹션에서는 Andrew Ng의 J(θ)=-(1/m)l(θ)를 풀기 위해 경사하강법을 사용하는 로지스틱 회귀를 설명했습니다. 물론 이 절에서 Python의 해결 프로세스는 J(θ)를 해결하기 위해 여전히 Gradient Ascent 방법 또는 Stochastic Gradient Ascent 방법을 직접 사용합니다. LRTrain 객체도 문제를 해결하기 위해 Gradient Ascent 방법 또는 Stochastic Gradient Ascent 방법을 구현합니다.

LR 분류기 학습 패키지에는 lr.py/object_json.py/test.py의 세 가지 모듈이 포함되어 있습니다. lr 모듈은 logisticRegres 객체를 통해 LR 분류자를 구현하며 gradAscent('Grad') 및 randomGradAscent('randomGrad')라는 두 가지 솔루션 메서드를 지원합니다(둘 중 하나를 선택하면 classifierArray는 하나의 분류 솔루션 결과만 저장합니다. 물론 다음도 수행할 수 있습니다). 두 개의 classifierArray를 정의하면 두 솔루션 메서드를 모두 지원합니다.

테스트 모듈은 LR 분류기를 사용하여 탈장 증상을 기반으로 아픈 말의 사망률을 예측하는 애플리케이션입니다. 이 데이터에는 문제가 있습니다. 데이터의 손실률은 30%인데, 0은 LR 분류기의 가중치 업데이트에 영향을 주지 않기 때문에 특수 값 0으로 대체됩니다.

훈련 데이터에서 샘플 특성 값이 부분적으로 누락되는 것은 매우 까다로운 문제입니다. 데이터를 직접 버리는 것이 안타깝고 재획득 비용도 많이 들기 때문에 이 문제를 해결하기 위해 많은 문헌이 노력하고 있습니다. 값비싼. 누락된 데이터를 처리하는 몇 가지 선택적 방법은 다음과 같습니다.

□ 사용 가능한 특성의 평균을 사용하여 누락된 값을 채웁니다.

□ -1과 같은 특수 값을 사용하여 누락된 값을 수정합니다.

□ 누락된 값이 있는 샘플을 무시합니다.

□ 유사한 샘플의 평균을 사용하여 누락된 값을 채웁니다.

□ 다른 기계 학습 알고리즘을 사용하여 누락된 값을 예측합니다.

LR 분류기 알고리즘 학습 패키지 다운로드 주소는

machine learning Logistic regression

(4) 로지스틱 회귀 애플리케이션

로지스틱 회귀의 주요 용도:

찾고 있어요 위험 요인: 특정 질병 등에 대한 위험 요인 찾기

예측: 모델에 따라 다양한 독립 변수 하에서 특정 질병이나 상황의 확률을 예측합니다.

차별: 실제입니다. 사람이 특정 질병이나 특정 상태에 속할 확률, 즉 해당 사람이 특정 질병에 속할 확률을 확인하는 것도 모델을 기반으로 하는 것과 다소 유사합니다.

로지스틱 회귀는 주로 역학에서 사용되며, 더 일반적인 상황은 특정 질병의 위험 요소를 탐색하고, 위험 요소를 기반으로 특정 질병의 확률을 예측하는 것입니다. 예를 들어 위암의 위험인자를 탐색하려면 두 그룹의 사람을 선택할 수 있는데, 하나는 위암 그룹이고 다른 하나는 비위암 그룹입니다. 두 그룹은 신체적 특성이 달라야 합니다. 표지판과 라이프 스타일. 여기서 종속변수는 위암 여부, 즉 '예' 또는 '아니요'입니다. 독립변수에는 연령, 성별, 식습관, 헬리코박터 파일로리균 감염 등 여러 가지가 포함될 수 있습니다. 독립변수는 연속형이거나 범주형일 수 있습니다.


관련 권장 사항:

로지스틱 회귀 사다리 하강 계산 최대값

LR -깊이 있는 이해

자주 사용되는 알고리즘 기계 학습용(LDA, CNN, LR) 원리 개요

LR Derivation

위 내용은 Python은 LR 클래식 알고리즘을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.