predict_proba() 只返回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)
输出:
分类报告:
1 个回答
1
概率的值在0到1之间,只有当一个叶子节点里同时包含良性和恶性样本时才成立。比如说,如果一个叶子节点里有九个良性样本和一个恶性样本,那么这个样本是恶性的概率就是10%。反过来也是一样。
当你在随机森林中遍历到一个包含混合样本的叶子节点(也就是同时有良性和恶性样本)时,输出的概率会是小数。
不过在你的模型中,大部分叶子节点都是纯的,这样就会得到0和1的预测结果。