기계 학습에서 품질 메트릭은 무엇을 의미합니까? 랭킹 트레이닝

통신 사업자의 클라이언트 유출에 따르면.


필요한 라이브러리를 다운로드하고 데이터를 봅니다.

pd로 pandas 가져오기 matplotlib.pyplot을 matplotlib.pylab에서 plt로 가져오기 rc, sklearn에서 sns로 seaborn을 플롯합니다. ../data/telecom_churn.csv")


df.head(5)

데이터 전처리

# 이진 열을 매핑하고 상태를 더미 코딩합니다. (단순화를 위해 목조 모델에서는 이 작업을 수행하지 않는 것이 좋습니다.) d = ("Yes" : 1, "No" : 0) df["International plan"] = df [" 국제 요금제"].map(d) df["음성 메일 요금제"] = df["음성 메일 요금제"].map(d) df["이탈"] = df["이탈"].astype(" int64" ) le = LabelEncoder() df["상태"] = le.fit_transform(df["상태"]) ohe = OneHotEncoder(sparse=False)coded_state = ohe.fit_transform(df["상태"].values.reshape (- 1, 1)) tmp = pd.DataFrame(encoded_state, columns=["state " + str(i) for i in range(encoded_state.shape)]) df = pd.concat(, axis=1)

정확도, 정밀도 및 재현율

메트릭 자체로 이동하기 전에 분류 오류 측면에서 이러한 메트릭을 설명하기 위해 중요한 개념을 도입해야 합니다. 혼동 행렬(오차 매트릭스).
두 개의 클래스와 각 객체가 클래스 중 하나에 속하는지 예측하는 알고리즘이 있다고 가정하면 분류 오류 행렬은 다음과 같습니다.


트루 포지티브(TP) 가양성(FP)
거짓 부정(FN) 트루 네거티브(TN)

여기서 는 객체에 대한 알고리즘의 응답이고 는 이 ​​객체에 대한 클래스의 실제 레이블입니다.
따라서 분류 오류에는 False Negative(FN)와 False Positive(FP)의 두 가지 유형이 있습니다.


알고리즘 훈련 및 오류 행렬 구성

X = df.drop("Churn", axis=1) y = df["Churn"] # 샘플을 기차와 테스트로 나눕니다. 모든 메트릭은 테스트 데이터 세트 X_train, X_test, y_train, y_test = train_test_split( X, y , stratify=y, test_size=0.33, random_state=42) # 기본 로지스틱 회귀 학습 lr = LogisticRegression(random_state=42) lr.fit(X_train, y_train) # 함수를 사용하여 sklearn 문서에서 오류 행렬을 작성합니다. def plot_confusion_matrix(cm, classes , normalize=False, title="(!LANG:혼합 행렬", cmap=plt.cm.Blues): """ This function prints and plots the confusion matrix. Normalization can be applied by setting `normalize=True`. """ plt.imshow(cm, interpolation="nearest", cmap=cmap) plt.title(title) plt.colorbar() tick_marks = np.arange(len(classes)) plt.xticks(tick_marks, classes, rotation=45) plt.yticks(tick_marks, classes) if normalize: cm = cm.astype("float") / cm.sum(axis=1)[:, np.newaxis] print("Normalized confusion matrix") else: print("Confusion matrix, without normalization") print(cm) thresh = cm.max() / 2. for i, j in itertools.product(range(cm.shape), range(cm.shape)): plt.text(j, i, cm, horizontalalignment="center", color="white" if cm > thresh else "black") plt.tight_layout() plt.ylabel("True label") plt.xlabel("Predicted label") font = {"size" : 15} plt.rc("font", **font) cnf_matrix = confusion_matrix(y_test, lr.predict(X_test)) plt.figure(figsize=(10, 8)) plot_confusion_matrix(cnf_matrix, classes=["Non-churned", "Churned"], title="혼동 행렬") plt.savefig("conf_matrix.png") plt.show()!}


정확성

직관적이고 명백하며 거의 사용되지 않는 측정항목은 정확도(알고리즘의 정답 비율)입니다.



이 메트릭은 클래스가 같지 않은 문제에서는 쓸모가 없으며 예제로 쉽게 보여줍니다.


메일 스팸 필터의 성능을 평가하려고 한다고 가정해 보겠습니다. 100개의 스팸이 아닌 이메일이 있으며 그 중 90개는 분류자가 올바르게 결정했으며(True Negative = 90, False Positive = 10), 그 중 5개는 분류자에 의해 올바르게 결정되었습니다(True Positive = 5, False Negative). = 5).
그런 다음 정확도:



그러나 모든 이메일을 스팸이 아닌 것으로 예측하면 정확도가 더 높아집니다.



동시에 처음에는 스팸 이메일을 식별하기를 원했기 때문에 우리 모델에는 예측력이 전혀 없습니다. 모든 클래스에 대한 공통 메트릭에서 클래스 품질의 개별 지표로의 전환은 이를 극복하는 데 도움이 될 것입니다.

정밀도, 재현율 및 F-측정

각 클래스에 대한 알고리즘의 품질을 평가하기 위해 메트릭 정밀도(정확도)와 재현율(완전성)을 별도로 도입합니다.




정밀도는 분류기에 의해 양성이라고 불리는 객체의 비율로 해석될 수 있고 동시에 실제로는 양수이며, 리콜은 알고리즘이 찾은 양성 클래스의 모든 객체 중 양성 클래스의 객체 비율을 보여줍니다.



이 경우 False Positive 수준이 증가하기 때문에 모든 객체를 하나의 클래스에 쓸 수 없도록 하는 정밀도의 도입입니다. 리콜은 다음을 감지하는 알고리즘의 능력을 보여줍니다. 주어진 수업일반적으로 정밀도는 이 클래스를 다른 클래스와 구별하는 능력입니다.


앞서 언급했듯이 분류 오류에는 두 가지 유형이 있습니다. False Positive와 False Negative입니다. 통계학에서는 첫 번째 유형의 오류를 제1종 오류라고 하고 두 번째 유형을 제2종 오류라고 합니다. 가입자의 유출을 결정하는 작업에서 첫 번째 유형의 오류는 충성도가 높은 가입자가 이탈하는 가입자의 실수가 될 것입니다. 왜냐하면 귀무 가설은 가입자 중 누구도 떠나지 않는다는 것이고 우리는 이 가설을 기각하기 때문입니다. 따라서 두 번째 종류의 오류는 나가는 가입자의 "통과"와 귀무 가설의 잘못된 수락입니다.


정밀도와 재현율은 정확도와 달리 클래스 비율에 의존하지 않으므로 불균형 샘플 조건에 적용할 수 있습니다.
종종 실제 업무에서는 이 두 지표 사이에서 최적의(고객을 위한) 균형을 찾는 것이 작업입니다. 고전적인 예는 고객의 유출을 결정하는 문제입니다.
우리가 찾을 수 없다는 것이 분명합니다 모두흔들리는 고객과 오직그들의. 그러나 고객 유지를 위한 전략과 리소스를 결정한 후에는 정확성 및 회수에 필요한 임계값을 선택할 수 있습니다. 예를 들어, 콜센터 리소스가 제한적이기 때문에 이윤이 높은 고객이나 떠날 가능성이 높은 고객만 유지하는 데 집중할 수 있습니다.


