요약

  • 산포도&상관계수확인: 산포도 확인 후 상관계수 절대값 0.8 이상 다중공선성이 있음으로 간주함
  • torelence 확인: 하나의 독립변수를 Y, 나머지 독립변수의 조합을 X로 했을때, R^2를 계산후 torelence가 0에 가까운 값인지 확인함(torelence란 1-R^2, R^2 = 1인 경우, torelence = 0, 0인경우 다중공선성 심각)
  • 분산팽창지수(VIF:Variance Inflation Factor, VIF = 1/torelence): 일반적으로 연속형변수에서 10이상이면 다중공선성 있음으로 간주, 더미변수는 3이상이면 다중공선성으로 간주함.
  • 상태지수(Condition Index): 100 이상인 경우, 다중공선성 간주하지만 잘 사용되지 않음.

 

다중공선성 문제 해결하기

  • 다중공선성이 큰 변수가 유의미한가? R^2값이 매우 팽창하였음에도 불구하고 유의미하다는 것은 그 자체로 매우 유의미함을 의미함 => 일반적으로 제거하지 않음
  • 해당변수를 제거? 데이터입력시 변수를 잘못 구성함. 무작정 제거하지 않음
  • 주성분분석으로 변수를 재조합
  • 다중공선성이 발생한 변수를 합침:다중공선성이 높은 변수들은 비슷함을 의미하여 평균값으로 대체하기도 함

 

선형회귀분석 (statsmodels.OLS regression) result로 다중공선성 확인하기

import statsmodels.api as sm

lm = sm.OLS(train_y, train_x)
result = lm.fit()
print(result.summary())

OLS 결과

 

 

Reference

https://ysyblog.tistory.com/171

 

[회귀분석] 다중회귀분석(3) - 다중공선성(다중공선성 검정 및 해결)

다중회귀식의 분산 - 회귀분석은 여러개의 독립변수를 통해 종속변수 y의 분산을 얼마나 설명하느냐의 문제 - R-square값과 관계가 있음 ysyblog.tistory.com/168?category=1185073 [회귀분석] 단순선형회귀분

ysyblog.tistory.com

https://ysyblog.tistory.com/119

 

[회귀분석] 회귀분석 실습(1) - OLS 회귀분석 결과 해석 및 범주형 변수 처리 (Statsmodel)

Statsmodel을 활용한 회귀분석 statsmodels 패키지에서는 OLS 클래스를 사용하여 선형 회귀분석을 실시한다 독립변수와 종속변수가 모두 포함된 데이터프레임이 생성되며, 상수항 결합은 하지 않아도

ysyblog.tistory.com

https://bkshin.tistory.com/entry/DATA-20-%EB%8B%A4%EC%A4%91%EA%B3%B5%EC%84%A0%EC%84%B1%EA%B3%BC-VIF

 

DATA - 20. 다중공선성(Multicollinearity)과 VIF(Variance Inflation Factors)

이번 시간에는 다중공선성과 VIF에 대해 알아보겠습니다. 독립 변수 X는 종속 변수 Y 하고만 상관 관계가 있어야 하며, 독립 변수끼리 상관 관계가 있어서는 안 됩니다. 독립 변수간 상관 관계를

bkshin.tistory.com

 

특성 자동 선택

  • 유용한 특성만 선택하고 나머지는 줄이는 방향이 좋음
  • 특성 선택 방법 : 일변량 통계, 모델 기반 선택, 반복적 선택

 

1. 일변량 특성선택 

타겟과 변수간의 통계적 의미를 기반으로 유의미한 변수 선택

 

  • chi2: 카이제곱 검정 통계값
  • f_classif: 분산분석(ANOVA) F검정 통계값
  • mutual_info_classif: 상호정보량(mutual information)

 

단일 변수 선택법은 각각의 독립변수를 하나만 사용한 예측모형의 성능을 이용하여 가장 분류성능 혹은 상관관계가 높은 변수만 선택하는 방법이다. 사이킷런 패키지의 feature_selection 서브패키지는 다음 성능지표를 제공한다.

하지만 단일 변수의 성능이 높은 특징만 모았을 때 전체 성능이 반드시 향상된다는 보장은 없다.

아래 일변량 변수선택 예제이다. 

 

from sklearn.feature_selection import SelectPercentile

# SelectPercentile을 사용하여 특성의 50%를 선택하는 모델 생성
select = SelectPercentile(percentile=50)

# 특성 선택
select.fit(X_train, y_train)
X_train_selected = select.transform(X_train)

 

 

