카테고리 없음

scikit-learn 분석 모델 특징

세계의문 2021. 9. 26. 18:26
728x90
SMALL

분석 모델 특징

scikit-learn - Numpy 배열을 이용한 특징 행렬(X), 대상 벡터(y)의 생성
- Pandas DataFrame을 이용한 특징 행렬(X), 대상 벡터(y)의 생성
- Bunch 객체를 이용한 특징 행렬(X), 대상 벡터(y)의 생성 
- scikit-learn은 데이터를 담고 있는 2차원 구조의 특징 행렬(X)와 레이블을 담고 있는
  1차원 구조의 대상 벡터(y)를 사용하도록 설계되어 있습니다.
특징 공학 - 머신러닝의 특징 행렬을 구축하는데 사용할 수 있는 수치형 데이터로 변환하는 것
- 범주형 특징을 수치형 특징으로 변환
- 복잡도를 증가시키기 위한 유도 특징
- 누락 데이터 대체
특징 행렬
(Feature Matrix)


- 표본(sample)은 데이터셋이 설명하는 개별 객체를 나타냄
- 특징(feature)은 각 표본을 연속적인 수치값, 부울값, 이산값으로 표현하는 개별 관측치를 의미
- 표본 : 행렬의 행
- 행의 개수 : n_samples 
- 특징(feature) : 행렬의 열
- 열의 개수 : n_features
- 관례적으로 특징행렬은 변수 X에 저장
- [n_samples, n_features] 형태의 2차원 배열 구조를 사용
  (주로 Numpy 배열, Pandas DataFrame, SciPy 희소행렬을 사용)
대상 벡터
(Target Vector)


- 연속적인 수치값, 이산 클래스/레이블을 가짐
- 길이 : n_samples 
- 관례적으로 대상벡터는 변수 y에 저장
- 1차원 배열 구조를 사용 (주로 Numpy 배열, Pandas Series를 사용)
- 특징 행렬로부터 예측하고자 하는 값의 벡터
- 종속 변수, 출력 변수, 결과 변수, 반응 변수 라고도 함 
교차 검증 - 교차검증 : 데이터를 학습용과 테스트용으로 나눔
- 모델의 테스트 성능 기록
- 모델의 최종 성능은 매 단계의 테스트 성능을 평균 계산

- 교차 검증은 모델의 변동성을 줄여주며 오버피팅과 같은 문제를 막아줌
  (모든 데이터를 학습용 데이터로 사용할 수 있음)
혼동행렬
(confusiton matrix)
- 정확도(accuracy) : 전체 샘플ㄹ에서 정확하게 예측한 샘플 수의 비율
   : TP+TN / (TP+TN+FP+FN)

- 정밀도(precision) : 'Positive 클래스로 예측한' 샘플에서 실제 Positive 클래스에 속하는 
  샘플수의 비율
   : TP / (TP+FP)

- 재현율(recall, TPR) : '실제 Positive 클래스에 속한' 샘플에서 Positive 클래스에 속한다고 
  예측한 샘플 수의 비율 (참 긍정률 : True Positive rate, 민감도(Sensitivity))
   : TP / (TP+FN)

- 위양성률(fallout, FPR) : '실제 Positive 클래스에 속하지 않는' 샘플에서 Positive 클래스에 
  속하다고 예측한 샘플 수의 비율 (거짓 긍정률 : False Positive Rate)
   : FP / (FP+TN)

k 폴드 교차 검증

- 데이터를 무작위로 k개의 동일한 크기인 폴드로 나눔(보통 k값으로 3, 5, 10을 많이 사용)
- 각 시행 단계에서 특정 폴드를 테스트용, 나머지는 학습용으로 사용
- 각 폴드를 테스트 세트로 한 번씩 사용하고 이 과정을 k번 반복 시행
- 최종적으로 모델 성능의 평균을 계산
단순 선형 회귀(OLS)
개념


- 최소 제곱법 : OLS(Ordinary Least Sqaures), LLS(Linear Least Squares)
- 회귀의 목표는 연속형(수치형) 반응 변수의 값을 예측하는 것
- 단순 선형 회귀란 설명 변수인 단일 특징과 단일 반응 변수 간에 선형 관계가 있다고 가정하고 
  초평면이라고 하는 선형 평면을 이용해 모델링한 것


로지스틱 회귀