일반적으로 알고리즘의 하이퍼파라미터를 최적화할 때(예: 그리드를 반복하는 경우 GridSearchCV)는 하나의 메트릭을 사용하며 테스트 샘플에서 개선될 것으로 기대합니다.
여러 가지가 있습니다 다양한 방법정밀도와 재현율을 종합적인 품질 기준으로 결합합니다. F-측정(일반적으로 ) - 조화 평균 정밀도 및 재현율:



이 경우 메트릭에서 정확도의 가중치를 결정하고 동시에 조화 평균(2의 인수를 사용하여 정밀도 = 1 및 재현율 = 1의 경우)
F-측정은 1과 동일한 재현율 및 정밀도에서 최대값에 도달하고 인수 중 하나가 0에 가까우면 0에 가깝습니다.
sklearn은 편리한 기능 _metrics.classification 보고서, 각 클래스에 대한 재현율, 정밀도 및 F-측정값과 각 클래스의 인스턴스 수를 반환합니다.


보고서 = classification_report(y_test, lr.predict(X_test), target_names=["비 이탈", "이탈"]) print(보고서)
등급 정도 상기하다 f1 점수 지원하다
휘젓지 않은 0.88 0.97 0.93 941
휘젓다 0.60 0.25 0.35 159
평균/총계 0.84 0.87 0.84 1100

실제로 실제로 널리 사용되는 불균형 클래스가 있는 작업의 경우 클래스 비율을 동일하게 하기 위해 데이터 세트를 인위적으로 수정하는 기술에 의존해야 하는 경우가 많습니다. 그들 중 많은 것들이 있으며 우리는 그것들을 만지지 않을 것입니다. 몇 가지 방법을보고 작업에 적합한 방법을 선택할 수 있습니다.

AUC-ROC 및 AUC-PR

알고리즘의 실제 응답(일반적으로 클래스에 속할 확률, 별도로 SVM 참조)을 이진 레이블로 변환할 때 0이 1이 되는 임계값을 선택해야 합니다. 임계값 0.5는 자연스럽고 가깝지만 예를 들어 앞서 언급한 계급 균형의 부족과 같이 항상 최적인 것은 아닙니다.


특정 임계값에 얽매이지 않고 모델을 전체적으로 평가하는 한 가지 방법은 AUC-ROC(또는 ROC AUC) - 면적( 레아 urve) 오류 곡선 아래( 아르 자형받는 사람 영형조작 특성 곡선). 이 곡선은 TPR(True Positive Rate) 및 FPR(False Positive Rate) 좌표에서 (0.0)에서 (1.1)까지의 선입니다.




우리는 이미 TPR을 알고 있습니다. 이것이 완전성이며 FPR은 알고리즘이 잘못 예측한 네거티브 클래스의 객체 비율을 보여줍니다. 이상적인 경우 분류기가 오류를 일으키지 않을 때(FPR = 0, TPR = 1), 곡선 아래 면적은 1과 같습니다. 그렇지 않으면 분류기가 클래스 확률을 무작위로 출력할 때 분류기가 동일한 양의 TP 및 FP를 출력하므로 AUC-ROC는 0.5가 되는 경향이 있습니다.
그래프의 각 점은 선택한 임계값에 해당합니다. 이 경우 곡선 아래 영역은 알고리즘의 품질을 보여줍니다(많을수록 좋음). 또한 곡선 자체의 기울기도 중요합니다. 우리는 FPR을 최소화하면서 TPR을 최대화하기를 원합니다. 점 (0,1).


ROC 곡선 그리기 코드

sns.set(font_scale=1.5) sns.set_color_codes("음소거된") plt.Figure(figsize=(10, 8)) fpr, tpr, 임계값 = roc_curve(y_test, lr.predict_proba(X_test)[:,1], pos_label=1) lw = 2 plt.plot(fpr, tpr, lw=lw, label="ROC 곡선 ") plt.plot(, ) plt.xlim() plt.ylim() plt.xlabel("거짓 양성률 ") plt.ylabel("진정한 비율") plt.title("ROC 곡선") plt.savefig("ROC.png") plt.show()



AUC-ROC 기준은 불균형 클래스에 저항력이 있으며(스포일러: 아아, 모든 것이 그렇게 단순하지는 않음) 무작위로 선택된 긍정적인 개체가 분류자에 의해 더 높은 순위로 매겨질 확률로 해석될 수 있습니다(긍정적일 확률이 더 높을 것입니다). ) 무작위로 선택한 부정적인 개체보다.


다음 문제를 고려하십시오. 100만 개의 문서에서 100개의 관련 문서를 선택해야 합니다. 우리는 두 가지 알고리즘을 기계 학습했습니다.

  • 알고리즘 1 100개의 문서를 반환하며 그 중 90개는 관련이 있습니다. 이런 식으로,

  • 알고리즘 2 2000개의 문서를 반환하며 그 중 90개는 관련이 있습니다. 이런 식으로,


아마도 우리는 경쟁자에 비해 거짓 긍정을 거의 생성하지 않는 첫 번째 알고리즘을 선택할 것입니다. 그러나 이 두 알고리즘 간의 False Positive Rate의 차이는 극도로작은 - 단 0.0019. 이것은 AUC-ROC가 True Negative에 대한 False Positive의 비율을 측정하고 두 번째(더 큰) 클래스가 우리에게 그다지 중요하지 않은 작업에서 알고리즘을 비교할 때 완전히 적절한 그림을 제공하지 못할 수 있다는 사실의 결과입니다. .


상황을 수정하기 위해 완전성과 정확성으로 돌아가 보겠습니다.

  • 알고리즘 1

  • 알고리즘 2


두 알고리즘 사이에는 이미 상당한 차이가 있습니다. 정확도는 0.855입니다!


정밀도와 재현율은 곡선을 그리는 데도 사용되며 AUC-ROC와 유사하게 그 아래 영역을 찾습니다.



여기서 작은 데이터 세트에서 PR 곡선 아래 영역은 사다리꼴 방법을 사용하여 계산되기 때문에 너무 낙관적일 수 있지만 일반적으로 이러한 작업에는 충분한 데이터가 있습니다. AUC-ROC와 AUC-PR의 관계에 대한 자세한 내용은 여기를 참조하십시오.

물류 손실

로지스틱 손실 함수는 다음과 같이 정의됩니다.



여기서 는 i번째 객체에 대한 알고리즘 응답이고 는 i번째 객체에 대한 실제 클래스 레이블이며 는 샘플 크기입니다.


로지스틱 손실 함수의 수학적 해석에 대한 자세한 내용은 선형 모델에 대한 게시물에서 이미 작성되었습니다.
이 메트릭은 비즈니스 요구 사항에 자주 나타나지 않지만 종종 kaggle 작업에 나타납니다.
직관적으로, logloss를 최소화하는 것은 잘못된 예측에 페널티를 부여하여 정확도를 최대화하는 문제로 생각할 수 있습니다. 그러나 logloss는 오답에 대한 분류자의 확신에 심각한 불이익을 준다는 점에 유의해야 합니다.


