카테고리 없음
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