Python

[Python] Regression

SangRok Jung 2022. 11. 10. 12:29
반응형

Regression(회귀)


통계학에서 사용하는 자료 분석 방법 중 하나로, 간략히 표현해 여러 자료들 간의 관계성을 수학적으로 추정, 설명한다. 흔히들 통계학의 꽃이라고 한다.

인과관계를 증명하는 방법이 아니라, 인과관계가 상정된 모델을 구현할 수 있는 방법이다.

 

 

▶ y = wx

x = input data.

y = ouput data.

w(weight) = 회귀분석이 찾는 최적의 값.

 

 

절대값, 제곱중 제곱으로 계산한다.

둘 중 제곱의 값이 에러값을 더 크게 제공한다.

 

에러 제곱의 합(SE) : square Error

에러 제곱의 합의 평균(MSE) : mean square error(Cost function, RSS(w))

 

Cost fuction, RSS(w)의 최소값을 찾는것

w를 찾는것을 머신러닝, 딥러닝에서는 학습이라고 한다.

 

 

 

 

 

 

경사하강법


 

1차 근삿값 발견용 최적화 알고리즘이다. 기본 개념은 함수의 기울기(경사)를 구하고 경사의 반대 방향으로 계속 이동시켜 극값에 이를 때까지 반복시키는 것이다.

 

 

▶ w를 구하는 미분식

 

 

미분값의 크기에 따라서 이동량을 정한다.

미분값이 양수냐 음수냐의 따라서 증가 시킬지, 감소 시킬지 정한다.

 

 

 

▶ w = w - w의 미분값

a가 감소할 수 록 시간이 증가된다.

절편을 고정시킨 후 절편을 찾는다.

 

 

 

 

 

 

 

Regression 예제


sklearn 패키지의 datasets 서브패키지는 회귀분석을 공부하기 위한 예제를 제공한다. 그 중 load_boston() 명령으로 받을 수 있는 보스턴 주택 가격 데이터는 다음과 같은 데이터이다. 보스턴의 506개 타운(town)의 13개 독립변수값로부터 해당 타운의 주택가격 중앙값을 예측하는 문제다. 사용할 수 있는 특징 데이터는 다음과 같다.

 

 

 

 

plt.figure(figsize=(10, 10))
sns.heatmap(X.corr(), annot=True, cmap="coolwarm")

#0.8 이상 위험, 다중공선성 위험$

 

 

 

평균 제곱 오차(MSE)는 회귀에서 자주 사용되는 손실 함수이다.
정확도 개념은 회귀에 적용되지 않는다.
일반적인 회귀 지표는 평균 절대 오차(MAE)이다.

MSE는 손실함수로써 쓰이고 MAE는 회귀지표로써 사용된다.

 

 

 

 

 

 

 

 

다중공선성(Multi-Collinearity) 문제


다수의 독립변수가 서로 지나치게 높은 상관관계를 가지면서 회귀계수 추정의 오류가 발생하는 문제.

Variance Inflasion Factor(VIF, 분산팽창계수)를 구하여 판단. 엄밀한 기준은 없으나 보통 10보다 크면 다중공선성이 있다고 판단(5를 기준으로 하기도 함)

너무 높은 상관계수(약0.9 이상)은 다중공선성 의심

  • Tolerance를 확인
    • 한 개의 독립변수를 종속변수로 나머지 독립변수를 독립변수로 하는 회귀분석 실시
    • R^2가 1이라면 독립변수 간의 심각한 상관관계가 있음을 의미
    • Tolerance = 1 - R^2. Tolerance가 0에 가까워 질 수 록 상관성이 매우 높다.

 

▷ 해결책 

  • 애초에 일어나지 않게 독립 변수를 잘 선택
  • 비슷한 피처가 연구목적 피처가 아닌 경우 피처 삭제
  • 차원축소(PCA, LDA등)로 변수를 재조합(경우에 따라 이상한 결과)
  • Ridge Regression
  • Mean centring

 

 

 

 

 

 

 

다항회귀


 

비선형 데이터를 학습하기 위한 선형 모델을 사용하는 기법.

 

 

 

▶ Bias(편향성)

  • 지도 학습 알고리즘이 학습데이터 내 입력변수들과 출력변수의 관계를 잘 fitting 하지 못해 발생하는 오차

 

Variance(변동성) 

  • 학습데이터에 내재되어 있는 변동(fluctuation)에 의해 발생하는 오차
  • 학습데이터가 모집단을 완벽하게 대표할 수 없기 때문에 발생

 

 