다음 예를 고려하십시오.


def logloss_crutch(y_true, y_pred, eps=1e-15): return - (y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)) print("분류가 불확실한 로그 손실 %f " % logloss_crutch(1, 0.5)) >> 불확실한 분류가 있는 로그 손실 0.693147 print("자신감 있는 분류 및 정답이 있는 로그 손실 %f" % logloss_crutch(1, 0.9)) >> 자신 있는 분류 및 정답이 있는 로그 손실 0.105361 print(" 확실한 분류와 오답을 위한 Logloss %f" % logloss_crutch(1, 0.1)) >> 확실한 분류와 오답을 위한 Logloss 2.302585

오답과 자신감 있는 분류로 logloss가 얼마나 크게 증가했는지 확인하십시오!
따라서 한 개체의 오류는 표본의 전체 오류를 크게 악화시킬 수 있습니다. 이러한 개체는 종종 별도로 필터링하거나 고려하기 위해 기억해야 하는 이상값입니다.
로그 손실 그래프를 그리면 모든 것이 제자리에 들어갑니다.



ground truth = 1에 대한 알고리즘의 답이 0에 가까울수록 오류 값이 높아지고 곡선이 가파르게 성장함을 알 수 있습니다.

요약:

  • 다중 클래스 분류의 경우 각 클래스의 메트릭을 주의 깊게 모니터링하고 솔루션의 논리를 따라야 합니다. 작업, 측정항목을 최적화하는 것보다
  • 동일하지 않은 클래스의 경우, 분류의 품질을 올바르게 반영할 메트릭과 훈련을 위한 클래스의 균형을 선택하는 것이 필요합니다.
  • 기사를 준비하는 데 도움을 준 마드로라도.

헤이 하브르!

작업에서 기계 학습메트릭은 모델의 품질을 평가하고 다양한 알고리즘을 비교하는 데 사용되며, 이러한 모델의 선택 및 분석은 데이터 사탄주의자의 작업에서 없어서는 안될 부분입니다.

이 기사에서는 분류 문제의 몇 가지 품질 기준을 살펴보고 메트릭을 선택할 때 무엇이 ​​중요하고 무엇이 잘못될 수 있는지 논의할 것입니다.

분류 문제의 메트릭

시연용 유용한 기능 스켈런메트릭을 시각적으로 표현하기 위해 과정의 첫 번째 기사에서 만난 통신 사업자의 고객 이탈 데이터 세트를 사용합니다.

필요한 라이브러리를 다운로드하고 데이터를 봅니다.

G 팬더를 pd로 가져오기 matplotlib.pyplot을 matplotlib.pylab 가져오기 rc에서 plt로 가져오기 seaborn을 sklearn.preprocessing에서 sns로 가져오기 LabelEncoder, OneHotEncoder에서 sklearn.model_selection 가져오기 cross_val_score에서 sklearn.linear_model 가져오기 로지스틱Regression에서 RandomForest 가져오기 sklearn 가져오기 sklearn.metrics에서 가져오기 Precision_recall_curve, sklearn.model_selection에서 분류_리포트 가져오기 train_test_split df = pd.read_csv("../../data/telecom_churn.csv")

Df.head(5)

데이터 전처리

# 이진 열을 매핑하고 상태를 더미 코딩합니다. (단순화를 위해 목조 모델에서는 이 작업을 수행하지 않는 것이 좋습니다.) d = ("Yes" : 1, "No" : 0) df["International plan"] = df [" 국제 요금제"].map(d) df["음성 메일 요금제"] = df["음성 메일 요금제"].map(d) df["이탈"] = df["이탈"].astype(" int64" ) le = LabelEncoder() df["상태"] = le.fit_transform(df["상태"]) ohe = OneHotEncoder(sparse=False) encode_state = ohe.fit_transform(df["상태"].values.reshape (- 1, 1)) tmp = pd.DataFrame(encoded_state, columns=["state " + str(i) for i in range(encoded_state.shape)]) df = pd.concat(, axis=1)

정확도, 정밀도 및 재현율

메트릭 자체로 이동하기 전에 분류 오류 측면에서 이러한 메트릭을 설명하기 위해 중요한 개념을 도입해야 합니다. 혼동 행렬(오차 매트릭스).
두 개의 클래스와 각 객체가 클래스 중 하나에 속하는지 예측하는 알고리즘이 있다고 가정하면 분류 오류 행렬은 다음과 같습니다.

트루 포지티브(TP) 가양성(FP)
거짓 부정(FN) 트루 네거티브(TN)

는 객체에 대한 알고리즘의 응답이며,

이 개체의 실제 클래스 레이블입니다.
따라서 분류 오류에는 False Negative(FN)와 False Positive(FP)의 두 가지 유형이 있습니다.

알고리즘 훈련 및 오류 행렬 구성

X = df.drop("Churn", axis=1) y = df["Churn"] # 샘플을 기차와 테스트로 나눕니다. 모든 메트릭은 테스트 데이터 세트 X_train, X_test, y_train, y_test = train_test_split( X, y , stratify=y, test_size=0.33, random_state=42) # 기본 로지스틱 회귀 훈련 lr = LogisticRegression(random_state=42) lr.fit(X_train, y_train) # 함수를 사용하여 sklearn에서 오류 행렬 작성 문서 def plot_confusion_matrix(cm, classes , normalize=False, title="(!LANG:혼합 행렬", cmap=plt.cm.Blues): """ This function prints and plots the confusion matrix. Normalization can be applied by setting `normalize=True`. """ plt.imshow(cm, interpolation="nearest", cmap=cmap) plt.title(title) plt.colorbar() tick_marks = np.arange(len(classes)) plt.xticks(tick_marks, classes, rotation=45) plt.yticks(tick_marks, classes) if normalize: cm = cm.astype("float") / cm.sum(axis=1)[:, np.newaxis] print("Normalized confusion matrix") else: print("Confusion matrix, without normalization") print(cm) thresh = cm.max() / 2. for i, j in itertools.product(range(cm.shape), range(cm.shape)): plt.text(j, i, cm, horizontalalignment="center", color="white" if cm > thresh else "black") plt.tight_layout() plt.ylabel("True label") plt.xlabel("Predicted label") font = {"size" : 15} plt.rc("font", **font) cnf_matrix = confusion_matrix(y_test, lr.predict(X_test)) plt.figure(figsize=(10, 8)) plot_confusion_matrix(cnf_matrix, classes=["Non-churned", "Churned"], title="혼동 행렬") plt.savefig("conf_matrix.png") plt.show()!}

정확성

직관적이고 명백하며 거의 사용되지 않는 측정항목은 정확도(알고리즘의 정답 비율)입니다.

이 메트릭은 클래스가 같지 않은 문제에서는 쓸모가 없으며 예제로 쉽게 보여줍니다.

메일 스팸 필터의 성능을 평가하려고 한다고 가정해 보겠습니다. 100개의 스팸이 아닌 이메일이 있으며, 그 중 90개는 분류자가 올바르게 결정했으며(True Negative = 90, False Positive = 10), 그 중 5개는 분류자에 의해 올바르게 결정되었습니다(True Positive = 5, False Negative = 5).
그런 다음 정확도:

