AI bootcamp DAY23

jintonic92·2021년 8월 18일
0

AI bootcamp Session 02

목록 보기
1/4

선형회귀 Linear Regression

  • 선형회귀모델을 이해
  • 지도학습 Supervised Learning을 이해
  • 회귀모델에 기준모델을 설정
  • Scikit-learn을 이용해 선형회귀모델을 만들어 사용/해석

1. 데이터를 불러온다

1-1. df = pd.read_csv('')
1-2. df = head()
1-3. 사용할 특성 select 

  target = df[['Happiness']]
  df = df[['Nation', 'GDP', 'Happiness']]
  df_t = df[['Nation', 'GDP']]

1-4. df['Happiness].describe()
1-5(추가) 확률밀도함수, 평균과, 수직선 확인하여 평균 시각적으로 확인 

	import matplotlib.pyplot as plt
	import seaborn as sns

SalePrice의 확률밀도함수를 그려보겠습니다
	sns.displot(df['SalePrice'], kde=True)

평균과, 중간값으로 수직선을 그려보겠습니다.
	plt.axvline(df['SalePrice'].mean(), color='blue')
	plt.axvline(df['SalePrice'].median(), color='red');

2. 기준 모델 Baseline Model

  • 예측 모델을 구체적으로 만들기 전에 가장 간단하고 직관적인 최소한의 성능을 나타내는 기준이 되는 모델이 기준 모델.
  • 평균값을 기준으로 사용해서 평균 기준 모델이라고 할 수 있음
  • 참고: 분류 문제 = 타겟의 최빈 클래스, 회귀 문제 = 타겟의 평균값, 시계열회귀문제 = 이전 타임스탬프의 값

    2-1. predict: 기준 모델인 평균으로 예측

       predict = df['Happiness'].mean()   

    2-2. 평균값으로 예측할 때 샘플 별 평균값과의 차이(error)저장

       errors = predict - df['Happiness']

    2-3. Mean Absolute Error, error에 절대값을 취한 후 평균 계산
    MAE(평균절대오차)는 예측 error의 절대값 평균

      mean_absolute_error = errors.abs().mean()

평균 에러가 상당히 크다는 것을 확인할 수 있음. 평균으로 하면 MAE가 너무 크다는 뜻.

3. 예측모델 Predictive Model 활용

Scatter plot에 가장 잘 맞는 best fit 직선을 그려주면 그것이 회귀 예측 모델이 됨

  • 회귀직선은 어떻게 만들 수 있을까?
    • 예측값 = 만들어진 모델이 추정하는 값

    • 잔차 = 예측값과 관측값 차이

    • 오차 = 모집단에서의 예측값과 관측값 차이

      회귀선은 잔차 제곱들의 합인 RSS(Residual sum of squares)를 최소하 하는 직선. RSS는 SSE(Sum of Square Error)라고도 말하며, 이 값이 회귀모델의 비용함수(Cost Function)이 된다. 머신러닝에서는 이렇게 비용함수를 최소화 하는 모델을 찾는 과정을 학습하는 것.

      여기서 ∂와 beta는 RSS를 최소화 하는 값으로 모델 학습을 통해서 얻어지는 값. 이렇게 잔차제곱합을 최소화하는 방법을 최소제곱회귀 혹은 Ordinary least squares(OLS)라고 부른다.

    선형회귀는 주어져 있지 않은 점의 함수 값을 보간Interpolate하여 예측하는데 도움을 줌. 선형회귀는 또한 기존 데이터의 범위를 넘어서는 값을 예측하기 위한 외삽(extrapolate)도 제공.
  • 이를 어떻게 예측할 수 있을까?
    선형회귀 직선은 독립변수Independent variable, X와 종속 변수 dependent, Y간의 관계를 요약
    종속변수는 반응Response변수, Label레이블, 타겟Target등으로 불림
    독립변수는 예측Predictor변수, Explanatory설명, 특성Feature로 불림

3-1 scikit-learn 사용해서 선형회귀모델을 만들어 보자

  • 특성 데이터와 타겟 데이터를 나누어 줍니다
  • 특성행렬은 주로 x로 표현하고 보통 2차원 행렬([n_samples, n_features]). 주로 NumPy 행렬이나 Pandas 데이터 프레임으로 표현
  • 타겟 배열은 주로 y로 표현하고 보통 1차원 형태(n_samples)임. 주로 Numpy배열이나 Pandas series 구조를 사용
  • scikit-learn에는 수많은 머신러닝 모델이 구현되어 있는데, 모두 유사한 프로세스를 통해서 사용 가능
    (1) 문제를 풀기에 적합한 모델을 선택하여 클래스를 찾아본 후 관련 속성이나 하이퍼파라미터 확인
    (2) 데이터 전처리
    (3) fit() 메소드를 사용하여 모델 학습
    (4) predict() 메소드를 사용하여 새로운 데이터 예측

3-2. 단순 선형 회귀

from sklearn.linear_model import LinearRegression
3-3. X특성 테이블과, y 타겟 백터를 만듭니다

feature = ['GDP']
target = ['Happiness']
X_train = df[feature]
y_train = df[target]

3-4. 모델을 학습fit한다.

model.fit(X_train, y_train)
LinearRegression()

3-5. 새로운 데이터 샘플을 선택해 학습한 모델을 통해 예측

X_test = [[4000]]
y_pred = model.predict(X_test)

3-6. 전체 테스트 데이터를 모델을 통해 예측

X_test = [[x] for x in df_t['GDP']]
y_pred = model.predict(X_test)

3-7. 선형회귀모델의 계수 Coefficients

  • 모델이 GDP와 Happiness 사이에 어떤 관계를 학습했을까?
    이 질문에 대한 답을 하기 위해 LinearRegression 객체의 coef, intercept 속성을 확인

  • 계수 Coefficient

    model.coef_
  • 절편 intercept
    : 좌표 평면상의 직선이 x축과 만나는 점의 x좌표 및 y축과 만나는 점의 y좌표를 통틀어 이르는 말.

    modelintercept_

    3-8. 예측함수를 만들어 새로운 데이터를 반복해서 예측하고 coefficient의 영향에 대하여 설명

    	def explain_prediction(usd):
        	y_pred = model.predict([[usd]])
            pred = f"{int(sqft)} sqft 주택 가격 예측: ${int(y_pred[0])} (1 usd당 추가 GDP: ${int(model.coef_[0])
    		return pred
            
            

3-9. gdp_usd = 4000 인 테스트 데이터로 예측

	print(explain_prediction(4000))

4000 USD 행복 예측: $447090 (1 USD당 추가 행복: $107)

번외
from ipywidgets import interact
데코레이터 interact를 추가합니다.

@interact
    def explain_prediction(sqft=(500,10000)):
        y_pred = model.predict([[sqft]])
        pred = f"{int(sqft)} sqft 주택 가격 예측: 			${int(y_pred[0])} (1 sqft당 추가금: ${int(model.coef_[0]
    return pred

interactive(children=(IntSlider(value=5250, description='sqft', max=10000, min=500), Output())

0개의 댓글

관련 채용 정보