feature_selection 서브패키지는 성능이 좋은 변수만 사용하는 전처리기인 SelectKBest 클래스도 제공한다. 

from sklearn.feature_selection import chi2, SelectKBest


%%time

selector1 = SelectKBest(chi2, k=14330)
X_train1 = selector1.fit_transform(X_train, y_train)
X_test1 = selector1.transform(X_test)

model = BernoulliNB()
model.fit(X_train1, y_train)
print("train accuracy:{:5.3f}".format(accuracy_score(y_train, model.predict(X_train1))))
print("test accuracy :{:5.3f}".format(accuracy_score(y_test, model.predict(X_test1))))

2. 모델 기반 특성선택

 

  • 지도 학습 머신러닝 모델을 사용하여 특성의 중요도를 평가, 가장 중요한 것만 선택 (최종학습과는 무관함, 모델이 같을 필요 없음)
  • 해당 모델은 각 특성의 중요도를 측정하여 순서로 매길 수 있어야 함
  • 결정트리 기반의 모델들은 각 특성의 중요도를 featureimportances에 저장하므로 이를 활용할 수 있음
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier

# (지도 학습 모델로 계산된) 중요도가 지정한 임계치보다 큰 모든 특성 선택하는 모델제작
# 절반 가량의 특성이 선택될수 있도록 중간값을 임계치로 사용
select1 = SelectFromModel(RandomForestClassifier(n_estimators=100, random_state=0),
                         threshold='median')

# 특성 선택
select1.fit(X_train, y_train)
X_train_selected1 = select1.transform(X_train)

 

3. 반복적 특성선택

 

  • 특성을 하나도 선택하지 않은 상태로 시작해 어떤 종료 조건을 도달할 때까지 하나씩 추가하는 방법
  • 모든 특성을 가지고 시작해 어떤 종료 조건이 될 때까지 하나씩 제거하는 방법
  • 두 가지 방법 중 하나를 활용해 특성을 결정한다.

 

from sklearn.feature_selection import RFE

# 특성 선택
select2 = RFE(RandomForestClassifier(n_estimators=100, random_state=0),
             n_features_to_select=40)

# 특성 선택
select2.fit(X_train, y_train)
X_train_selected2 = select2.transform(X_train)

 

 

reference: https://inuplace.tistory.com/618

 

[scikit-learn 라이브러리] 특성 자동 선택

특성 자동 선택 특성이 너무 많아지면 모델이 복잡해지고 과대적합 가능성이 올라간다. 따라서 유용한 특성만 선택하고 나머지는 무시해서 특성의 수는 줄이는 것이 좋다. 특성 선택 방법 : 일

inuplace.tistory.com

https://datascienceschool.net/03%20machine%20learning/14.03%20%ED%8A%B9%EC%A7%95%20%EC%84%A0%ED%83%9D.html

 

특징 선택 — 데이터 사이언스 스쿨

.ipynb .pdf to have style consistency -->

datascienceschool.net

https://dyddl1993.tistory.com/18

 

변수 선택 기법(Feature Selection Method)

변수 선택 기법(Feature Selection Method) 모델을 돌릴 때 쓸모 없는 변수들을 제거함으로써 모델의 속도 개선, 오버피팅 방지 등의 효과를 얻기 위해 사용하는 방법. Feature Selection의 3가지 방법 1. Wrappe

dyddl1993.tistory.com

 

1. simple random sampling: 난수표를 이용해 모든 대상이 동일한 기회를 갖도록 추출되는 방법

2. stratified random sampling: 일정 기준에 따라 2개 이상의 동질적 층으로 구분하여 층별로 추출되는 방법.

중요 집단을 빼지 않고 표본에 포함시킬 수 있으므로 대표성이 높음. 기존 비율을 유지한 채로 추출. 

3. systematic random sampling: 무작위 위치에서 출발점을 선택하고 각 k번째인 데이터로 추출하는 방법. 데이터 개수가 많다면, 단순무작위표본추출에 비해서는 대표성이 높음.

4. cluster sampling : 모집단의 대상을 직접 추출하지 않고 여러 개의 cluster로 묶어서 cluster를 추출해 군집내 대상을 조사하는 방법. 

단순표본추출에서 현실적으로 제약이 있을때 이용될 수 있음. 

 

참고자료: 표본추출 (tistory.com)

 

표본추출