- 베르누이 분포 : 긍정 확률(양성확률) P와 부정 확률(음성확률) 1-P를 갖는 랜덤 변수의 확률 
  분포(자연계의 일반적인 정규분포와 대칭이 되는 구조의 분포 (예: 동전 던지기 등)
- 베르누이 분포를 따르는 반응 변수의 확률 범위는 [0,1]
- 선형 회귀는 특징 값의 일정한 변화로 반응 변수에도 일정한 변화가 일어난다는 가정을 하므로, 
  반응 변수가 확률을 나타낼 경우 가정이 유효하지 않음
- 일반화 선형 모델은 연결 함수를 사용해 특징의 선형 조합을 반응 변수와 연결 짓는 방법을 통해 
  선형 회귀의 가정을 없앰
- 특징의 선형 조합을 정규 분포를 따르지 않는 반응 변수와 연계하려면 연결함수가 필요

# 로지스틱 회귀와 분류
- 로지스틱 회귀의 반응 변수의 값 = 긍정(양성) 클래스의 확률
- 반응 변수의 값 >= 임계치(0~1값 중 0.5) : 긍정(양성) 클래스를 예측
- 반응 변수는 '로지스틱 함수'를 사용해 특징의 선형 조합 함수로 모델링 됨(로지스틱 함수 : 
  테스트 인스턴스를 사용해서 값이 0~1 사이의 값이 나오게 계산해 주는 것)
- 로지스틱 회귀는 이진 분류(예: 스팸 vs 햄, 양성종양 vs 악성종양, 흡연 vs 비흡연)

규제 선형회귀 모델

- 과분산 모델에 대해 모델을 규제하면 오버피팅을 감소시킬 수 있음 (차원수가 높아지는 것을 
  규제)
- 규제란 오버피팅된 파라미터 값에 대해 페널티를 부여하는 것
- 페널티를 추가하게 되면 규제가 없는 회귀 모델보다 계수의 절대값이 작아지게 되는 원리를 
  이용해 오퍼피팅을 방지할 수 있음
- 페널티를 가한다는 것은 편향을 높인다는 것을 의미하며, 규제가 없는 모델보다 훈련 
  데이터와의 적합도가 떨어지지만 전체적인 결과는 좋아짐
- 오버피팅된 모델은 지나친 노이즈를 반영할 수 있으므로 모델을 단순화하여 좀 더 일반화된 
  모델로 만들 필요가 있음
- 선형 회귀 모델의 성능을 측정하는 평가 지표로 RMSE를 사용할 수 있다.
- 과분산 선형 회귀 모델에 대해 규제를 적용하면 오버피팅 문제를 감소시킬 수 있다.
- 리지 회귀 모델은 규제가 있는 선형 회귀 모델로 가중치 벡터의 제곱항을 합한 L2노름을 2로 
  나눈 값을 적용한다.
- 라쏘 회귀 모델은 규제가 있는 선형 회귀 모델로 가중치 벡터의 절대값의 합인 L1 노름을 
  적용한다.

리지 회귀 모델 - 리지 회귀는 규제가 추가된 선형 회귀 모델(규제항이 비용함수에 추가)
- 모델의 가중치가 가능한 작게 유지되도록 함
- a(모델 규제를 조절) =0 이면 선형회귀와 동일, a가 아주 크면 모든 가중치가 0에 가까워짐
라쏘 회귀 모델 - 덜 중요한 특징의 가중치(0)를 완전히 제거하려고 함
- 차수가 높은 다항 특징의 가중치를 0으로 만듦
- 라쏘는 가중치를 0으로 만들어 전체적으로 오버피팅이 줄어들어 모델의 복잡도가 낮아짐
의사결정트리 구현을 위한 CART 알고리즘

- CART는 scikit-Learn의 디시젼 트리, 램덤 포레스트가 사용하는 내부 알고리즘
- Classification and Regression Tree
- 노드를 왼쪽, 오른쪽 자식 노드로 분할 확장하면서 트리를 생성함
- 분할 단계에서 가장 중요한 특징과 해당 값의 모든 가능한 조합을 측정 함수를 이용해 
  탐욕적으로 찾음
- 범주형 특징의 경우 해당 특징 값을 가진 샘플들을 오른쪽 자신 노드에 할당함
- 수치형 특징의 경우 해당 값보다 큰 값을 가진 샘플들을 오른쪽 자신 노드에 할당함

Decision Tree

- 분류, 회귀 작업에 사용되며, 복잡한 데이터 세트도 학습할 수 있음
- 나이브 베이즈와 같이 범주형 데이터를 잘 다룰 수 있음
- 랜덤 포레스트의 기본 구성 요소
- ID3, C4.5, CART, CHAID와 같은 알고리즘이 있음
- 데이터를 분할하기 위해 가장 중요한 특징이 무엇인지 선택하는 로컬 최적화 방법을 계속 적용하는 탐욕적 방식으로 트리를 생성
- 의사결정 트리는 학습 샘플을 서브셋을 분할하면서 생성되며, 분할의 과정은 각 서브셋에 대해 재귀 형태로 진행됨
- 각 노드에서의 분할은 특징 값을 기반으로 조건 검사를 통해 진행되며, 서브 셋이 동일한 클래스 레이블을 가지는 경우나 분할을 통한 클래스 분류가 더 이상 의미가 없을 경우 분할 작업을 마침


- Scikit-Learn의 의사결정 트리 분류기는 CART 알고리즘의 분류에 대한 비용함수에서 지니 불순도를 기본적으로 사용
- Scikit-Learn의 트리 기반 알고리즘은 수치형 특징을 입력 값으로 하기 때문에 범주형 특징은 원핫인코딩을 통해 이진 특징으로 변환
- 혼동행렬은 실제 관측값을 얼마나 정확하게 예측했는지를 보여주는 행렬로 분류 모델의 성능 측정을 위한 평가지표 계산의 기반이 됨
- 분류 모델의 평가지표로 정확도, 정밀도, 재현율, F1 점수, 특이성 , ROC 커브의 AUC(곡선하 면적) 등을 사용
- 랜덤 포레스트는 특징 기반 배깅 방법을 적용한 의사결정 트리의 앙상블로 의사결정 트리모델의 고분산을 줄이며, 단일 트리보다 훨씬 더 좋은 성능을 제공
- Scikit-Learn의 랜덤 포레스트 특징 중요도는 개별 트리의 특징 중요도를 모두 합한 후 트리의 수로 나눈 것으로, 중요도의 합이 1이 되도록 결과값을 정규화함



## Decision Tree의 가장 큰 문제점
- 훈련데이터에 대한 고분산성

앙상블 학습과 배깅

- 부트스트랩 : Bootstrap, 중복을 허용하는 리샘플링
- 배깅(Bagging) : 'B'ootstrap 'agg'regating의 약자
- 훈련 데이터에서 부트스트래핑한 샘플에 대해 모든 변수를 선택해 다수의 의사경정 트리를 구성
- 개별 예측기의 편향은 높지만, 수집함수를 통과한 후 앙상블의 결과는 원본 데이터 셋으로 하나의 예측기를 훈련시킬 때보다 편향은 비슷하지만 대체로 분산은 줄어듦


랜덤 포레스트

(효과가 좋은 결과를 많이 내고, 최근 많이 사용함)
- 랜덤 포레스트는 특징 기반 배깅 방법을 적용한 의사결정 트리의 앙상블
- 트리 배깅은 의사결정 트리 모델의 단점 중 하나인 고분산을 줄여주며 이를 통해 단일 트리보다 훨씬 더 좋은 성능을 제공
- 개별 트리간의 상관관계 문제를 피하기 위해 부트스트래핑 과정에서 훈련 데이터로부터 전체 p개의 변수 중 무작위 m개의 변수만 선택
- 랜덤 포레스트의 무작위성 주입은 트리를 보다 다양하게 만들고, 편향을 손해 보는 대신 분산을 낮추어 훌륭한 모델을 만듦

# 랜덤 포레스트의 성능 개선을 위한 주요 파라미터
- max_feature : 최적의 분할 지점을 찾기 위해 검토할 특징의 개수, 일반적으로 n차원의 데이터 세트의 root(n)의 반올림 값을 설정
- n_estimator : 트리의 개수가 많을 수록 성능이 더 좋지만 계산 시간이 많이 걸림. 일반적으로 100, 200, 500을 설정
- min_sample_split : 노드에서 추가 분할을 위해 필요한 샘플의 최소 개수. 숫자가 너무 작으면 오버피팅, 너무 크면 언더피팅이 일어날 수 있음. 일반적으로 10, 30, 50으로 시작

그리드 서치(GridSearch)를 이용한 로지스틱 회귀 모델 학습

- LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True, intercept_scaling=1, l1_ratio=None, max_iter=100, multi_class='auto', n_jobs=None, penalty='l2', random_state=None, solver='lbfgs', tol=0.0001, verbose=0, warm_start=False)

