22.03.20 21:21 작성
·
210
1
안녕하세요. 강사님 아래 코드에서 이해가 안되는게 있어 질문드립니다.
#학습, 예측, R2 Score 평가
model = Ridge(alpha=1e-2).fit(X_train, y_train) # 릿지회귀로 학습을 시킨다.
y_pred = model.predict(X_val)
print('r2 score:', r2_score(y_val, y_pred))
r2 score: 0.35666062386954545
# 가장 평균 permutation importance가 높은 순으로 내림차순 정렬 후 평균 permutation importance값과 표준 편차 출력
for i in r.importances_mean.argsort()[::-1]:
if r.importances_mean[i] - 2 * r.importances_std[i] > 0:
print(diabetes.feature_names[i]," ", np.round(r.importances_mean[i], 4), " +/- ", np.round(r.importances_std[i], 5))
이때 출력값이
s5 0.2042 +/- 0.04965
bmi 0.1758 +/- 0.0484
bp 0.0884 +/- 0.03284
sex 0.0559 +/- 0.02319 인데요
여기에서 순서가 반대로 되야 하는게 아닌가요 (sex bp bmi s5 순서로)
예를 들어 s5 피쳐는 30번 랜덤 셔플해서 나온 성능이 0.2042이고
sex는 0.0059이면 원본 값의 r2 score가 0.3566 인경우 그 차이(원본에서 평균적으로 얼마나 성능이 감소했나)가 큰 피쳐가
영향을 더 준다고 이해했는데 그렇다면 순서가 반대가 되어야 하지 않나요. (원본 0.3566에서 sex를 뺀게 s5를 뺀것보다 큼)
강의 중에 s5 피쳐관련해서 1.5라는 값도 얘기하셨는데 잘 이해가 안가서 질문드립니다.
답변 1
1
2022. 03. 21. 20:35
안녕하십니까,
이 부분은 좀 더 자세히 설명할 필요가 있었던것 같습니다.
permutation_importance를 적용해 버리면, 바로 피처 중요도가 permutation importance 방식으로 적용해 버립니다.
그러니까, permutation_importance.importances_mean 속성은 계산된 피처 중요도를 가지고 있습니다. 이중에서 높은 것부터 출력하면 됩니다.
감사합니다.