from sklearn.datasets import load_diabetes from sklearn.inspection import ( permutation_importance, ) from sklearn.linear_model import Ridge from sklearn.model_selection import ( train_test_split, ) diabetes = load_diabetes() split = train_test_split( diabetes.data, diabetes.target, test_size=0.25, random_state=0, ) X_train, X_val, y_train, y_val = split model = Ridge(alpha=1e-2) model.fit(X_train, y_train) score = model.score(X_val, y_val) result = permutation_importance( model, X_val, y_val, n_repeats=30, random_state=0, scoring="r2", ) print(f"validation r2: {score:.3f}") print("feature mean_drop std") ranked = result.importances_mean.argsort()[::-1] for index in ranked[:5]: name = diabetes.feature_names[index] mean = result.importances_mean[index] std = result.importances_std[index] print( f"{name:<7} {mean:>9.3f} " f"{std:.3f}" ) top_index = result.importances_mean.argmax() top_name = diabetes.feature_names[top_index] print(f"top feature: {top_name}")