선형회귀 _ bike-sharing-demand
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
# 노트북 안에 그래프를 그리기 위해
%matplotlib inline
# 그래프에서 격자로 숫자 범위가 눈에 잘 띄도록 ggplot 스타일 사용
plt.style.use('ggplot')
# 그래프에서 마이너스 폰트 깨지는 문제에 대한 대처
mpl.rcParams['axes.unicode_minus'] = False
import warnings
warnings.filterwarnings('ignore')
□ Feature Engineering
▶컬럼 중에서 머신러닝의 피처로 사용되는게 존재(쓸떼없는 건 없애기. 아이디 등은 예측에 도움되지 않음)
▶피처 = 독립변수 = 속성 = 특성 → 근거(원인) → Feature Engineering(가공)
종속변수를 예측. 전처리하는 거랑 비슷
▶간혹 범주형 피쳐들의 경우 원핫인코딩(해당되는건 1로 표시, 안되는건 0으로 표시)을 해주면 점수가 높아지는데
도움 이 되기도 하는데 원핫인코딩을 해봐도 점수 상승에 도움이 되지 않는 경우에는 원핫인코딩을 하지는 않았다.
범주형 feature의 type을 category로 변경 해 준다.
categorical_feature_names = ["season","holiday","workingday","weather", "dayofweek","month","year","hour"]
for var in categorical_feature_names:
train[var] = train[var].astype("category")
test[var] = test[var].astype("category")
#train해줬으면 test도 바꿔줘야됨
#category는 숫자가 있어도 우열을 가리지 않음. 그래서 타입을 category로 바꾼다.
□ Feature Selection
▶ 회귀에 중요하다고 생각되는 columns만 넣어서 새로 데이터 프레임을 만들기
feature_names =
["season", "weather", "temp", "atemp", "humidity", "year", "hour", "dayofweek", "holiday","workingday"]
X_train = train[feature_names]
X_test = test[feature_names]
참고) np.exp() 밑이 자연상수 e인 지수함수로 변환해줌
(로그 씌웠던 것을 다시 원래형태로 되돌릴때 사용 )
np.exp(0) # e^0과 동일 → 1.0
np.exp(1) # e^1과 동일 → 2.718281828459045
np.log() 로그를 씌어줌
np.square() 제곱을 해준다
np.sqrt() 루트를 씌운다
np.log1p() 0이 되지 않도록 1을 더해주는 로그
□ 선형회귀 모델
▶ 선형회귀 또는 최소제곱법은 가장 간단하고 오래된 회귀용 선형 알고리즘
▶ 예측과 훈련 세트에 있는 타깃 y사이의 평균제곱오차(MSE)를 최소화하는 파라미터 w와 b를 찾는다.
▶ 매개변수가 없는 것이 장점이지만, 모델의 복잡도를 제어할 수 없다는 단점이 있다.
▶rfModel.feature_importances_ 각 컬럼의 중요도를 뽑아온 것. 중요도가 0인 컬럼은 빼도 상관없다. 내장함수다.
importance = pd.DataFrame(rfModel.feature_importances_, index = feature_names, columns=['Imp'])
importance.sort_values(by='Imp', ascending=False)