본문 바로가기

머신러닝, 딥러닝

(43)
clf = RandomForestClassifier() 같이 변수를 설정해주는 이유 clf = RandomForestClassifier(max_depth=2, random_state=0) clf.fit(X, y) 와 같이 xgb 라는 변수에 XGBRegressor() 와 같은 모델을 할당해주는 이유는 1) 코드를 읽기 쉽게 하고 2) 학습된 모델을 변수에 할당해 다른 데이터도 예측할 수 있도록 하고, 3) 만들어진 모델을 분석할 수 있게 하기 위해서이다. predict(X), predict_proba(X), score(X, y) 등의 메소드를 clf.predict(X) 로 적용할 수 있다. y_pred = clf.predict(X_test) RandomForestClassifier().fit(X, y).predict(X_test) 사실 위 코드를 이렇게 한 줄로 쓸 수도 있지만 바람직하..
모델의 score - accuracy, f1, rmse, roc_auc, 뭐가 디폴트지? 저번 주부터 트리 모델, 앙상블 기반 모델을 배우면서 모델마다 사용하는 score가 달라 혼란스러웠다. 먼저 DecisionTree, RandomForest 모델의 기본 score는 테스트 셋과 타깃 레이블의 mean accuracy이다. 분류 모델이라면, from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import classification_report, confusion_matrix classifier = DecisionTreeClassifier() classifier.fit(X_train, y_train) y_pred = classifier.predict(X_test) print(confusion_matrix(y_test, ..
Permutation Importances 트리 모델에서 feature_importances_를 사용하면 cardinality가 높은 특성은 분기에 이용될 확률이 높아 중요도가 높게 나오는데, 따라서 모델이 과적합될 위험이 있다. permutation(순열, 치환)은 특성들의 분포를 임의로 흐트러트린 후, 기존의 결과와 비교해서 해당 특성이 결과값에 얼마만큼의 영향을 미치는지(중요도)를 보여준다. from sklearn.pipeline import Pipeline # encoder, imputer를 preprocessing으로 묶었습니다. 후에 eli5 permutation 계산에 사용합니다 pipe = Pipeline([ ('preprocessing', make_pipeline(OrdinalEncoder(), SimpleImputer())), ..
multi-label 분류 문제에서 f1 score는 못 사용하는 걸까? + 주의 : 글 내용에 오류가 있을 수 있습니다. 댓글을 참조해주세요. 다중 클래스 분류 문제에서 모델의 평가지표로 f1 을 넣었더니 제대로 작동하지 않았다. accuracy를 넣으니 제대로 작동되었다. 왜 그럴까 했었는데, 클래스를 positive, negative로 이진 분류해야 precision, recall, f1을 구할 수 있으니 다중 클래스 분류에서는 f1 스코어를 사용 못 하는 걸까 싶었다. 하지만 찾아보니 사용할 수 있다. 방법1 : metrics.classification_report를 사용 from sklearn import metrics # Print the confusion matrix print(metrics.confusion_matrix(y_true, y_pred)) # Prin..
n_jobs = -1 ? 2 ? 4? 뭘 넣지? 머신러닝 모델을 만들면서 CPU 코어가 많다면 모델을 만드는 데 병렬 연산을 할 수 있다. n_jobs 매개 변수를 사용하여 사용할 코어 수를 지정할 수 있다. 사용하는 CPU 코어 개수에 비례해서 속도도 빨라진다. 내 PC의 코어 개수는 https://support.microsoft.com/ko-kr/windows/%ED%94%84%EB%A1%9C%EC%84%B8%EC%84%9C%EC%9D%98-%EC%BD%94%EC%96%B4-%EC%88%98-%ED%99%95%EC%9D%B8-3126ef99-0247-33b3-81fc-065e9fb0c35b 프로세서의 코어 수 확인 support.microsoft.com 에서 확인할 수 있는데, n_jobs=-1로 지정하면 컴퓨터의 모든 코어를 사용한다. n_job..
분류Classification와 회귀Regression의 차이 파이썬 라이브러리를 활용한 머신러닝을 보고 정리한 내용입니다. 정답은 아래에...! 머신러닝 프로세스에서 가장 중요한 과정은 사용할 데이터를 이해하고 그 데이터가 해결해야 할 문제와 어떤 관련이 있는지를 이해하는 일입니다. 아무 알고리즘이나 선택해서 데이터를 입력해보는 것은 좋은 방법이 아닙니다. 데이터셋으로 무엇을 하는 것인지 머신러닝 모델을 만들기 전에 반드시 이해해야 합니다. 넓은 시각으로 보면, 머신러닝 알고리즘이나 방법론은 특정 문제를 푸는 전체 과정의 일부일 뿐입니다. 항상 머릿속에 전체 시스템에 대한 큰 그림을 담고 있어야 합니다. 많은 사람이 복잡한 머신러닝 솔루션을 구축하느라 오랜 시간을 투자하고 나서야 문제를 풀기에 적절한 방법이 아니었음을 깨닫습니다. scikit-learn에서 데이터..
시계열 데이터에서의 invalid type promotion error from sklearn.model_selection import TimeSeriesSplit tscv = TimeSeriesSplit(n_splits=3) # 디폴트가 5개로 나눔 for train_index, test_index in tscv.split(train): print("TRAIN:", train_index, "Validation", test_index) 시계열 데이터를 TimeSeriesSplit으로 나누고, pipeline을 통해 모델을 만들고, 학습을 시키는데 pipe = make_pipeline( OrdinalEncoder(), SimpleImputer(), RandomForestClassifier( _jobs=-1, oob_score = True) ) dists = {'randomfo..
Cross Validation vs Train/Validation/Train Set 나누기 CV를 할 거면 Train 데이터를 검증용 세트로 나눠줄 필요가 없다. Train 데이터를 k개의 집단으로 나눠, 1개와 k-1개의 집단에 대해 교차검증을 실시하기 때문이다. (그리고 k번에 대해 나온 스코어를 평균 낸다.) 이를 K-Fold Cross Validation이라고 하는데, random_state를 쓰지 않아도 스코어가 고정되는 장점이 있다. K번에 대한 평균이기 때문이다. K의 수는 자의적인데, 모든 샘플을 블록화 하여 모든 샘플을 검증하는 게 Leave One Out Cross Validation이다. - 임의로 train / validation / test set을 나누는 것을 Hold-Out CV 방식이라고 한다. 데이터셋의 크기가 충분히 클 때 사용한다. 데이터셋의 크기가 충분히 크..