그러나 모든 이메일을 스팸이 아닌 것으로 예측하면 정확도가 더 높아집니다.

동시에, 처음에 스팸 이메일을 식별하기를 원했기 때문에 우리 모델은 예측력이 전혀 없습니다. 모든 클래스에 대한 공통 메트릭에서 클래스 품질의 개별 지표로의 전환은 이를 극복하는 데 도움이 될 것입니다.

정밀도, 재현율 및 F-측정

각 클래스에 대한 알고리즘의 품질을 개별적으로 평가하기 위해 메트릭 정밀도(정확도) 및 재현율(완전성)을 소개합니다.

정밀도는 분류기에 의해 양성이라고 불리는 객체의 비율로 해석될 수 있고 동시에 실제로는 양수이며, 리콜은 알고리즘이 찾은 양성 클래스의 모든 객체 중 양성 클래스의 객체 비율을 보여줍니다.

이 경우 False Positive 수준이 증가하기 때문에 모든 객체를 하나의 클래스에 쓸 수 없는 것은 정밀도의 도입입니다. Recall은 주어진 클래스를 전혀 감지하는 알고리즘의 능력을 보여주는 반면, precision은 이 클래스를 다른 클래스와 구별하는 능력을 보여줍니다.

앞서 언급했듯이 분류 오류에는 두 가지 유형이 있습니다. False Positive와 False Negative입니다. 통계학에서는 첫 번째 유형의 오류를 제1종 오류라고 하고 두 번째 유형을 제2종 오류라고 합니다. 가입자의 유출을 결정하는 작업에서 첫 번째 종류의 오류는 충성도가 높은 가입자가 나가는 가입자의 실수가 될 것입니다. 왜냐하면 귀무 가설은 가입자가 유출되지 않는다는 것이고 우리는 이 가설을 기각하기 때문입니다. 따라서 두 번째 종류의 오류는 나가는 가입자의 "통과"와 귀무 가설의 잘못된 수락입니다.

정밀도와 재현율은 정확도와 달리 클래스 비율에 의존하지 않으므로 불균형 샘플 조건에 적용할 수 있습니다.
종종 실제 업무에서는 이 두 지표 사이에서 최적의(고객을 위한) 균형을 찾는 것이 작업입니다. 고전적인 예는 고객의 유출을 결정하는 문제입니다.
우리가 찾을 수 없다는 것이 분명합니다 모두흔들리는 고객과 오직그들의. 그러나 고객 유지를 위한 전략과 리소스를 결정한 후에는 정확성 및 회수에 필요한 임계값을 선택할 수 있습니다. 예를 들어, 우리는 콜 센터 리소스에 제한이 있기 때문에 이윤이 높은 고객이나 이탈 가능성이 높은 고객만 유지하는 데 집중할 수 있습니다.

일반적으로 알고리즘의 하이퍼파라미터를 최적화할 때(예: 그리드를 반복하는 경우 GridSearchCV)는 하나의 메트릭을 사용하며 테스트 샘플에서 개선될 것으로 기대합니다.
정밀도와 재현율을 종합적인 품질 측정으로 결합하는 여러 가지 방법이 있습니다. F-측정(일반적으로

) - 평균 고조파 정밀도 및 재현율:

이 경우 메트릭의 정확도 가중치를 결정하고

이것은 조화 평균입니다(2의 인수를 사용하여 정밀도 = 1 및 재현율 = 1의 경우

)
F-측정은 1과 동일한 재현율 및 정밀도에서 최대값에 도달하고 인수 중 하나가 0에 가까우면 0에 가깝습니다.
sklearn에는 편리한 _metrics.classification 기능이 있습니다. 보고서각 클래스에 대한 재현율, 정밀도 및 F 측정값과 각 클래스의 인스턴스 수를 반환합니다.

보고서 = classification_report(y_test, lr.predict(X_test), target_names=["비 이탈", "이탈"]) print(보고서)

등급 정도 상기하다 f1 점수 지원하다
휘젓지 않은 0.88 0.97 0.93 941
휘젓다 0.60 0.25 0.35 159
평균/총계 0.84 0.87 0.84 1100

실제로 실제로 널리 사용되는 불균형 클래스가 있는 작업의 경우 클래스 비율을 동일하게 하기 위해 데이터 세트를 인위적으로 수정하는 기술에 의존해야 하는 경우가 많습니다. 그것들 중 많은 것들이 있으며 우리는 그것들을 만지지 않을 것입니다. 당신은 몇 가지 방법을보고 당신의 작업에 맞는 것을 선택할 수 있습니다.

AUC-ROC 및 AUC-PR

알고리즘의 실제 응답(일반적으로 클래스에 속할 확률, 별도로 SVM 참조)을 이진 레이블로 변환할 때 0이 1이 되는 임계값을 선택해야 합니다. 임계값 0.5는 자연스럽고 가깝지만 예를 들어 앞서 언급한 계급 균형의 부족과 같이 항상 최적인 것은 아닙니다.

특정 임계값에 얽매이지 않고 모델을 전체적으로 평가하는 한 가지 방법은 AUC-ROC(또는 ROC AUC) - 면적( 레아 urve) 오류 곡선 아래( 아르 자형받는 사람 영형조작 특성 곡선). 이 곡선은 TPR(True Positive Rate) 및 FPR(False Positive Rate) 좌표에서 (0.0)에서 (1.1)까지의 선입니다.

우리는 이미 TPR을 알고 있습니다. 이것이 완전성이며 FPR은 알고리즘이 잘못 예측한 네거티브 클래스의 객체 비율을 보여줍니다. 이상적인 경우 분류기가 오류를 만들지 않으면(FPR = 0, TPR = 1) 곡선 아래 면적이 1과 같게 됩니다. 그렇지 않으면 분류기가 무작위로 클래스 확률을 생성할 때 AUC-ROC는 다음과 같은 경향이 있습니다. 0.5, 분류기는 동일한 양의 TP와 FP를 발행하기 때문입니다.
그래프의 각 점은 선택한 임계값에 해당합니다. 이 경우 곡선 아래 영역은 알고리즘의 품질을 보여줍니다(많을수록 좋음). 또한 곡선 자체의 기울기도 중요합니다. 우리는 FPR을 최소화하면서 TPR을 최대화하기를 원합니다. 점 (0,1).

ROC 곡선 그리기 코드

sns.set(font_scale=1.5) sns.set_color_codes("음소거된") plt.Figure(figsize=(10, 8)) fpr, tpr, 임계값 = roc_curve(y_test, lr.predict_proba(X_test)[:,1], pos_label=1) lw = 2 plt.plot(fpr, tpr, lw=lw, label="ROC 곡선 ") plt.plot(, ) plt.xlim() plt.ylim() plt.xlabel("거짓 양성률 ") plt.ylabel("진정한 비율") plt.title("ROC 곡선") plt.savefig("ROC.png") plt.show()

AUC-ROC 기준은 불균형 클래스에 저항하며(스포일러: 아아, 모든 것이 그렇게 단순하지는 않음) 무작위로 선택된 긍정적 개체가 분류자에 의해 더 높은 순위가 매겨질 확률로 해석될 수 있습니다(더 높은 확률을 가질 것입니다. 양수) 무작위로 선택한 음수 개체보다.

