Python의 선형 회귀 소개
선형 회귀 모델은 일련의 업계에서 많은 실제 응용이 있는데 예를 들어 경제학(예를 들어 성장 예측), 상업(예를 들어 제품 판매 예측, 직원 실적 예측), 사회과학(예를 들어 성별이나 인종의 정치 경향 예측), 의료 보건(예를 들어 체중의 혈압 수준 예측, 생물 요인으로 인한 질병) 등이다.
선형 회귀 모델을 어떻게 실현하는지 이해하면 데이터 속의 이야기를 발굴하여 중요한 문제를 해결할 수 있다.우리는 파이썬을 사용할 것이다. 왜냐하면 파이썬은 데이터를 처리하고 처리하며 모델링하는 강력한 도구이기 때문이다.그것은 선형 회귀 모델링에 사용되는 일련의 소프트웨어 패키지를 가지고 있다.
기본 사상은 만약에 우리가 선형 회귀 모델과 관찰한 데이터를 의합할 수 있다면 이 모델을 이용하여 어떠한 미래의 값도 예측할 수 있다는 것이다.예를 들어 우리가 역사 데이터에서 집의 가격(P)과 집의 크기가 선형적인 관계를 발견했다고 가정하면 — 사실 우리는 집 한 채의 가격이 그 면적의 90배라는 것을 발견했다.등식은 다음과 같습니다.
P=90*S
이 모델이 있으면 우리는 어떤 집의 원가를 예측할 수 있다.만약 우리가 1500평방피트의 집을 가지고 있다면, 우리는 그 가격을 계산할 수 있다.
P=90*1500=135000달러
이 박문에서 우리는 다음과 같이 소개한다.
statsmodels
선형 회귀 실현scikit-learn
선형 회귀 실현이 간단한 강좌는 브라우저 내의 샌드박스 환경, 완성할 작업과 공공 데이터 집합을 사용하는 항목을 포함하여 다음 XYZ 선형 회귀와 Python 강좌를 개편합니다.
기본 개념과 수학
선형 회귀 모델에는 다음과 같은 두 가지 변수가 있습니다.
선형 회귀 추정 Y를 사용하기 위해 다음과 같은 등식을 가정합니다.
Yₑ = α + β X
Y 어디 있어?ₑ 우리의 선형 방정식을 바탕으로 하는 Y의 추정치나 예측치입니다.
우리의 목표는 매개 변수 α와 베타의 통계적 현저한 값을 찾아 Y와 Y 사이의 차이를 최소화하는 것이다ₑ.
만약 우리가 이 두 파라미터의 최적 값을 확정할 수 있다면, 우리는 Y의 값을 예측하고 X의 값을 정할 수 있는 최적 의합선이 있을 것이다.
그렇다면 우리는 알파와 베타를 어떻게 추정합니까?우리는 ordinary least squares라는 방법을 사용할 수 있다.
일반 최소 2승법
녹색선은 실제 값 Y와 추정 값 Y 사이의 차이를 나타낸다ₑ
최소 2승법의 목표는 Y와 Y 사이의 제곱차를 최소화하는 알파와 베타 값을 찾는 것이다ₑ. 우리는 여기서 추측을 하지 않지만, 미적분을 사용하면 알 수 없는 매개 변수의 값이 다음과 같다는 것을 증명할 수 있다.
그 중에서 X ̄는 X 값의 평균값이고, Ȳ는 Y 값의 평균값이다.
만약 네가 통계학에 익숙하다면, 너는 베타가 매우 간단하다고 생각할 것이다
Cov(X,Y)/Var(X).
처음부터 선형 회귀
이 문서에서는 두 개의 Python 모듈을 사용합니다.
statsmodels
— a module는 다양한 통계 모델을 평가하고 통계 테스트와 통계 데이터 탐색을 하는 데 사용되는 클래스와 함수를 제공한다.scikit-learn
— a module, 데이터 발굴과 데이터 분석에 간단하고 효율적인 도구를 제공했다.우선, 예측치(Y)가 어떻게 변화하는지 시뮬레이션해 봅시다.ₑ) 실제 값(Y)과는 다릅니다.
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
# Generate 'random' data
np.random.seed(0)
X = 2.5 * np.random.randn(100) + 1.5 # Array of 100 values with mean = 1.5, stddev = 2.5
res = 0.5 * np.random.randn(100) # Generate 100 residual terms
y = 2 + 0.3 * X + res # Actual values of Y
# Create pandas dataframe to store our X and y values
df = pd.DataFrame(
{'X': X,
'y': y}
)
# Show the first five rows of our dataframe
df.head()
위의 코드(예: Jupyter 노트북)를 실행하면 다음과 같이 출력됩니다.OLS 방법으로 y를 추정하기 위해서는
xmean
과ymean
, X와 y의 협방차(xycov
, 그리고 X의 방차(xvar
를 계산한 후에야 alpha
와beta
의 값을 확정할 수 있다.# Calculate the mean of X and y
xmean = np.mean(X)
ymean = np.mean(y)
# Calculate the terms needed for the numator and denominator of beta
df['xycov'] = (df['X'] - xmean) * (df['y'] - ymean)
df['xvar'] = (df['X'] - xmean)**2
# Calculate beta and alpha
beta = df['xycov'].sum() / df['xvar'].sum()
alpha = ymean - (beta * xmean)
print(f'alpha = {alpha}')
print(f'beta = {beta}')
Out:
alpha = 2.0031670124623426
beta = 0.32293968670927636
다행이다. 우리는 지금 alpha
과beta
의 추측이 있다!우리 모형은 Y로 쓸 수 있어요.ₑ = 2.003+0.323 X 예측:ypred = alpha + beta * X
Out:
array([3.91178282, 2.81064315, 3.27775989, 4.29675991, 3.99534802,
1.69857201, 3.25462968, 2.36537842, 2.40424288, 2.81907292,
...
2.16207195, 3.47451661, 2.65572718, 3.2760653 , 2.77528867,
3.05802784, 2.49605373, 3.92939769, 2.59003892, 2.81212234])
예측ypred
과 실제 값y
의 대비도를 그려서 우리의 모델을 더욱 직관적으로 이해할 수 있도록 하겠습니다.# Plot regression against actual data
plt.figure(figsize=(12, 6))
plt.plot(X, ypred) # regression line
plt.plot(X, y, 'ro') # scatter plot showing actual data
plt.title('Actual vs Predicted')
plt.xlabel('X')
plt.ylabel('y')
plt.show()
블루라인은 우리에게 가장 적합한 노선, Yₑ = 2.003+0.323 X. 우리는 이 그림에서 X와 y 사이에 정선적인 관계가 있음을 알 수 있다. 우리의 모델을 사용하면 X의 어떤 값에서도 y를 예측할 수 있다.
예를 들어, X=10 값이 있으면 다음과 같이 예측할 수 있습니다.
Yₑ = 2.003 + 0.323 (10) = 5.233.
statsmodels 선형 회귀
선형 회귀 모델을 어떻게 실현하는지 처음부터 배웠으니
ols
라이브러리에서 statsmodels
방법을 어떻게 사용하는지 토론할 것이다.이러한 방법을 보여주기 위해 우리는 매우 유행하는
advertising
데이터 집합을 사용할 것이다. 이 데이터 집합은 서로 다른 미디어 광고가 발생하는 각종 원가와 특정 제품의 판매와 관련된다.이 데이터 세트here를 다운로드할 수 있습니다.이 예에서 우리는 변수만 본다
TV
— 우리는 텔레비전 광고 지출이 제품의 매출액을 예측할 수 있는지를 탐구할 것이다.우선, 우리는 pandas
을 사용하여 이 csv 파일을 read_csv()
데이터 프레임으로 가져옵니다.# Import and display first five rows of advertising dataset
advert = pd.read_csv('advertising.csv')
advert.head()
우선, 우리는
statsmodels
'ols
함수를 사용하여 우리의 간단한 선형 회귀 모델을 초기화한다.이것은 공식y ~ X
을 채택하는데 그 중에서 X
은 예측 변수(TV
광고 원가), y
는 수출 변수(Sales
이다.그리고 우리는 OLS 대상의 fit()
방법을 호출하여 모델을 작성한다.import statsmodels.formula.api as smf
# Initialise and fit linear regression model using `statsmodels`
model = smf.ols('Sales ~ TV', data=advert)
model = model.fit()
우리는 더 이상 스스로 계산할 필요가 없다alpha
와beta
. 왜냐하면 이런 방법은 자동으로 우리를 위해 계산하기 때문이다.호출 model.params
은 모델 매개변수를 표시합니다.Out:
Intercept 7.032594
TV 0.047537
dtype: float64
우리가 사용하는 기호 중에서 α는 절단거리이고 베타는 사율이다. 즉, α=7.032, 베타=0.047이다.따라서 이 모델의 방정식은 매출액=7.032+0.047*TV
쉽게 말하면 평균적으로 우리가 텔레비전 광고에 100달러를 쓰면 11.73대가 팔릴 것으로 예상된다.
현재 우리는 간단한 회귀 모델을 입안하여 방금 사용
.predict
방법에 따라 유도한 방정식에 따라 매출액을 예측할 수 있다.또한 회귀 모델을 시각화하여 최적의 의합선을 찾을 수 있도록
sales_pred
및 TV 광고 비용과의 관계를 그릴 수 있습니다.# Predict values
sales_pred = model.predict()
# Plot regression against actual data
plt.figure(figsize=(12, 6))
plt.plot(advert['TV'], advert['Sales'], 'o') # scatter plot showing actual data
plt.plot(advert['TV'], sales_pred, 'r', linewidth=2) # regression line
plt.xlabel('TV Advertising Costs')
plt.ylabel('Sales')
plt.title('TV vs Sales')
plt.show()
우리는 텔레비전 광고 원가와 매출액 사이에 정선적인 관계가 존재한다는 것을 볼 수 있다 — 다시 말하면 텔레비전 광고에 더 많은 돈을 쓰는 것은 더 높은 매출을 예시하고 있다!
이 모델이 있으면 우리는 텔레비전 광고에 쓰이는 어떤 금액에서도 매출액을 예측할 수 있다.예를 들어, 만약 우리가 텔레비전 광고 원가를 400달러로 증가한다면, 우리는 매출액이 26대까지 증가할 것이라고 예측할 수 있다.
new_X = 400
model.predict({"TV": new_X})
Out:
0 26.04725
dtype: float64
scikit로 학습하는 선형 회귀
우리는 이미 사용
statsmodels
을 통해 선형 회귀 모델을 실현하는 것을 배웠다...이제 사용scikit-learn
을 배우자!이 모델에 대해 우리는
advertising
데이터 집합을 계속 사용할 것이지만, 이번에는 두 가지 예측 변수를 사용하여 다원적 선형 회귀 모델을 만들 것이다.이것은 단지 여러 개의 예측 인자를 가진 선형 회귀 모델일 뿐, 모델링 방법은 다음과 같다.Yₑ = α + β₁10.₁ + β₂10.₂ + … + 베타pXp, 그중 p는 예측치의 수량이다.
우리의 예에서 우리는 변수
Sales
와 TV
를 사용하여 예측Radio
을 할 것이다. 즉, 우리의 모델은 다음과 같이 쓸 수 있다.매출 = α+β₁*텔레비전+베타₂*라디오 방송
우선, 우리는 선형 회귀 모델을 초기화한 다음에 모델을 예측치와 출력 변수와 일치시킨다.
from sklearn.linear_model import LinearRegression
# Build linear regression model using TV and Radio as predictors
# Split data into predictors X and output Y
predictors = ['TV', 'Radio']
X = advert[predictors]
y = advert['Sales']
# Initialise and fit model
lm = LinearRegression()
model = lm.fit(X, y)
마찬가지로 우리는 alpha
과betas
의 값을 계산할 필요가 없다. 우리는 .intercept_
과alpha
를 호출하여 계수.coef_
와beta1
의 수조를 계산할 뿐이다.print(f'alpha = {model.intercept_}')
print(f'betas = {model.coef_}')
Out:
alpha = 2.921099912405138
betas = [0.04575482 0.18799423]
따라서 우리의 모형은 다음과 같이 쓸 수 있다.판매액=2.921+0.046* 텔레비전+0.1880* 라디오.
우리는 간단하게
beta2
예측치를 사용할 수 있다.model.predict(X)
Out:
array([20.555464, 12.345362, 12.337017, 17.617115, 13.223908,
12.512084, 11.718212, 12.105515, 3.709379, 12.551696,
...
12.454977, 8.405926, 4.478859, 18.448760, 16.4631902,
5.364512, 8.152375, 12.768048, 23.792922, 15.15754285])
현재 우리는 이미 다원적 선형 회귀 모델을 데이터에 합성하여 텔레비전과 방송 광고 원가의 어떤 조합에서도 매출액을 예측할 수 있다!예를 들어 만약에 우리가 텔레비전 광고에 300달러를 투자하고 방송 광고에 200달러를 투자한다면 우리는 얼마나 많은 매출을 실현할 것인가를 알고 싶다면... 우리가 해야 할 일은 삽입 가치이다!new_X = [[300, 200]]
print(model.predict(new_X))
Out:
[54.24638977]
텔레비전 광고에 300달러, 방송 광고에 200달러를 쓰면 평균 54세트가 팔릴 것으로 예상된다는 뜻이다.나는 네가 이 선형 회귀 기초 지식에 관한 간단한 강좌를 좋아하길 바란다.
우리는 어떻게 처음부터 선형 회귀를 실현하는지, 그리고 파이썬에서 어떻게 사용하는지
.predict()
와 statsmodels
를 소개했다.실천에서 당신은 어떻게 당신의 모델을 검증하고 효능을 측정하는지, 어떻게 당신의 모델에 중요한 변수를 선택하는지, 분류 변수를 어떻게 처리하는지, 그리고 비선형 변환을 언제 어떻게 실행하는지 알아야 합니다.우리는 이 모든 주제를 포괄하는 완전한 과정이 있다(그리고 더 많다!)Python 선형 회귀에 대한 자세한 내용은 다음 XYZ를 참조하십시오.
Reference
이 문제에 관하여(Python의 선형 회귀 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nexttech/introduction-to-linear-regression-in-python-2g5b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)