본문 바로가기

머신러닝, 딥러닝

(43)
threshold, precision, recall의 의미 머신러닝에서 어떤 모델이 더 예측을 잘하는가 판단하기 위해 여러 평가지표를 사용한다. Accuracy(정확도)는 전체 범주를 모두 바르게 맞춘 경우 / 전체 수 = tp+tn/total f1 점수는 precision과 recall의 조화 평균 = 2 * precision * recall/(precision+recall) Precision(정밀도)는 positive로 예측한 경우 중 올바르게 positive를 맞춘 비율 = tp/tp+fp Recall(재현율, Sensitivity)는 실제 positive인 것 중 올바르게 positive를 맞춘 비율 = tp/tp+fn Accuracy : 가장 유용하게, 많이 쓰이는 지표로, data가 balance 할 때 효과적이다. (1이랑 0이 반반 분포하는 데이터..
트리 모델에서 Ordinal 대신 Nominal 인코딩을 해야 하나? A : 트리 모델에서는 Nominal 특성을 가진 범주에도 Ordinal 인코딩을 해도 된다. 트리 모델에서는 지니 불순도를 낮추는 특성이 중요하게 여겨져, 트리 모델의 상위 노드에서 분할이 일어난다. 만약 트리 모델에서 원핫 인코딩을 하면 cardinality가 높은 범주형 특성들이 상위 특성에서 선택될 가능성이 줄어든다. 미국의 50개 주를 담은 States라는 feature가 있으면, 원핫 인코딩 시 State_NY, State_WT... 등 50개의 feature로 쪼개지기 때문이다. 그래서 State_NY인가? 하는 노드에는 이진형인 0,1 만의 답이 있고, 그러한 feature가 50개다보니 States를 원핫 인코딩을 하고 트리 모델에 넣을 경우 다음과 같은 분포를 보일 수밖에 없다. 트리가..
랜덤포레스트 모델에서 Select K Best를 사용해야 할까? 랜덤 포레스트 같은 분류 모델에서는 타깃 데이터를 예측할 때 다수결로 가장 많은 샘플들이 예측한 결과를 선택한다. 최빈값인 median을 사용하는 셈이다. 랜덤 포레스트에서는 기본 모델의 트리를 만들 때 무작위로 선택한 특성 세트를 사용한다. 의사결정 나무(Decision tree)에서는 데이터가 가진 모든 특성을 고려하여 최적의 특성을 고르고 분할하지만, 랜덤 포레스트에서는 전체 특성이 n 개라면, 일반적으로 log 2 n 개의 특성을 선택하고, 그 log 2 n 개에서 최적의 특성을 찾아내어 분할한다. 따라서 Select K Best를 사용할 필요가 없다. 하지만 찾아보니, 트리 기반의 평가 모델에서는 SelectFromModel을 함께 사용하면 불순도를 낮추는 데 중요하게 기여하는 특성을 계산하고,..
Decision Tree 모델에서의 feature_importances_의 의미 특성 중요도는 트리를 만드는 결정에 각 특성이 얼마나 중요한지를 보여준다. 0과 1 사이의 숫자로, 각 특성에 대해 0은 전혀 사용되지 않았다는 뜻, 1은 완벽하게 타깃 클래스를 예측한다는 뜻이다. from sklearn.tree import DecisionTreeClassifier from sklearn.pipeline import make_pipeline pipe = make_pipeline( SimpleImputer(strategy='mean'), #defalut값이 mean DecisionTreeClassifier(min_samples_leaf=10, #말단 노트에 존재하는 샘플 수 정함 max_depth=5, #The maximum depth of the tree min_samples_split..
랜덤포레스트 모델의 결측값 대체 방법 다양한 설문조사 데이터를 통한 응답자의 백신 접종 여부를 예측하는 데이터셋의 처리를 배우면서, 설문지 응답의 20-30% 정도를 차지하는 결측치를 잘 대체할 수 있는 방법이 있을까 찾아봤다. 중앙값 대체(median imputation) 결측값을 해당 변수들의 중위수로 대체 평균 대체법과 동일한 단점(분포 왜곡) 존재 예측 평균 일치 대체 (Predictive Mean Matching Imputation, PMM) 결측치를 회귀모형에 의해 가장 가까운 관측값에 일치시키는 방법 선형 회귀 분석의 변형된 형태 관측값에 대한 예측값-결측값에 대한 예측값의 차이가 작은 개체들의 자료값으로 결측값을 대체 랜덤 포레스트와 결합할 경우, 가장 민감도 결과가 좋았다. K-Nearest Neighbors Imputati..
Ridge Regression 머신러닝 모델 중 하나로, 데이터로 학습을 해서 타깃을 예측할 때 bias를 높이고 variance는 줄이는 역할을 한다. Ridge Regression을 사용하면 Train데이터를 학습한 결과, 타깃을 좀 덜 맞추더라도 학습 과정에서의 과적합을 줄인다. select k best 역할도 해준다. (가장 영향을 많이 미치는 feature를 골라 보여준다) 어떤 feature가 target에 영향을 많이 주는지 알 수 있음(계수인 coef_가 큰 feature들이다.) 과적합을 줄이는 간단한 방법 중 한 가지는 모델의 복잡도를 줄이는 방법이다. 특성의 갯수를 줄이거나 모델을 단순한 모양으로 만들면, 일반화가 더 잘되는 모델이 된다. RidgeCV (Cross-Validation) Ridge에 교차검증 알고리..
교차검증(Cross Validation) from sklearn.cross_validation import train_test_split Xtrain, Xtest, ytrain, ytest = train_test_split(X_df, y_df, random_state=1) 머신 러닝에서 데이터를 모델 학습용과, 테스트용으로 나누는 이유는 모델의 예측도를 높이기 위해서이다. 모델의 정확도 평가에 테스트 데이터를 사용하면, 모델이 테스트 데이터에도 "적합"하게 된다. 따라서, 모델이 새로운 데이터에 대해 어떻게 수행하는지 평가할 수 있는 기회를 잃게 된다. 이를 "data leakage"라고 한다. 이를 막기 위해 전체 데이터셋을 학습용 데이터(Train set), 검증용 데이터(CV set), 테스트 데이터(Test set) 세 가지 하위 집합으..
일반화(Generalize)란? 머신 러닝 과정에서 일반화란 데이터로 모델을 학습시키고, 추후 새로운 데이터를 모델에 넣었을 때에도 출력에 대한 성능 차이가 나지 않게 하는 것이다. Train 데이터로 모델을 학습시켜 얻은 정확도와 비슷한 값을 가지게 하는 것이 목적이다. 즉, 새로운 데이터도 정확히 예측할 수 있게 된다. 모델을 만들 때는 가능한 한 정확하게 일반화되도록 해야 한다. 데이터를 더 많이 수집할수록, 모델의 과적합(Overfitting)을 피할수록 좋은 모델이 된다.