import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression, LogisticRegression, Ridge, RidgeCV,
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score, mean_squared_error
*sns.pairplot(df[cols], height=2); ==> 전체 변수와의 관계를 보여줌
*머신러닝이란?
Data, Answer ==> ML model ==> rule
= 지도학습( 데이터와 답을 통해서 법칙을 찾아내는법)
*기준모델(Baseline Model)
가장 간단하면서도 직관적이면서 최소한의 성능을 나타내는 기준이 되는 모델을 기준모델
평균값을 기준으로 사용했을 때는 평균기준모델
(= 이 예측보다는 좋아야한다)
- 분류문제: 타겟의 최빈 클래스
- 회귀문제: 타겟의 평균값
- 시계열회귀문제: 이전 타임스탬프의 값
predict= price.mean()
error= prdict- price
mae= error.abs.mean()
==>> 큰 이상치의 경우 영향이 있음( but 나온 값을 통해서 이만큼의 차이가 있다라는 것이 직관적임)
Feature = X 독립변수 | Target= y 종속변수 |
예측(Predictor)변수, 설명(Explanatory), 특성(feature) | 반응(Response)변수, 레이블(Label), 타겟(Target) |
*예측모델(Predictive Model)
scatterplot에 가장 잘 맞는(best fit) 직선을 그려주면 그것이 회귀 예측모델이됨
회귀분석에서 중요한 개념은 예측값과 잔차(residual)
예측값은 만들어진 모델이 추정하는 값
잔차는 예측값과 관측값의 차이(predict-obsevation)
회귀선은 잔차 제곱들의 합인 RSS(residual sum of squares)를 최소화 하는 직선= SSE(Sum of Square Error)
이 값이 회귀모델의 비용함수(Cost function)가 됩니다. 비용함수를 최소화 하는 모델을 찾는 과정을 학습이라고 함
(= 잔차제곱합을 최소화 방법 OLS 최소제곱회귀 Ordinary least squares)
=sns.regplot(x= df~~~, y= df... , line_kws={'color':'red'})
line_kws(=reg 빨간선)
OLS에 전제조건 == 종속변수가 연속변수여야함
* 선형회귀는 주어진 구간의 점수를 알 수 없는 값을 예측 = 보간(interpolate)
* 기존 데이터의 범위를 넘어서는 값을 예측 = 외삽(extrapolate)
* sklearn 활용
- 풀어야 하는 문제를 풀기에 적합한 모델을 선택하여 클래스를 찾아본 후 관련 속성이나 하이퍼파라미터를 확인
- 데이터 준비
- fit() 메소드를 사용하여 모델을 학습
- 'predict()' 메소드를 사용하여 새로운 데이터를 예측
- 모델 설정 model = LinearRegression()
- feature, target 설정 후 X_train, y_train 모델 설정
- model.fit( train data ) ==> 훈련데이터를 model으로 학습시킴
- X_test(해당 값이였을 때 종속변수 값을 알기위해) 값 설정 후
- y_pred= model.predict(X_test)
- * 해당 독립변수를 다 알고싶다면 X_test = [[x] for x in df_t['GrLivArea']]
*LinearRegression 객체의 coef_, intercept_ 속성
coef_ 계수 = x가 증가할 때 해당값만 증가 or 감소
intercept_ y절편= x=0일때, y의 평균값(= Data 무작위 noise존재 == 이걸평균내면 0에 가까움)
*회귀= continuous 한 데이터를 예측 Regression ( best fit line )
==> SSE(잔차제곱의합)이 최소화 하는 직선 ==> 구하는 방법이 OLS
*분류= category or class 예측 Classification ( decision noundary )
오차 VS 잔차
모집단에서 회귀식을 얻었다면, 그 회귀식을 통해 얻은 예측값과 실제 관측값의 차이가 오차
표본집단에서 회귀식을 얻었다면, 그 회귀식을 통해 얻은 예측값과 실제 관측값의 차이가 잔차
- 잔차의 절대값의 합을 식으로 표현하면 미분이 불가능한 형태이다. 최소값을 구하기 위해 잔차를 표현하는 식을 미분을 해야하는데, 절대값을 이용하면 미분이 불가능하다. - 잔차의 제곱의 합은 미분이 가능하며, 유일해를 갖는다.
잔차의 합이나 절대값을 이용하지 않고 제곱합을 취하는 이유는 다음과 같다.
- 잔차의 합을 0으로 만드는 해는 무수히 많기 때문인데, 즉 유일해가 아니기 때문이다. (Residual이 양수거나 음수임. 각각의 residual들을 더했을때 그 합이 0인 값은 다수 존재)
독립변수로 종속변를 예측하기 위한 추세선(회귀선)을 구한다.(y= b+ax)
이 선과 데이터들의 error 가 발생하고 error(잔차) = 측정값 - 예측값이다.
즉, 가장 합리적인 추세선이란 '잔차가 가장 작은 추세선이다'
이 계산을 통해서 +와 -가 나오는데 이것을 방지하기위해 제곱을 해주고('최소제곱법')
제곱의 합이 최소화된 추세선을 통해서 종속변수를 예측할 수 있다.
*단순선형회귀 모델을 만들기 위한 좋은 특성 선택
- 단순선형회귀분석이란 단일 독립변수에 대한 종속변수의 추이를 분석하는 것이다.
- 단순선형회귀모델은 이런 원리를 사용하여 주어진 feature와 target의 관계를 학습하고 정확한 수치(기울기, 절편)로 나타내는 것을 말한다.
- target에 영향을 끼치는 feature가 무엇일지 잘 선택하는 것이 중요하다.
- 객관적인 수치로 명확한 표현이 가능한 양적변수는 회귀분석에 유용하게 사용된다.
- 질적변수도 더미 코딩을 통해 수치로 변환하거나, 전문가들이나 기존 연구에 의해 완성된 신뢰도 높은 방법으로 연속적 수치로 변환할 수 있다면 얼마든지 사용 가능하다.
- 시각화를 통해 상관관계를 눈으로 파악하거나, 공분산 혹은 상관계수를 확인해 보거나, 좋은 특성을 분별하는 작업까지 코딩으로 처리하여 정확도를 높이면 좋은 특성을 선택할 수 있다.
*OLS(Ordinary Least Squares)
- 최소자승법(Ordinary Least Squares)은 잔차제곱합(RSS: Residual Sum of Squares)을 최소화하는 벡터를 구하는 방법이다.
- 분포되어 있는 데이터의 추세선을 그리고자 할 때 주로 사용된다.
- 추세선과 데이터 벡터의 오차는 다양한 형태로 표현될 수 있지만 가장 보편적이고 쉽게 이해할 수 있는 지표는 잔차 제곱합이다.
- 우리가 오늘 배웠던 단순선형회귀로만 제한하여 생각해 보자. 그리고 어떤 데이터값의 벡터가 (xi,yi) 이고, 단순회귀선의 식이 yi^=axi+b 라고 가정해보자.
- 이 때, x1에 따른 y1^과 실제 y1의 값은 동일하지 않다.
- 모든 데이터를 지나도록 일차방정식 선을 그릴 수 있으면 좋겠지만, y1^≠y1인 것 처럼, 단순선형회귀분석으로는 불가능 한 일이다.
- 따라서 (xi,yi)에서 y^=ax+b 까지의 거리, 즉 오차를 최소화 할 수 있는 방법을 사용하여 데이터의 분포를 가장 잘 반영하는 직선(회귀선)을 그리는 것으로 최선의 타협을 한다.
- 여기서 해당 오차를 최소화 하는 방법 중 하나가 잔차제곱합을 최소화하는 최소자승법이다.
'기계학습(ML) > Linear Models' 카테고리의 다른 글
n214 Logistic Regression / validation (0) | 2021.06.14 |
---|---|
n213 Ridge Regression, onehotencoding (0) | 2021.06.12 |
n212 Multiple Linear Regression / 과적합 과소적합 (0) | 2021.06.12 |
댓글