1. 표본추출이란? 그림1.1 모집단으로부터 표본추출과정 표본이란 연구대상 전체에서 선택된 일부를 말하며, 이런 표본을 선택하는 과정을 표본추출(표집)이라고 말한다. 표본추출에서는 표본이

bohemian0302.tistory.com

 

1. Accuracy란?

전체 샘플 개수 중에 나의 알고리즘이 예측한 개수를 나타냅니다. 

예를 들어, Accuracy가 80인 경우 100개중 80개의 정답을 맞춘 것 입니다. 

 

여기서 중요한 것은 무조건 balanced data의 경우에만 이 지표를 사용하는 것이 맞습니다. 

 

예를 들어, 암환자는 1명, 암환자가 아닌 사람은 999명인 상황에서 우리가 만든 모델이 

'암환자가 아닌 환자로 모두 판별하는 모델'로 만들어 졌다면, 

Accuracy는 전체 1000명중 999명을 암환자가 아닌것으로 판단하였기 때문에 99%의 Accuracy값을 갖게됩니다. 

 

이말은, 쉽게 말해 암환자가 아니라고만 말하고 찍어도 99프로 이상의 정답률을 낸다는 것입니다. 

 

2. Precision과 Recall, 둘의 조화평균 F1-score

Precision(정밀도)는 PPV(Positive Positive Value)와 같은 의미를 가진 용어입니다.

의미를 살펴본다면, 내 알고리즘이 Positive(양성)이라고 예측한 것 들중에 실제로 Positive인 것들이 몇개나 되는지를 나타냅니다. 

 

Recall(재현율)은 Sensitivity(민감도)와 같은 의미를 가진 용어입니다. 

실제 Positive인 데이터들 중 내 알고리즘이 Positive라고 예측한 것이 몇개나 되는지를 나타냅니다. 

 

F1-score는 Precision과 Recall을 모두 고려하고 싶을때 사용하는 지표로 약간씩 다른 관점에서 Positive를 얼마나 잘 예측하는지 성능평가하는 값입니다. 

 

보통은, ROC커브를 그려 AUC로 성능을 평가하지만, Precision과 Recall을 이용한 경우는 Precision-Recall Curve를 그려서 확인합니다. 

 

3. Precision-Recall Curve

 

Threshold에 따라, Precision과 Recall은 trade-off관계를 가지며 threshold에 의한 함수라는것을 알 수 있습니다. 

Threshold를 조정하여 Precision-Recall Plot을 그리는 것을 설명해놓은 좋은 블로그를 공유해 놓습니다. 

 

https://ardentdays.tistory.com/20

 

 

Precision-Recall Curves 설명 및 그리기(Python)

Precision-Recall Curves 설명 및 그리기(Python) Goal 이 페이지에서는 Precision-Recall Curve가 무엇이고, 어떻게 그려지는지 알아보겠습니다. 이를 위해서 필요하다고 생각되는 Precision과 Recall, 그리..

ardentdays.tistory.com

 

 

abundant class(주로 정상데이터)와 rare class(이상데이터 그룹)의 비율이 1:99와 같이 극단적인 경우가 발생하는 경우, 

크게 두가지 방법으로 모델의 잘못된 판단을 막을 수 있습니다. 

 

1. sampling을 하는 것

2. 모델의 cost를 주어 모델 내에서 개선하는 방법

 

이번 포스팅에서는 sampling중 down-sampling과 up-sampling의 방법론들을 다룰 것 입니다.

 

1. Down-sampling

Under-sampling의 장점은 필요없는 데이터를 지우기 때문에, 계산시간이 빠르지만 단점은 지워진 데이터들로 인해 정보손실이 발생할 수 있습니다. 

 

  • random down-sampling: 랜덤하게 abundant class의 instance를 추출해서 rare class와 1:1 비율을 맞춘 데이터 셋으로 학습시킵니다. 매번 랜덤하게 샘플링되기 때문에 경계선이 달라져 결과가 달리나오지만 꽤나 좋은 모델로 평가받고 있습니다. 
  • Tomek links down-sampling: Tomek-links라는 것은 abundant class의 instance와 rare class의 instance를 2차원 평면에 뿌렸을 때, 둘 사이를 직선으로 열결했을때 이를 방해하는 다른 instance가 없을 경우에 그 직선을 말합니다. 이때, Tomek-links에 연결된 정상데이터들을 지움으로써 분류경계선을 새로 그을 수 있게 됩니다. 