- C : 오버피팅을 방지, 값이 커지면 규제가 느슨해지고, 0에 가까워지면 규제가 강해지는 경향
- l1 규제 : 0이 됨
- l2 가중치 페널티 : 0에 가깝게
K-최근접 이웃(KNN)
알고리즘


- 분류나 회귀에 사용할 수 있는 알고리즘으로 단순해 보이지만 강력하고 유용한 기법
- 비매개변수 머신러닝 모델
- 훈련 단계에서 학습을 하지 않기 때문에 '게이른 학습'이라 부름
- 테스트/검증 단계에서 테스트 관측값과 가장 근접한 훈련 관측값을 비교
- 거리에만 의존하므로 차원의 저주에 따라 예측에 필요한 특징의 개수가 늘어나면 성능이 크게 저하됨
- k개의 가장 가까운 훈련 인스턴스를 골라 가장 많은 레이블을 분류로 선택
- 특징의 표준화된 크기 조절(스케일링)이 필요
- k-최근접 이웃 분류기의 성능측정은 혼동행렬을 이용해 정확도, AUC와 같은 다양한 평가지표를 활용할 수 있다.
- 그리드 서치를 이용해 n_neightbors와 같은 k-최근접 이웃 하이퍼파라미터의 최적 값을 찾아낼 수 있다.

