Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python을 사용한 선형 회귀?

<시간/>

선형 회귀는 두 변수 사이에 양의 관계가 있는지 또는 음의 관계가 있는지 나타내는 기계 학습의 가장 간단한 표준 도구 중 하나입니다.

선형 회귀는 빠른 예측 분석을 위한 몇 안 되는 좋은 도구 중 하나입니다. 이 섹션에서는 python pandas 패키지를 사용하여 데이터를 로드한 다음 선형 회귀 모델을 추정, 해석 및 시각화할 것입니다.

더 아래로 내려가기 전에 먼저 회귀가 무엇인지 논의해 볼까요?

회귀란 무엇입니까?

회귀는 종속 변수와 독립 변수 간의 관계를 생성하는 데 도움이 되는 예측 모델링 기법의 한 형태입니다.

회귀 유형

  • 선형 회귀
  • 로지스틱 회귀
  • 다항식 회귀
  • 단계적 회귀

선형 회귀는 어디에 사용됩니까?

  • 추세 및 판매 추정치 평가
  • 가격 변동의 영향 분석
  • 위험 평가

선형 회귀 모델을 구축하는 단계

  • 먼저 설정을 빌드하고 데이터 세트와 jupyter를 다운로드할 것입니다.

  • 필요한 패키지와 데이터세트를 가져옵니다.

  • 데이터세트가 로드되면 데이터세트를 탐색하겠습니다.

  • 데이터 세트로 선형 회귀를 수행합니다.

  • 그런 다음 변수와 시간 간의 관계를 살펴보겠습니다.

  • 요약.

설정

아래 링크에서 데이터세트를 다운로드할 수 있습니다.

https://en.openei.org/datasets/dataset/649aa6d3-2832-4978-bc6e-fa563568398e/resource/b710e97d-29c9-4ca5-8137-63b7cf447317/csv/building1resource

설명 변수로 OAT(Outdoor Air Temperature)를 사용하여 건물의 전력을 모델링하는 데 사용할 것입니다.

jupyter 또는 IDE가 설치된 동일한 폴더에 csv 파일을 저장합니다.

필수 라이브러리 및 데이터세트 가져오기

먼저 필요한 라이브러리를 가져온 다음 pandas python 라이브러리를 사용하여 데이터 세트를 읽을 것입니다.

# Importing Necessary Libraries

import pandas as pd
#Required for numerical functions
import numpy as np
from scipy import stats
from datetime import datetime
from sklearn import preprocessing
from sklearn.model_selection import KFold
from sklearn.linear_model import LinearRegression
#For plotting the graph
import matplotlib.pyplot as plt
%matplotlib inline

# Reading Data
df = pd.read_csv('building1retail.csv', index_col=[0],
date_parser=lambda x: datetime.strptime(x, "%m/%d/%Y %H:%M"))
df.head()

출력

Python을 사용한 선형 회귀?

데이터세트 탐색

먼저 pandas로 데이터 세트를 플로팅하여 시각화해 보겠습니다.

df.plot(figsize=(22,6))

출력

Python을 사용한 선형 회귀?

따라서 x축은 2010년 1월부터 2011년 1월까지의 데이터를 보여줍니다.

위의 출력을 보면 플롯에 두 가지 이상한 점이 있음을 알 수 있습니다.

  • 누락된 데이터가 없는 것 같습니다. 확인하려면 다음을 실행하세요.

df.isnull().values.any()

출력

False

잘못된 결과는 데이터 프레임에 null 값이 없다는 것을 알려줍니다.

  • 데이터에 일부 이상이 있는 것 같습니다(긴 하향 스파이크)

이상치 또는 '이상치'는 일반적으로 실험 오류의 결과이거나 실제 값일 수 있습니다. 두 경우 모두 회귀선의 기울기에 심각한 영향을 미치므로 폐기합니다.

'이상치'를 버리기 전에 먼저 데이터가 어떤 종류의 분포를 나타내는지 확인하겠습니다.

df.hist()

출력

Python을 사용한 선형 회귀?

위의 히스토그램에서 그래프가 대략 정규 분포를 따르는 데이터를 표시하고 있음을 알 수 있습니다.

따라서 평균에서 3 표준 편차보다 큰 값을 모두 삭제하고 새 데이터 프레임을 플로팅합니다.

std_dev = 3
df = df[(np.abs(stats.zscore(df)) < float(std_dev)).all(axis=1)]
df.plot(figsize=(22, 6))

출력

Python을 사용한 선형 회귀?

따라서 위의 출력에서 ​​볼 수 있듯이 스파이크를 어느 정도 제거하고 데이터를 정리했습니다.

선형 관계 검증

OAT와 검정력 사이에 선형 관계가 있는지 알아보기 위해 간단한 산점도를 그려 보겠습니다.

plt.scatter(df['OAT (F)'], df['Power (kW)'])

출력

Python을 사용한 선형 회귀?

선형 회귀

모델을 실행하고 성능을 평가하기 위해 Scikit-learn 모듈도 사용하고 k-fold 교차 검증(k=3)을 사용하여 모델의 성능을 평가할 것입니다.

X = pd.DataFrame(df['OAT (F)'])
y = pd.DataFrame(df['Power (kW)'])
model = LinearRegression()
scores = []
kfold = KFold(n_splits=3, shuffle=True, random_state=42)
for i, (train, test) in enumerate(kfold.split(X, y)):
model.fit(X.iloc[train,:], y.iloc[train,:])
score = model.score(X.iloc[test,:], y.iloc[test,:])
scores.append(score)
print(scores)

출력

[0.38768927735902703, 0.3852220878090444, 0.38451654781487116]

위의 프로그램에서 model =LinearRegression()은 선형 회귀 모델을 만들고 for 루프는 데이터 세트를 세 겹으로 나눕니다. 그런 다음 루프 내부에서 데이터를 맞춘 다음 목록에 점수를 추가하여 성능을 평가합니다.

하지만 결과가 좋지 않아 성능을 개선할 수 있습니다.

시간

전력(변수)은 하루 중 시간에 크게 의존합니다. 이 정보를 사용하여 원-핫 인코딩을 사용하여 회귀 모델에 통합해 보겠습니다.

model = LinearRegression()
scores = []
kfold = KFold(n_splits=3, shuffle=True, random_state=42)
for i, (train, test) in enumerate(kfold.split(X, y)):
   model.fit(X.iloc[train,:], y.iloc[train,:])
   scores.append(model.score(X.iloc[test,:], y.iloc[test,:]))
print(scores)

출력

[0.8074246958895391, 0.8139449185141592, 0.8111379602960773]

이것이 우리 모델의 큰 차이점입니다.

요약

이 섹션에서는 데이터 세트를 탐색하고 회귀 모델에 맞게 준비하는 기본 사항을 배웠습니다. 우리는 성능을 평가하고 단점을 발견하고 수정했습니다.