Tomek-links의 정상데이터를 제거하여 down-sampling을 함
기존의 분류 경계선과 다른 경계선을 그릴 수 있음

  •  CNN(Condensed Nearest Neighbor) : 1-NN를 사용해서 abundant와 rare사이의 1개의 관측치를 골라서 어떤 그룹에 더 가까운지 판단하여 가까운 그룹에 데이터로 속하게 함. 만약, rare class에 가깝다면 abundant class의 instance를 rare로 변경하고, 나머지 abundant class data를 모두 지웁니다. 그 후, rare class로 분류되었던 abundant class의 data를 다시 abundant class로 변경해줍니다. 이때, 사용하는 NN은 k-NN이 아닌 무조건 1-NN을 사용해야합니다. 

CNN으로 재분류된 데이터 분포와 분류경계선

  • OSS: Tomet-links에서 나온 under-sampling 데이터와, CNN에서 나온 under-sampling데이터를 합치는 것입니다. OSS

OSS 방법 (보라색라인 안에 데이터들은 지워짐) 

 

2. Over-sampling

단점: 소수클래스에 과적합이 생길 수 있습니다. 

 

  • Resampling: rare class의 instance를 랜덤복원추출하여 데이터를 증가시키는 방법입니다. 
  • SMOTE (Sythetic Minority Oversampling technique): resampling 했을때 over-fitting되는 문제를 해결하기 위해 나온 방법론으로 up-sampling에서 주로 사용되는 방법입니다.  
  • Boarderline SMOTE: 경계부분에서 over-sampling을 하는 방법입니다. 이상데이터와 정상데이터 사이의 데이터들 위주로 증폭시키기 위한 방법입니다. 사실, 전체 정상데이터와 이상데이터 사이에 SMOTE를 사용하면, 경계선 주변부에 데이터들이 생성되는것이외에 이상데이터 바깥쪽에도 데이터가 생성될 가능성이 높습니다. 하지만, 이런 데이터들은 모델을 학습시키기에 좋은 데이터들은 아니기 때문에 경계선 주위에 데이터를 생성할 수 있도록, 경계선 주위의 정상데이터들로 SMOTE샘플링을 하는 방법입니다. 

Boarderline SMOTE 방법


여기서?

컴퓨터가 Boarderline을 판단하는 방법은, k를 정해 그룹핑을 하여 k개의 데이터가 모두 소수 관측치라면 이를 'safe 관측치'라고 부릅니다. 그리고 이것은 boarderline이 될 수 없습니다. 

하지만, 다른 k개의 그룹을 했을때, 다수 관측치가 k/2이상이라면 이를 boarderline이라고 하며 'danger 관측치'라고 부릅니다. k개의 그룹에서 다수의 데이터가 또 너무 많이 존재할 경우 이를 'noise 관측치'라고 합니다.


 

따라서, Boarderline SMOTE sampling의 경우에는 danger 관측치에서 SMOTE sampling을 하는것을 말합니다. 

  • ADASYN(Adaptive Synthetic sampling approach): 

 

<인공지능공학소의 김성범 소장님의 강의를 참고하여 작성합니다. >

 

python 비대칭 데이터 문제 해결:

datascienceschool.net/03%20machine%20learning/14.02%20%EB%B9%84%EB%8C%80%EC%B9%AD%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%AC%B8%EC%A0%9C.html

 

비대칭 데이터 문제 — 데이터 사이언스 스쿨

데이터 클래스 비율이 너무 차이가 나면(highly-imbalanced data) 단순히 우세한 클래스를 택하는 모형의 정확도가 높아지므로 모형의 성능판별이 어려워진다. 즉, 정확도(accuracy)가 높아도 데이터 갯

datascienceschool.net

 

두개 이상의 단위가 다른 대상을 분석하기 위해서는, 데이터들을 표준화 혹은 정규화해주어야합니다. 

 

  • 정규화
  • 표준화

1. 정규화(normalization)

데이터의 상대적 크기의 영향을 줄이기위해 사용합니다. 

 

데이터를 특정 구간으로 바꾸는 방법이고, ( 예를 들면, 0~1사이, 0~100사이 )

식은 위처럼, x= 관측값, x_min = 최소값, x_max = 최대값 으로 계산하여서 새로운 값을 도출해냅니다.

특정데이터가 그 그룹에서 가지는 위치를 볼때 사용합니다. 

주기를 띄는 데이터들은 이전 위치에서 현재위치가 얼마나 바뀐지 보기위해서 사용하는데 유용합니다.

 

2. 표준화(standardization)

