기술나눔

로지스틱 회귀(순수 이론)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. 로지스틱 회귀란 무엇입니까?

로지스틱 회귀는 일반적으로 사용되는 통계 학습 방법으로 주로 분류 문제를 해결하는 데 사용됩니다.이름에 '회귀'라는 단어가 있음에도 불구하고 실제로는 분류 알고리즘입니다.

2. 머신러닝에서 로지스틱 회귀를 사용해야 하는 이유는 무엇입니까?

1. 이진 분류

이는 로지스틱 회귀의 가장 기본적이고 일반적인 용도입니다.이벤트가 발생할지 여부와 출력 결과가 '예' 또는 '아니오'인지 예측할 수 있습니다.

예를 들어:

  • 사용자가 광고를 클릭할지 여부 예측
  • 이메일이 스팸인지 확인
  • 환자에게 질병이 있는지 진단

이러한 예제에는 모두 공통된 특징이 있습니다. 즉, true(1)와 false(0)라는 두 가지 결과만 있습니다.

2. 다중 카테고리 분류

로지스틱 회귀는 One-vs-Rest 또는 Softmax와 같은 방법을 통해 다중 범주 분류 문제로 확장될 수 있습니다.

예를 들어:

  • 이미지 인식의 객체 분류
  • 텍스트 분류(뉴스 분류, 감성 분석 등)

이러한 예는 모두 공통된 특징을 가지고 있습니다. 즉, 일반적인 객관식 질문과 유사하게 동일한 개체에 여러 개의 가능한 결과가 있다는 것입니다. 여러 옵션이 있지만 답변에 가장 적합한 옵션은 하나뿐입니다.

3. 확률 예측

로지스틱 회귀는 분류 결과를 제공할 뿐만 아니라 확률 값도 출력하므로 많은 시나리오에서 매우 유용합니다.

예를 들어:

  • 고객이 제품을 구매할 확률 예측
  • 대출 신청자의 채무 불이행 위험 가능성을 평가합니다.

이러한 예제에는 모두 예측이라는 공통된 기능이 있습니다. 즉, 알려진 결과를 사용하여 알려지지 않은 결과를 추론한다는 것입니다.

로지스틱 회귀의 역할을 이해하지 못했다면 이해하기 쉬운 예를 들어보겠습니다.

당신이 의사이고 환자에게 특정 질병이 있는지 확인해야 한다고 상상해 보십시오. 로지스틱 회귀는 이러한 판단을 내리는 데 도움을 주는 지능형 보조자와 같습니다. 의사가 환자의 다양한 신체 검사 지표를 살펴보는 것처럼 로지스틱 회귀 분석에서는 여러 관련 요소(우리는 이를 특징이라고 함)를 고려합니다. 일부 측정항목은 다른 측정항목보다 더 중요할 수 있습니다. 로지스틱 회귀는 중요성을 반영하여 각 요인에 "가중치"를 할당합니다. 마지막으로 단순히 "예" 또는 "아니요"라고 말하는 대신 확률을 제공합니다. 예를 들어, "이 환자가 질병에 걸릴 확률은 70%입니다." 기준을 설정할 수 있습니다. 예를 들어 50%를 초과하면 "예"로 간주되고, 그렇지 않으면 "아니오"로 간주됩니다. 로지스틱 회귀는 알려진 수많은 사례로부터 "학습"합니다. 마치 의사가 수많은 사례를 통해 경험을 쌓는 것과 같습니다.

물론 로지스틱 회귀의 역할은 공간의 제약을 받아 이보다 훨씬 뛰어납니다(사실 그냥 게으르고 싶은데), 너무 많은 소개는 하지 않겠습니다.

3.좋아요, 로지스틱 회귀 공식을 소개하겠습니다

나는 개인적으로 많은 수학 공식을 장황하게 설명하고 그 기본 원리가 이러한 수학 공식임을 알려주고 천천히 스스로 이해하게 하는 것을 좋아하지 않습니다.내가 바라는 것은 몇 가지 핵심 공식을 분석하고 왜 이 몇 가지 공식을 사용해야 하는지를 내 글에서 명확하게 설명할 수 있기를 바랍니다.

1. 선형 회귀 공식

y = b0 + b1엑스1 + 비2x2 + ... + bn*xn

  • 와이는 종속변수, 즉 우리가 예측하려는 값입니다.
  • 비0모든 독립 변수가 0일 때 종속 변수의 값을 나타내는 절편입니다.
  • b1, b2, ..., 비엔는 각 독립변수가 종속변수에 미치는 영향 정도를 나타내는 회귀계수입니다.
  • x1, x2, ..., xn독립변수, 즉 종속변수를 예측하는 데 사용되는 값입니다.