다음 문제를 고려하십시오. 100만 개의 문서에서 100개의 관련 문서를 선택해야 합니다. 우리는 두 가지 알고리즘을 기계 학습했습니다.

  • 알고리즘 1 100개의 문서를 반환하며 그 중 90개는 관련이 있습니다. 이런 식으로,
  • 알고리즘 2 2000개의 문서를 반환하며 그 중 90개는 관련이 있습니다. 이런 식으로,

아마도 우리는 경쟁자에 비해 거짓 긍정을 거의 생성하지 않는 첫 번째 알고리즘을 선택할 것입니다. 그러나 이 두 알고리즘 간의 False Positive Rate의 차이는 극도로작은 - 단 0.0019. 이것은 AUC-ROC가 True Negative에 대한 False Positive의 비율을 측정하고 두 번째(더 큰) 클래스가 우리에게 그다지 중요하지 않은 작업에서 알고리즘을 비교할 때 완전히 적절한 그림을 제공하지 못할 수 있다는 사실의 결과입니다. .

상황을 수정하기 위해 완전성과 정확성으로 돌아가 보겠습니다.

  • 알고리즘 1
  • 알고리즘 2

두 알고리즘 사이에는 이미 상당한 차이가 있습니다. 정확도는 0.855입니다!

정밀도와 재현율은 곡선을 그리는 데도 사용되며 AUC-ROC와 유사하게 그 아래 영역을 찾습니다.

여기서 작은 데이터 세트에서 PR 곡선 아래 영역은 사다리꼴 방법을 사용하여 계산되기 때문에 너무 낙관적일 수 있지만 일반적으로 이러한 작업에는 충분한 데이터가 있습니다. AUC-ROC와 AUC-PR의 관계에 대한 자세한 내용은 여기를 참조하십시오.

물류 손실

로지스틱 손실 함수는 다음과 같이 정의됩니다.

에 대한 알고리즘의 응답입니다.

옴 개체,

실제 클래스 레이블

옴 개체 및

표본의 크기.

로지스틱 손실 함수의 수학적 해석에 대한 자세한 내용은 선형 모델에 대한 게시물에서 이미 작성되었습니다.
이 메트릭은 비즈니스 요구 사항에 자주 나타나지 않지만 종종 kaggle 작업에 나타납니다.
직관적으로, logloss를 최소화하는 것은 잘못된 예측에 페널티를 부여하여 정확도를 최대화하는 문제로 생각할 수 있습니다. 그러나 logloss는 오답에 대한 분류자의 확신에 심각한 불이익을 준다는 점에 유의해야 합니다.

다음 예를 고려하십시오.

Def logloss_crutch(y_true, y_pred, eps=1e-15): return - (y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)) print("분류가 불확실한 로그 손실 %f " % logloss_crutch(1, 0.5)) >> 불확실한 분류가 있는 로그 손실 0.693147 print("자신감 있는 분류 및 정답이 있는 로그 손실 %f" % logloss_crutch(1, 0.9)) >> 자신 있는 분류 및 정답이 있는 로그 손실 0.105361 print(" 확실한 분류와 오답을 위한 Logloss %f" % logloss_crutch(1, 0.1)) >> 확실한 분류와 오답을 위한 Logloss 2.302585

오답과 자신감 있는 분류로 logloss가 얼마나 크게 증가했는지 확인하십시오!
따라서 한 개체의 오류는 표본의 전체 오류를 크게 악화시킬 수 있습니다. 이러한 개체는 종종 별도로 필터링하거나 고려하기 위해 기억해야 하는 이상값입니다.
로그 손실 그래프를 그리면 모든 것이 제자리에 들어갑니다.

ground truth = 1에 대한 알고리즘의 답이 0에 가까울수록 오류 값이 높아지고 곡선이 가파르게 성장함을 알 수 있습니다.

합산:

  • 다중 클래스 분류의 경우 각 클래스의 메트릭을 주의 깊게 모니터링하고 솔루션의 논리를 따라야 합니다. 작업, 측정항목을 최적화하는 것보다
  • 동일하지 않은 클래스의 경우, 분류의 품질을 올바르게 반영할 메트릭과 훈련을 위한 클래스의 균형을 선택하는 것이 필요합니다.
  • 메트릭 선택은 주제 영역에 중점을 두고 데이터를 사전 처리하고 가능하면 세분화(풍부한 고객과 가난한 고객으로 나누는 경우와 같이)해야 합니다.

유용한 링크

  1. Evgeny Sokolov의 과정: 모델 선택에 관한 세미나(회귀 문제의 메트릭에 대한 정보가 있음)
  2. A.G.의 AUC-ROC 문제 디아코노바
  3. kaggle에서 다른 측정항목에 대해 자세히 알아볼 수 있습니다. 각 측정항목의 설명에 사용된 대회 링크가 추가되었습니다.
  4. 불균형 샘플에 대한 학습에 대한 Bogdan Melnyk(일명 ld86)의 프레젠테이션

이 장에서는 이 주제에 대한 다른 작업에서도 사용되는 분류 모델의 품질을 평가하는 인기 있는 방법을 제시합니다. 이 평가에 사용된 메트릭에 대한 설명과 입증이 제공됩니다.

품질 평가 지표

전체 정밀도(정확도)

이 메트릭은 분류 알고리즘의 품질을 평가하기 위한 가장 단순하면서도 동시에 보편적인 메트릭 중 하나입니다. 이 계수의 값은 표본의 총 개체 수에서 올바르게 분류된 개체의 비율로 계산됩니다. 이 메트릭은 단순성과 여러 클래스로 확장할 수 있는 기능으로 인해 널리 사용됩니다. 이 메트릭의 주요 단점은 모든 문서에 동일한 가중치를 할당한다는 것입니다. 하나 이상의 클래스에 대한 교육 샘플의 문서 편향이 심한 경우 이 값이 정확하지 않을 수 있습니다. 이 측정항목은 높은 값을 가질 수 있지만 동일한 클래스 내의 분류자는 저품질일하다. 동시에 메트릭은 어떤 식으로든 이를 신호로 나타내지 않습니다.

정확도, 재현율 및 F-측정

정밀도(정밀도) 및 재현율(재현율)과 같은 메트릭은 정보 검색 문제를 해결하는 시스템의 작업 품질을 평가하는 데 처음으로 널리 사용되었습니다. 한 클래스 내 시스템의 정확도는 시스템에서 이 클래스에 할당한 모든 개체에 상대적으로 특정 클래스에 실제로 속하는 개체의 비율입니다. 완전성은 이 클래스의 모든 객체에 대한 클래스에 속하는 분류자가 찾은 객체의 비율로 표현됩니다. 표 4는 TP(진양성)가 참양성, TN(참음성)이 참음성, FP(거양성)가 위양성, FN(거짓음성)이 다른 클래스의 분할표이다. 거짓 부정 결정입니다.

표 1 - 객체 클래스 분할표

따라서 정밀도와 재현율은 다음과 같이 계산됩니다.