데이터를 0을 중심으로 양쪽에 분포하게 하는 방법입니다. 각 데이터들이 평균으로부터 얼마나 떨어져있는지 나타냅니다. 

 

z-score 표준화라고 하는데 측정값에서 평균값을 빼고, 이를 표준편차로 나누어줍니다. 

 

데이터 분석을 하기전에 표준화와 정규화를 진행해주어야하는 경우가 있고, 각 모델에서 표준화나 정규화를 자동으로 진행하는 경우가 있습니다. 

  • 주성분 분석이란?
  • PCA?
  • 데이터분석에서 사용되는 부분
  • R에서 PCA를 한 뒤 결과해석

(1) 주성분 분석이란?

 

주로 주성분분석은 '차원축소'의 형태로 많이 사용된다.

 

 

여러 피쳐로 구성된 데이터셋의 피쳐의 차원을 축소하여 

상대적으로 기존의 데이터셋보다 예측력을 높이고(모델의 성능을 강화), 상관성이 발생할 문제(선형회귀문제에서는 변수들간의 상관관계가 높으면 다중공선성 문제를 불러올 수 있음)를 줄이는 방법을 차원축소라고 한다.

 

차원축소법에는 PCA, LDA, SVD등 여러가지 방법이 있지만

PCA차원축소법을 가장 많이 사용한다.

 

피처선택 (Feature Selection) VS 피처추출 (Feature Extraction)

 

  • 피처선택: 피처의 종속성이 강한 피처들을 아예 제거하여 데이터의 성질을 가장 잘 설명해주는 피처들만 남김
  • 피처추출: 기존피처를 저차원의 중요피처로 압축

 

(2) PCA (Principal Component Analysis) ~ 차원추출법


=> 가장 높은 분산을 가지는 (변수 데이터들이 잘 흩어진다는 뜻=> 하나의 선택된component가 여러개의 variable을  잘 설명한다는 뜻)

 

선형결합으로 이루어진 데이터의 축을 찾아서 고정하고

다른 수직인 축들을 나눠 차원을 축소하여 주성분을 만드는 방법 (선형결합으로 연속형 변수만 사용)

 

쉽게 말하자면, 데이터 프레임의 총 변동을 대부분 설명해줄 수 있는 변수의 선형조합을 찾아내는 것

 


다른 말로 하자면

여러 양적변수들 사이에서 분산-공분산 관계를 이용해서 변수를 선형결합시키는 주성분 component를 찾는다. 

그 후, 대략 2-3개의 주성분으로 전체 variance를 설명하고자 하는 다변량 분석법이다.

 

 

**만약 연속형변수중 중요하게 여기는 변수가 있다면 굳이 차원축소를 해주지 않아도 되지만,

기계의 역할을 좀 더 강조하고 싶다면, 혹은  correlation이 수치형변수끼리 너무 강하게 나온다면 시도해볼 법 하다.

그렇지만, 모두가 상관이 없는데 PCA를 한다면 굳이 각자 설명력을 가진 변수를 뭉뚱그리는 꼴이 된다.

 

(3) 주성분분석의 응용

 

R에서는 주로 prcomp 함수를 사용한다. 

 

1. 회귀분석에서 설명변수의 개수를 결정

2. 인자분석에서 전초작업

3. 군집분석에서 전초작업

 

 

(4) R에서 PCA수행하기

 

data는 양적변수들의 data.frame이다. 

각 변수들 사이에 correlation을 시각화하여 보고싶다면, 1~2줄을 수행하면된다.

 

cor_data = cor(data)
corrplot(cor_data,method='color')
pca = prcomp(cor_data, center=T, scale. = T)

summary(pca)

 

그 뒤, pca를 진행하기 위해 correlation된 데이터 객체를 pca에 넣어주고 summary를 보면

 

변수 개수만큼 PC가 생성되고 각 PC(Principal Component) 전체 프레임에 얼마나 영향을 주는지 수치로 볼 수 있다.

 

 

 

1. Standard deviation : 표준편차

2. Proportion of Variance: 분산의 비율, 각 PC가 전체 프레임에서 얼마나 영향력이 있는지 수치로 나타낸 것

3. Cumulative Proportion: 누적 비율, PC를 하나씩 포함해가면서 프레임을 설명하려 할때, 몇 %정도 전체 프레임을 설명할 수 있는지 나타냄. 예를 들면, PC10의 경우 0.96값으로 PC10까지 96%의 설명력을 가진다는 것을 의미한다.

 

 

 

 

 

 

+ Recent posts