선형 회귀의 예는 다음과 같습니다.

코드를 이해하지 못해도 상관없습니다. 그림을 보시면 됩니다.

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import matplotlib.font_manager as fm
  4. # Generate some simulated house data
  5. np.random.seed(0)
  6. area = np.random.rand(100) * 200 + 50 # House area (square meters)
  7. price = 2 * area + 5000 + np.random.randn(100) * 500 # House price (ten thousand yuan)
  8. # Fit the data using linear regression
  9. from sklearn.linear_model import LinearRegression
  10. model = LinearRegression()
  11. model.fit(area.reshape(-1, 1), price)
  12. # Get the regression coefficients
  13. b0 = model.intercept_
  14. b1 = model.coef_[0]
  15. # Plot the scatter plot
  16. plt.scatter(area, price, label="House Data")
  17. # Plot the regression line
  18. plt.plot(area, b0 + b1*area, color="red", label="Linear Regression")
  19. # Set the plot title and axis labels
  20. plt.title("Linear Regression of House Area and Price")
  21. # Set the font to SimSun (楷体)
  22. font_prop = fm.FontProperties(fname=r"C:WindowsFontssimkai.ttf", size=12) # Replace with your SimSun font path
  23. plt.xlabel("House Area (Square Meters)", fontproperties=font_prop)
  24. plt.ylabel("House Price (Ten Thousand Yuan)", fontproperties=font_prop)
  25. # Add legend
  26. plt.legend()
  27. # Show the plot
  28. plt.show()

1. 100개의 주택 시뮬레이션 데이터 생성

  1. np.random.seed(0)
  2. area = np.random.rand(100) * 200 + 50
  3. price = 2 * area + 5000 + np.random.randn(100) * 500

2. 선형 회귀를 사용하여 데이터 적합

  1. from sklearn.linear_model import LinearRegression
  2. model = LinearRegression()
  3. model.fit(area.reshape(-1, 1), price)

3. 회귀계수(b0~bn) 구하기

  1. b0 = model.intercept_
  2. b1 = model.coef_[0]

4. 산점도 그리기

plt.scatter(area, price, label="House Data")

5. 회귀선을 그립니다.

plt.plot(area, b0 + b1*area, color="red", label="Linear Regression")

6. 기사 제목을 설정하세요

plt.title("Linear Regression of House Area and Price")

7. 글꼴을 이탤릭체로 설정하고 글꼴 크기(있는 경우)

  1. font_prop = fm.FontProperties(fname=r"C:WindowsFontssimkai.ttf", size=12)
  2. plt.xlabel("House Area (Square Meters)", fontproperties=font_prop)
  3. plt.ylabel("House Price (Ten Thousand Yuan)", fontproperties=font_prop)

8. 범례 추가

plt.legend()

9. 차트 표시

plt.show()

이 코드는 선형 회귀를 사용하여 주택 면적과 가격 간의 관계를 맞춥니다. (오류 방지를 위해 가로 및 세로 제목은 영어로 설명되어 있습니다.)

실행 결과는 다음과 같습니다.

어떤 사람들은 이렇게 질문할 수도 있습니다. 왜 우리는 그렇게 많은 양의 데이터를 생산합니까?

좋은 질문이에요~

이 데이터를 사용하여 대략적으로 계산할 수 있습니까? y = b0 + b1엑스1 + 비2x2 + ... + bn*xn 계수는 어떻습니까?

구체적으로:

  • y는 주택 가격과 같이 예측하려는 대상 변수를 나타냅니다.
  • x1, x2, ... xn은 주택 면적, 방 수, 지리적 위치 등 목표 변수에 영향을 미치는 요소를 나타냅니다.
  • b0, b1, b2, ...bn은 우리가 계산하고자 하는 계수인 목표변수에 대한 각 요인의 영향 정도를 나타냅니다.

많은 양의 데이터를 수집함으로써 선형 회귀 모델을 사용하여 이러한 계수를 계산하고 예측 모델을 구축할 수 있습니다.이 모델은 다양한 요인이 목표 변수에 미치는 영향을 이해하고 미래의 목표 변수 값을 예측하는 데 도움이 될 수 있습니다(수학의 y = kx + b와 유사함). 특정 k와 b를 사용하면 x를 얻음으로써 y를 예측할 수 있습니다. , 차이점은 여기에 더 많은 계수 k가 있다는 것입니다)