https://www.youtube.com/watch?v=8gd0QeQ9ilQ&list=PLwvr-xPygMX9TaQFW3C1UGEuD0zJF7pCk&index=64&ab_channel=K-ICT%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%84%BC%ED%84%B0

   
나이브 베이즈

- 확률 기반 분류기로 특징이 상호 독립적이라는 가정 하에 클래스 전체의 확률 분포 대비 특정 클래스에 속할 확률을 베이즈 정리를 기반으로 계산


- 데이터가 각 클래스에 속할 특징 확률을 계산
- 나이브(Naive)란 예측한 특징이 상호 독립적이라는 가정 하에 확률 계산을 단순화함
- 베이즈(Bayes)란 입력 특징이 클래스 전체의 확률 분포 대비 특정 클래스에 속할 확률을 베이즈 정리를 기반으로 계산


> 용어 개념
- 사전 확률 : 샘플 데이터가 k에 속하는 사건의 확률 P(yk)는 관측값의 특징에 대한 지식없이 클래스가 어떻게 분포되어 있는지 나타냄
- 사전 확률은 사전에 결정되어 있거나, 학습 샘플 데이터를 이용해 학습시킬 수도 있음
- 사후 확률 : P(yk\x)는 관측값에 대해 외부 지식을 이용한 사후 확률
- 유사가능도 : P(x\yk)는 클래스 yk에 속한 샘플 데이터가 주어졌을 때 n개의 특징에 대한 결합 분포를 나타냄
- 라플라스 스무딩(Laplace smoothing) : 특징의 출현 횟수가 초기값을 1부터 시작해 0을 곱해 발생하는 문제를 해결(발생하지 않은 특징의 출현 빈도 초기값을 1로 설정)

F1-score의
기하학적 의미
- 기하학적으로 봤을때 단순 평균이라기보다는 작은 길이 쪽으로 치우치게된, 그러면서 작은 길이 보다도 작은 평균이 도출됨
- 이렇게 조화평균을 이용하면 산술평균을 이용하는 것보다, 큰 비중이 끼치는 bias가 줄어든다고 볼 수 있음
fit_transform
(X_train)

transform
(X_test)
- train data에 대해 학습은 적합(fit)이라는 단계를 거친 후 transfrom을 진행
- test data는 적합시킬 필요없이 바로 transform
ROC
(Receiver Operating Characteristics)
- 참 긍정률(TPR)과 거짓 부정률(FPR) 사이를 표현하기 위해 사용
- 예측된 확률로부터 여러 클래스로 분류를 수행하는 데 활용
ANOVA 분산 분석



Analysis of Variance
- 모집단이 셋 이상인 경우, 이들의 평균이 서로 동일한지 테스트함
- 귀무가설 : 모든 모집단의 평균에 차이가 없다.
- 대립가설 : 적어도 하나의 모집단의 평균에 차이가 있다.


>> t-검정 : 두 개 집단 평균의 차이를 구할 때 


* 10명의 환자를 대상으로 A,B,C 세 가지 수면제 약효(수면시간)를 각각 테스트할 경우, 유의수준 0.05에서 A,B,C 수면제의 평균 수면시간은 동일한가?

 

728x90
LIST