Python의 선형 회귀 소개

선형 회귀는 기본적인 예측 분석 기술로 역사 데이터로 출력 변수를 예측한다.그것은 이해하기 쉽고 통속적이고 알기 쉬운 영어로 해석할 수 있기 때문에 예측 모델링에서 인기가 있다.
선형 회귀 모델은 일련의 업계에서 많은 실제 응용이 있는데 예를 들어 경제학(예를 들어 성장 예측), 상업(예를 들어 제품 판매 예측, 직원 실적 예측), 사회과학(예를 들어 성별이나 인종의 정치 경향 예측), 의료 보건(예를 들어 체중의 혈압 수준 예측, 생물 요인으로 인한 질병) 등이다.
선형 회귀 모델을 어떻게 실현하는지 이해하면 데이터 속의 이야기를 발굴하여 중요한 문제를 해결할 수 있다.우리는 파이썬을 사용할 것이다. 왜냐하면 파이썬은 데이터를 처리하고 처리하며 모델링하는 강력한 도구이기 때문이다.그것은 선형 회귀 모델링에 사용되는 일련의 소프트웨어 패키지를 가지고 있다.
기본 사상은 만약에 우리가 선형 회귀 모델과 관찰한 데이터를 의합할 수 있다면 이 모델을 이용하여 어떠한 미래의 값도 예측할 수 있다는 것이다.예를 들어 우리가 역사 데이터에서 집의 가격(P)과 집의 크기가 선형적인 관계를 발견했다고 가정하면 — 사실 우리는 집 한 채의 가격이 그 면적의 90배라는 것을 발견했다.등식은 다음과 같습니다.
P=90*S
이 모델이 있으면 우리는 어떤 집의 원가를 예측할 수 있다.만약 우리가 1500평방피트의 집을 가지고 있다면, 우리는 그 가격을 계산할 수 있다.
P=90*1500=135000달러
이 박문에서 우리는 다음과 같이 소개한다.
  • 모델 뒤의 기본 개념과 수학
  • 아날로그 데이터를 어떻게 사용하여 처음부터 선형 회귀를 실현하는가
  • 어떻게 사용statsmodels 선형 회귀 실현
  • 어떻게 사용scikit-learn 선형 회귀 실현
  • 이 간단한 강좌는 브라우저 내의 샌드박스 환경, 완성할 작업과 공공 데이터 집합을 사용하는 항목을 포함하여 다음 XYZ 선형 회귀와 Python 강좌를 개편합니다.


    기본 개념과 수학


    선형 회귀 모델에는 다음과 같은 두 가지 변수가 있습니다.
  • 입력 또는 예측 변수는 출력 변수 값을 예측하는 데 도움을 주는 변수입니다.일반적으로 X라고 합니다.
  • 출력 변수는 우리가 예측하고 싶은 변수이다.일반적으로 Y.
  • 라고 합니다.
    선형 회귀 추정 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를 추정하기 위해서는 xmeanymean, X와 y의 협방차(xycov, 그리고 X의 방차(xvar를 계산한 후에야 alphabeta의 값을 확정할 수 있다.
    # 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
    
    다행이다. 우리는 지금 alphabeta의 추측이 있다!우리 모형은 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()
    
    우리는 더 이상 스스로 계산할 필요가 없다alphabeta. 왜냐하면 이런 방법은 자동으로 우리를 위해 계산하기 때문이다.호출 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는 예측치의 수량이다.
    우리의 예에서 우리는 변수SalesTV를 사용하여 예측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)
    
    마찬가지로 우리는 alphabetas의 값을 계산할 필요가 없다. 우리는 .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를 참조하십시오.

    좋은 웹페이지 즐겨찾기