predict_proba() 给出 0 和 1 的概率,但中间值很少

问题描述 投票:0回答:1

我正在研究乳腺癌检测分类问题。我已经从 Kaggle 下载了数据集:(https://www.kaggle.com/datasets/yasserh/breast-cancer-dataset)

我想预测: a) 肿瘤是良性还是恶性 和 b) 肿瘤恶性的概率(0-1)是多少。

我正在实现随机森林分类器。

我面临的问题是,当我使用 rf_classifier.predict_proba() 方法时,我获得的概率包含大量 1 和 0,但中间值很少。理想情况下,我希望概率列中的所有值都是 0 到 1 之间的小数。

这种方法是实现目标的正确方法吗?如果是,如何解决这个问题?预先感谢。

分类器表现非常好。

这是我的代码的相关部分:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
scaler = StandardScaler()

X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

rf_classifier = RandomForestClassifier()
rf_classifier.fit(X_train, y_train)

y_pred = rf_classifier.predict(X_test)

y_pred_proba = rf_classifier.predict_proba(X_test)[:, 1]

results = np.column_stack((y_test[:200], y_pred[:200], y_pred_proba[:200]))
np.set_printoptions(precision=2, suppress=True)
print("Actual | Predicted | Probability")
print(results)

output Classification report

python machine-learning
1个回答
0
投票

仅当叶子中的样本包含 0 和 1 时,概率才在 0 和 1 之间。例如,当叶子包含 9 个良性样本和 1 个恶性样本时,恶性概率为 10%,反之亦然。反之亦然。

现在,当您遍历随机森林并到达具有不纯样本(包含良性和恶性样本)的叶子时,输出将以小数形式显示。

但是,在您的模型中,大多数叶子都是纯叶子,导致 0 和 1 个预测。

© www.soinside.com 2019 - 2024. All rights reserved.