F-측정은 평가되는 알고리즘의 정확성과 완전성에 대한 정보를 결합합니다. 정확도와 재현율 지표의 조화 평균으로 계산됩니다.

F-measure는 클래스별로 별도로 계산되기 때문에 특정 알고리즘 오류를 검색 및 분석하고 여러 클래스로 분류를 평가하는 데 사용하는 것이 편리합니다. 동시에 많은 수의 클래스의 경우 모든 클래스에 대한 완전성과 정확성을 집계하고 시스템의 일반적인 동작을 특성화하는 특성이 필요합니다. 본 논문에서는 이를 위해 다음과 같은 집계 값을 사용한다: 모든 클래스에 대한 정확도의 산술 평균으로 계산되는 매크로 정밀도(macro precision), 산술 평균으로 계산되는 매크로 리콜(macro resume) 모든 클래스에 대한 재현율, 그리고 그들 사이의 조화 평균인 매크로 F-측정(Macro F-score).

교차 검증

본격적인 테스트를 수행하고 다양한 기계 학습 알고리즘의 성능을 평가하는 가장 일반적인 방법 중 하나는 교차 검증입니다. 독립 표본의 경우 이 방법알고리즘의 과적합으로 인한 오류 확률의 편향된 추정이 될 수 있는 훈련 샘플의 평균 오류와 대조적으로 오류 확률의 편향되지 않은 추정을 얻을 수 있습니다. 이 절차의 또 다른 이점은 테스트용으로 특별히 설계된 대조 표본이 없는 경우 알고리즘 오류 확률의 추정치를 얻을 수 있다는 것입니다.

가 한정된 판례 샘플이 지정된 객체의 기능 설명 세트라고 가정해 보겠습니다. 여기서 는 한정된 클래스 세트입니다. 임의의 판례 샘플을 알고리즘과 연관시키는 매핑이 제공됩니다. 그런 다음 임의의 판례 샘플에 대한 알고리즘의 성능은 품질 기능을 사용하여 추정됩니다.

여기서 는 올바른 클래스 레이블이 제공된 알고리즘의 오류 값을 반환하는 음수가 아닌 함수입니다.

모든 데이터 과학자는 매일 많은 양의 데이터를 작업합니다. 약 60% - 70%의 시간이 워크플로의 첫 번째 단계인 머신 러닝 알고리즘을 적용하기에 적합한 형식으로 데이터를 정리, 필터링 및 변환하는 데 소요되는 것으로 믿어집니다. 두 번째 단계에서는 모델의 전처리 및 직접 훈련이 수행됩니다. 오늘 기사에서는 프로세스의 두 번째 단계에 초점을 맞추고 100개가 넘는 기계 학습 대회에 참가한 결과 다양한 기술과 모범 사례를 살펴보겠습니다. 설명된 개념이 상당히 일반적인 성격을 갖고 있음에도 불구하고 많은 특정 문제를 해결하는 데 유용합니다.

모든 코드 예제는 Python으로 작성되었습니다!

데이터

기계 학습 알고리즘을 적용하기 전에 데이터를 표 형식으로 변환해야 합니다. 아래 그림에 표시된 이 프로세스는 가장 복잡하고 시간이 많이 걸립니다.

데이터베이스의 데이터 - 데이터베이스의 데이터입니다. 데이터 통합 ​​- 데이터 필터링. 유용한 데이터 - 유용한 데이터. 데이터 변환 - 데이터 변환. 테이블 형식 데이터 - 테이블 형식 데이터입니다. 데이터 - 독립 변수(기능). 레이블은 종속 변수(대상 변수)입니다.

데이터가 표로 작성되면 모델을 훈련하는 데 사용할 수 있습니다. 테이블 보기는 기계 학습 및 데이터 마이닝에서 가장 일반적인 데이터 표현입니다. 테이블 행은 별도의 개체(관찰)입니다. 테이블의 열에는 독립 변수(기능)가 포함되어 있으며, 엑스, 및 종속(대상) 변수로 표시된 와이. 작업 클래스에 따라 대상 변수는 하나 이상의 열로 표시될 수 있습니다.

대상 변수 유형

대상 변수는 작업 클래스를 정의하고 다음 옵션 중 하나로 나타낼 수 있습니다.

  • 이진 값이 있는 열 하나: 두 클래스 분류 문제(이진 분류), 각 개체는 하나의 클래스에만 속합니다.
  • 실제 값이 있는 하나의 열: 회귀 문제, 하나의 값이 예측됩니다.
  • 이진 값이 있는 여러 열: 다중 클래스 분류 문제, 각 개체는 하나의 클래스에만 속합니다.
  • 실제 값이 있는 여러 열: 회귀 문제, 여러 값이 예측됩니다.
  • 이진 값이 있는 여러 열: 다중 레이블 분류 문제, 하나의 개체가 여러 클래스에 속할 수 있습니다.

측정항목

머신 러닝 문제를 풀 때 결과를 평가할 수 있어야 하는 것, 즉 메트릭이 필요합니다. 예를 들어, 2등급 분류 문제의 경우 ROC 곡선 아래 면적(ROC AUC)은 일반적으로 메트릭으로 사용됩니다. 다중 클래스 분류의 경우 일반적으로 범주형 교차 엔트로피가 사용됩니다. 회귀의 경우 평균 제곱 오차(MSE)입니다.

메트릭은 매우 다양하고 특정 작업에 대해 선택되기 때문에 메트릭을 자세히 고려하지 않습니다.

도서관