Variance(변동성) 높게 나온 경우는 분산이 높은경우다.

컴퓨터는 기본적으로 곱셈계산보다 덧셈계산을 좋아한다.

차수가 증가할 수 록 학습데이터의 에러는 감소한다. MSE값이 0과 가까워지고 과적합될 확률이 높아진다.

선형회귀도 노이즈 데이터가 들어올 경우 Variance가 높을 수 있다

꼭지점의 개수 = N차 - 1, 100차의 꼭지점 개수 = 99

 

우리의 목적은 Bias를 낮추는것이었으며 앞으로는 Bias와 Variance의 수치를 낮추는 결과를 찾아야한다.

 

 

Error = Bias + Variance + c

편미분을 통해서 최적의 Weight를 찾아야한다.

c = 줄일 수 없는 에러 값.

 

 

 

▶ 학습이 잘 되지 않을 경우

  • 편향 감소 (Underfitting 모델인 경우)
    • 더 많은 피쳐 추가 (파생 변수 생성, 데이터 통합 등)
    • 더욱 세련된 알고리즘 사용 (모델에 복잡성을 더한다.)
  • 분산 감소 (Overfitting 모델인 경우)
    • 더 적은 피쳐 사용
    • 더 많은 데이터 포인트 사용
    • 제약 (regularization) 사용

 

 

 

 

 

▶ RSS = Bias, alpha = Variance, alph

 


 

 

 

▶ PolynomialFeatures

데이터를 불러와 X,y 데이터로 분리한 뒤 가상의 차원으로 데이터를 추가하고 train, test데이터로 분리한다.

 

데이터 출처 : 

https://www.kaggle.com/competitions/boston-dataset/submissions

from sklearn.preprocessing import PolynomialFeatures
df_train = pd.read_csv('./boston-dataset/boston_data.csv')
df_test = pd.read_csv('./boston-dataset/boston_test_data.csv')

# X, Y , test, train 분리
X = df_train.drop(columns='medv')
y = df_train['medv']
from sklearn.model_selection import train_test_split

# poly
poly = PolynomialFeatures(2)
X_poly = poly.fit_transform(X)
df_test2 = poly.fit_transform(df_test)

X_train, X_test, y_train, y_test = train_test_split(X_poly, y, test_size=0.2, random_state=19)

 

Ridge를 실행하여 결과값을 저장한다.

rd = Ridge(alpha=50000)
rd.fit(X_train, y_train)
rd_pred = rd.predict(df_test2)
df_test['price'] = rd_pred

# 파일 저장
bt = pd.read_csv('./boston-dataset/boston_test_data.csv')
bt.drop(list(bt.columns)[:], axis = 1, inplace=True)
bt['id'] = np.array(range(0, 102))
bt['price'] = df_test['price']
bt.set_index("id", inplace=True)
bt.to_csv('boston_test_3.csv')

 

 

 

 

 

분산이 높아질 수 록 과적합률도 높아진다.

 

아웃라이어 데이터의 영향을 받는 경우 alpha값을 키워 분산을 줄여 해결하지만 데이터의 중요도가 낮아진다.

 

 

 

 

기본적으로 발전된 모델같은 경우 default 값으로 옵션이 L2가 적용되어 있다.

 

데이터가 잘 못 들어온다는 가정하에 제약을 L2 distance로 두는게 안전하다.

 

alpha값이 증가하면 데이터의 분포가 높은 쪽을 중심으로 계산하게 된다.

 

 

 

 

 

lassso 데이터가 잘 못 들어왔을 시 feature selection으로 데이터를 처리하고 계산할 수 있다.

 

 

 

 

 

 

 

 

 

 

Logistic Regression


강력한 분류 알고리즘.

텍스트 분류에서 강점.

 

 

parameter C

1 / alpha

c가 낮을 수 록 높은 제약이 들어간다. 높을 수 록 낮은 제약이 들어간다. alpha 값이 높을 수 록 높은 제약.

 

 

 

 

 

 

 

반응형

'Python' 카테고리의 다른 글

[Python] openCV : Image display  (0) 2022.11.10
[Python] Open CV : 개요  (0) 2022.11.10
[Python] Deep Learning  (0) 2022.11.03
[Python] Keras.initailizers(초기화 함수)  (0) 2022.10.31
[Python] Functional API  (0) 2022.10.31