2.시그모이드 함수 공식

x의 값은 σ(x) = 1 / (1 + exp(-x))입니다.

sig 함수의 이미지는 다음과 같습니다.

질문 1: 시그모이드 함수를 선택하는 이유는 무엇입니까?

앞서 언급했듯이 로지스틱 회귀의 가장 기본적인 용도는 이진 분류 문제를 해결하는 것입니다.

로지스틱 회귀의 목표는 선형 모델의 출력(실수일 수 있음)을 사건 발생 가능성을 나타내는 확률 값으로 변환하는 것이며, 확률 값의 범위는 당연히 0에서 1 사이여야 합니다.

시그모이드 함수는 이 작업을 완벽하게 수행합니다. 선형 모델의 출력을 0과 1 사이로 압축하고 입력 값이 증가함에 따라 출력 값도 점차 증가하며 이는 확률 값의 변화 추세와 일치합니다.

sig의 함수를 보세요. 양의 무한대에 접근하면 1에 무한히 접근하고, 음의 무한대에 접근하면 0이나 1이라는 문제에 딱 들어맞지 않나요?

질문 2: 시그모이드 함수를 분류하는 방법은 무엇입니까?

그러면 누가 또 말하고 싶어하는데, 그러면 양쪽이 한없이 가까울 수 있다고 하는데, 예를 들어 0.5는 0과 1 사이인데 0.5는 0에 가깝다고 하더군요. 아니면 1에 가까워지고 있나요?

가운데 숫자는 가까울 수 없다고 하지만 인위적으로 설정할 수도 있어요~

예를 들어 0.5보다 큰 숫자를 1 범주에 넣고 0.5보다 작은 숫자를 0 범주에 넣으면 문제가 해결됩니다~

따라서 0.5는 임계점이 아니라 분류를 위해 인위적으로 설정한 임계값입니다.

3. 로지스틱 회귀식

p = σ(b0 + b1*x1 + b2*x2 + ... + bn*xn) = 1 / (1 + exp(-(b0 + b1*x1 + b2*x2 + ... + bn*xn)))

우리는 이 공식을 소개하기 전에 너무 많은 말을 했습니다.

보기만 해도 머리가 아프지 않나요? 보기만해도 머리아픈데 단순화시켜보면 어떨까요~

그러고 보니 이렇게 보니 훨씬 상큼한 느낌이 들더군요. 마치 치장하기 싫은 잘생긴 남자가 좀 정리를 했더니 와, 이 남자 너무 잘생겼네요~

에헴, 빗나갔어~그래서로지스틱 회귀는 실제로 선형 회귀 + 시그모이드 함수입니다.

시그모이드 함수의 z는 선형 회귀를 사용합니다. y = b0 + b1엑스1 + 비2x2 + ... + bn*xn 교체

그러면 이것이 무엇을 하는가?

알았어 한번 살펴보자~

4. 로지스틱 회귀분석의 본질과 기능

로지스틱 회귀의 핵심은어떤 사건이 일어날 확률을 예측하라 .데이터를 직접 분류하는 것이 아니라, 선형회귀 결과를 함수(시그모이드 함수)를 통해 0~1 구간에 매핑하는 것이 이 구간의 값이 이벤트 발생 가능성을 나타냅니다.

로지스틱 회귀의 기본은 선형 회귀입니다. 선형 회귀는 선형 모델을 구축하고 선형 함수로 데이터를 피팅하여 예측 값을 얻으려고 시도합니다.이 예측값은 임의의 값이 될 수 있으며 간격 0~1의 제한을 받지 않습니다.

시그모이드 함수는 선형회귀를 통해 얻은 예측값을 0~1 구간으로 변환하는 '마법의' 함수로, 이 구간의 값은 사건이 발생할 확률로 해석할 수 있다.

이진 분류를 수행하려면 일반적으로 임계값을 0.5로 설정해야 합니다.예측 확률이 임계값보다 크면 포지티브 클래스로 결정되고, 그렇지 않으면 네거티브 클래스로 결정됩니다.

예를 들어:

왼쪽의 함수는 선형 회귀 함수로 볼 수 있으며 오른쪽의 함수는 매핑된 시그모이드 함수입니다.

이 글의 모든 사진 출처는[머신러닝] 로지스틱 회귀를 10분만에 학습 가능, 이해하기 쉬움(스파크 솔루션 과정 포함)_bilibili_bilibili