첫 번째 단계는 다음과 같은 계산을 수행하는 데 필요한 기본 라이브러리를 설치하는 것입니다. numpy그리고 싸이피. 그런 다음 데이터 분석 및 기계 학습을 위해 가장 많이 사용되는 라이브러리 설치를 시작할 수 있습니다.

  • 데이터 탐색 및 변환: 팬더(http://pandas.pydata.org/).
  • 다양한 기계 학습 알고리즘: 사이킷런(http://scikit-learn.org/stable/).
  • 최상의 그래디언트 부스팅 구현: xgboost(https://github.com/dmlc/xgboost).
  • 신경망: 케라스(http://keras.io/).
  • 심상: 매트플롯립(http://matplotlib.org/).
  • 실행 진행 표시기: tqdm(https://pypi.python.org/pypi/tqdm).

사용하지 않는다고 해야하나 아나콘다(https://www.continuum.io/downloads). 아나콘다대부분의 인기 있는 라이브러리를 결합하고 설치 프로세스를 크게 단순화하지만 더 많은 자유가 필요합니다. 당신이 결정합니다. 🙂

머신 러닝 프레임워크

2015년에 저는 자동 머신 러닝 프레임워크의 개념을 도입했습니다. 시스템은 아직 개발 중이지만 곧 출시될 예정입니다. 추가 프레젠테이션의 기초가 될 프레임워크의 구조는 아래 그림에 나와 있습니다.

간행물의 그림: Thakur A., ​​Kron-Grimberge A. AutoCompete: 기계 학습 경쟁을 위한 프레임워크. (A. Thakur 및 A. Krohn-Grimberghe, AutoCompete: A Framework for Machine Learning Competitions.)

입력 시 프레임워크는 이전에 테이블 보기로 변환된 데이터를 수신합니다. 분홍색 선은 가장 단순한 경우의 방향을 나타냅니다.

첫 번째 단계는 작업 클래스를 정의하는 것입니다. 이는 대상 변수를 구문 분석하여 수행할 수 있습니다. 작업은 분류 또는 회귀일 수 있으며, 분류는 2개 클래스 또는 다중 클래스일 수 있으며, 클래스는 겹칠 수도 있고 겹치지 않을 수도 있습니다. 작업 클래스가 정의된 후 원본 데이터 세트를 두 부분으로 분할하고 아래 그림과 같이 훈련 세트(훈련 세트)와 검증 세트(검증 세트)를 얻습니다.

분류를 다루는 경우 결과 집합에서 서로 다른 클래스에 속하는 개체 수의 비율이 원래 데이터 집합에 대한 이 비율에 해당하는 방식으로 데이터 분리를 수행해야 합니다(계층 분할). 이것은 클래스로 쉽게 할 수 있습니다 계층화KFold도서관 사이킷런.

회귀 문제의 경우 클래스를 사용하는 일반적인 나눗셈 케이폴드, 도서관에서도 사용 가능 사이킷배우다.

또한 회귀 문제의 경우 결과 집합에서 대상 변수의 동일한 분포를 보장하는 보다 복잡한 데이터 분리 방법이 있습니다. 이러한 접근 방식은 독자의 판단에 맡깁니다.

위의 코드 예제에서 유효성 검사 세트의 크기( 평가 크기)는 원본 데이터 세트의 10%입니다. 이 값은 초기 데이터의 양에 따라 선택해야 합니다.

데이터를 분할한 후 훈련 세트에 적용된 모든 연산을 저장한 다음 검증 세트에 적용해야 합니다. 검증 세트는 훈련 세트와 결합되어서는 안됩니다. 이렇게 하면 매우 좋은 점수를 얻을 수 있지만 우리 모델은 과도한 과적합으로 인해 쓸모가 없습니다.

다음 단계에서는 피쳐 유형을 정의합니다. 가장 일반적인 세 ​​가지 유형은 숫자, 범주 및 텍스트입니다. 인기 있는 타이타닉 승객 문제(https://www.kaggle.com/c/titanic/data)의 데이터 세트를 살펴보겠습니다.

이 데이터세트에서 열 활착대상 변수를 포함합니다. 이전 단계에서 우리는 이미 대상 변수를 기능에서 분리했습니다. 표지판 pclass, 섹스그리고 승선범주형입니다. 표지판 나이, 한입, 볶다및 like는 숫자입니다. 징후 이름텍스트입니다. 그러나 그 승객의 이름이 그 승객의 생존 여부를 예측하는 데 유용할 것이라고 생각하지 않습니다.

숫자 기능은 변환할 필요가 없습니다. 원래 형태의 이러한 기능은 모델의 정규화 및 훈련을 위한 준비가 되어 있습니다.

사용하기 전에 기억하십시오 원핫인코더, 범주를 숫자로 변환해야 합니다. 레이블 인코더.

타이타닉 대회의 데이터에는 텍스트 기능의 좋은 예가 포함되어 있지 않으므로 다음을 공식화해 보겠습니다. 일반 규칙텍스트 기능의 변형. 모든 텍스트 기능을 하나로 결합한 다음 적절한 알고리즘을 적용하여 텍스트를 숫자 표현으로 변환할 수 있습니다.

텍스트 기능은 다음과 같이 결합할 수 있습니다.

그런 다음 클래스로 변환을 수행할 수 있습니다. CountVectorizer또는 TfidfVectorizer도서관 사이킷런.

대개, TfidfVectorizer보다 나은 결과를 제공합니다 CountVectorizer. 실제로 다음 매개변수 값이 TfidfVectorizer대부분의 경우 최적:

벡터라이저를 훈련 세트에만 적용하는 경우 나중에 검증 세트에 적용할 수 있도록 디스크에 저장해야 합니다.

다음 단계에서는 위에서 설명한 변환의 결과로 얻은 피쳐가 스태커로 전송됩니다. 이 프레임워크 노드는 변환된 모든 기능을 단일 매트릭스로 결합합니다. 우리의 경우 또 다른 인기 있는 기술인 모델 스태커와 혼동해서는 안 되는 기능 스태커에 대해 이야기하고 있습니다.

기능을 사용하여 기능을 결합할 수 있습니다. hstack도서관 numpy(비희소(밀도) 피처의 경우) 또는 함수 사용 hstack모듈에서 부족한도서관 싸이피(희소한 기능의 경우).

차원 축소 또는 특징 선택(나중에 설명)과 같은 다른 전처리 단계가 수행되는 경우 클래스를 사용하여 얻은 특징의 조합을 효율적으로 수행할 수 있습니다. 피처 유니온도서관 사이킷배우다.

모든 기능이 하나의 행렬로 결합되면 모델 훈련을 시작할 수 있습니다. 기능이 정규화되지 않았으므로 이 단계에서는 의사 결정 트리를 기반으로 하는 앙상블 알고리즘만 사용해야 합니다.

  • RandomForest 분류자
  • RandomForestRegressor
  • Extra Trees 분류기
  • ExtraTreesRegressor
  • XGB분류기
  • XGBRegressor

선형 모델을 적용하려면 클래스를 사용하여 특성 정규화를 수행해야 합니다. 노멀라이저또는 스탠다드스케일러도서관 사이킷런.

이러한 정규화 방법은 비희소(밀도) 기능의 경우에만 좋은 결과를 제공합니다. 신청하려면 스탠다드스케일러희소(희소) 기능을 사용하려면 매개변수로 다음을 지정해야 합니다. with_mean=거짓.

위의 단계가 "좋은" 모델을 제공했다면 하이퍼파라미터 조정으로 넘어갈 수 있습니다. 모델이 우리를 만족시키지 못한다면 계속해서 기능을 사용할 수 있습니다. 특히, 추가 단계로 다양한 차원 축소 기술을 적용할 수 있습니다.

간단하게 유지하기 위해 선형 판별 분석(LDA) 및 2차 판별 분석(QDA)은 고려하지 않습니다. 일반적으로 PCA(주성분 분석)는 데이터 차원을 줄이는 데 사용됩니다. 이미지로 작업할 때 10 - 15개의 구성 요소로 시작하여 결과가 크게 향상될 때까지 이 값을 늘려야 합니다. 다른 유형의 데이터로 작업할 때 50 - 60개의 구성 요소로 시작할 수 있습니다.

텍스트 데이터의 경우 텍스트를 희소 행렬로 변환한 후 SVD(Singular Value Decomposition)를 적용할 수 있습니다. 특이값 분해의 구현 잘린SVD도서관에서 사용 가능 사이킷런.

일반적으로 다음을 사용하여 변환의 결과로 얻은 기능의 경우 좋은 결과를 제공하는 특이 값 분해의 구성 요소 수 CountVectorizer또는 TfidfVectorizer, 120 - 200입니다. 많은 분량구성 요소를 사용하면 상당한 계산 비용을 들이고 결과를 약간 개선할 수 있습니다.

설명된 단계를 완료한 후 선형 모델을 적용할 수 있도록 기능을 정규화하는 것을 잊지 마십시오. 다음으로 준비된 기능을 사용하여 모델을 훈련하거나 기능 선택을 수행할 수 있습니다.

기능 선택에는 다양한 방법이 있습니다. 인기 있는 방법 중 하나는 탐욕적 특징 선택 알고리즘입니다. greedy 알고리즘은 다음과 같은 방식을 가지고 있습니다. 1단계: 각 초기 기능에 대해 모델을 훈련하고 평가합니다. 우리는 최상의 추정치를 제공하는 하나의 기능을 선택합니다. 2단계: 이전 단계에서 선택한 최상의 기능과 나머지 각 기능으로 구성된 기능 쌍에 대해 모델을 훈련하고 평가합니다. 나머지에서 가장 좋은 기능을 선택하십시오. 필요한 수의 기능을 선택하거나 다른 기준이 충족될 때까지 유사한 단계를 반복합니다. ROC 곡선 아래 영역이 메트릭으로 사용되는 이 알고리즘의 구현은 https://github.com/abhishekkrthakur/greedyFeatureSelection 링크에서 사용할 수 있습니다. 이 구현은 이상적이지 않으며 특정 작업에 대해 특정 수정이 필요합니다.

또 다른 빠른 특징 선택 방법은 특징의 중요성을 평가하는 기계 학습 알고리즘 중 하나를 사용하여 선택하는 것입니다. 예를 들어, 로지스틱 회귀를 사용하거나 미래에 선택한 기능을 사용하여 다른 알고리즘을 훈련할 수 있습니다.

랜덤 포레스트로 기능 선택을 수행할 때 트리의 수가 작아야 하고 하이퍼파라미터 튜닝을 과도하게 수행해서는 안 된다는 점을 염두에 두십시오. 그렇지 않으면 과적합이 가능합니다.

기능 선택은 그래디언트 부스팅 알고리즘을 사용하여 수행할 수도 있습니다. 도서관 이용을 권장합니다 xgboost해당 구현 대신 사이킷런, 구현하기 때문에 xgboost훨씬 빠르고 확장 가능합니다.

알고리즘 RandomForest 분류자, RandomForestRegressor그리고 xgboost또한 희소 데이터의 경우 기능 선택을 수행할 수 있습니다.

또 다른 인기 있는 음수가 아닌 특성 선택 기술은 카이제곱 선택입니다. 이 메서드의 구현은 라이브러리에서도 사용할 수 있습니다. 사이킷런.

위의 코드에서 우리는 클래스를 적용합니다. SelectKBest카이제곱 검정( 2 ) 상위 20개 기능을 선택합니다. 샘플링할 기능의 수는 기본적으로 모델의 성능을 향상시키기 위해 최적화해야 하는 하이퍼파라미터입니다.

훈련 세트에 적용한 변환을 저장하는 것을 잊지 마십시오. 검증 세트의 모델을 평가하는 데 필요합니다.

다음 단계는 기계 학습 알고리즘을 선택하고 하이퍼파라미터를 조정하는 것입니다.

일반적으로 기계 학습 알고리즘을 선택할 때 다음 옵션을 고려해야 합니다.

  • 분류:
    • 랜덤 포레스트(Random Forest).
    • 로지스틱 회귀.
    • 나이브 베이즈.
    • k개의 최근접이웃 방법(k-최근접이웃).
  • 회귀:
    • 랜덤 포레스트(Random Forest).
    • 그라디언트 부스팅.
    • 선형 회귀.
    • 릿지 회귀.
    • 올가미 회귀(올가미 회귀).
    • 벡터 머신을 지원합니다.

아래 표는 각 알고리즘의 주요 하이퍼파라미터와 최적값 범위를 보여줍니다.

상표 RS*표에서 는 최적 값을 지정할 수 없으며 임의 검색을 수행해야 함을 의미합니다.

다시 한 번 말씀드리지만 적용된 변환기를 모두 저장하는 것을 잊지 마십시오.

그리고 유효성 검사 세트에 적용하는 것을 잊지 마십시오.

우리가 고려한 접근 방식과 이를 기반으로 한 프레임워크는 내가 작업해야 했던 대부분의 데이터 세트에서 좋은 결과를 보여주었습니다. 물론 매우 복잡한 문제를 해결할 때 이 기술이 항상 좋은 결과를 주는 것은 아닙니다. 완벽한 것은 없지만 학습을 통해 향상됩니다. 머신 러닝에서 하는 것처럼.

각 목록 내의 요소에 대해. 부분 순서는 일반적으로 각 항목에 대한 점수를 지정하여 지정됩니다(예: "관련됨" 또는 "관련 없음", 두 개 이상의 등급이 가능함). 순위 모델의 목표는 훈련 세트의 순위가 새 데이터에 맞는 방식으로 (어떤 의미에서) 가장 근사하고 일반화하는 것입니다.

순위 학습은 순위 문제에 기계 학습 방법을 적용하는 정보 검색 분야에 대한 관심의 출현과 함께 2000년대에 등장한 비교적 젊고 빠르게 발전하는 연구 분야입니다.

백과사전 YouTube

  • 1 / 5

    순위 모델을 교육하는 동안 및 작업 중에 각 문서 요청 쌍은 문서, 쿼리 및 해당 관계의 속성을 특성화하는 순위 기능(순위 요소 또는 신호라고도 함)의 숫자 벡터로 변환됩니다. 이 표시는 세 그룹으로 나눌 수 있습니다.

    다음은 현장에서 잘 알려진 LETOR 데이터 세트에 사용된 순위 기능의 몇 가지 예입니다.

    • 측정값 TF, TF-IDF, BM25 및 다양한 문서 영역(제목, URL, 본문, 링크 텍스트)의 요청에 일치하는 언어 모델
    • 문서 영역의 길이 및 IDF 합계
    • PageRank 및 HITS와 같은 링크 순위 알고리즘의 다양한 변형으로 얻은 문서 순위.

    품질 측정항목 순위 지정

    동료 리뷰와 함께 샘플에 대한 순위 알고리즘의 성능을 평가하고 비교하는 몇 가지 메트릭이 있습니다. 종종 순위 모델의 매개변수는 이러한 측정항목 중 하나의 값을 최대화하는 방식으로 조정되는 경향이 있습니다.

    측정항목의 예:

    알고리즘 분류

    Microsoft Research Asia의 Tai-Yan Liu는 자신의 기사 "정보 검색을 위한 순위 지정 학습"과 주제별 컨퍼런스 연설에서 순위 지정 학습 문제를 해결하는 데 현재 사용할 수 있는 방법을 분석하고 입력에 따라 세 가지 접근 방식으로 분류를 제안했습니다. 표현 사용 데이터 및 기능 미세:

    점별 접근

    노트

    1. 타이 옌 류 (2009) 정보 검색을 위한 순위 학습, 정보 검색의 기초와 동향: Vol. 3: 3번, p. 225-331, ISBN 978-1-60198-244-5, DOI 10.1561/1500000016. WWW 2009 컨퍼런스에서 T. Lew의 연설 슬라이드가 있습니다.


관련 기사: