You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选预测概率超80%的行并计算clf.predict的np.mean

解决思路与修正代码

嗨,咱们一步步来搞定这个问题。首先得指出你现有代码里的一个关键bug:clf.predict_proba返回的是0到1之间的概率值(不是百分比),所以原代码里用proba[0][0] < 80来判断完全不对——所有概率都会满足这个条件,导致错误删除几乎所有样本。你应该把阈值改成0.8(对应80%)才对。

接下来,在正确筛选出「至少有一项预测概率≥80%」的样本后,计算clf.predict结果的均值就很简单了,分两步:对筛选后的样本做预测,再用numpy计算均值。

下面是修正并补充完整的代码:

import numpy as np
from sklearn.tree import DecisionTreeClassifier

clf = DecisionTreeClassifier(random_state=1)
clf.fit(X, Y)

dropIndexes = []
for i in range(len(X)):
    proba = clf.predict_proba([X.values[i]])
    # 修正:用0.8(即80%)作为阈值,判断两个概率是否都低于80%
    if (proba[0][0] < 0.8 and proba[0][1] < 0.8):
        dropIndexes.append(i)

# 删除所有预测值均低于80%的行(建议用inplace=False,避免修改原始数据集)
X_filtered = X.drop(dropIndexes, inplace=False)
Y_filtered = Y.drop(dropIndexes, inplace=False)

# 对筛选后的样本进行预测
predictions = clf.predict(X_filtered)

# 计算预测结果的均值
mean_prediction = np.mean(predictions)

print(f"筛选后预测结果的均值为: {mean_prediction}")

额外优化建议

如果你的样本量很大,手动循环遍历每个样本效率会很低,推荐用向量化操作替代循环,代码更简洁高效:

import numpy as np
from sklearn.tree import DecisionTreeClassifier

clf = DecisionTreeClassifier(random_state=1)
clf.fit(X, Y)

# 一次性获取所有样本的预测概率
all_probas = clf.predict_proba(X)
# 生成筛选掩码:至少有一个概率≥0.8的样本标记为True
keep_mask = (all_probas >= 0.8).any(axis=1)
# 筛选样本
X_filtered = X[keep_mask]
Y_filtered = Y[keep_mask]

# 计算预测结果均值
predictions = clf.predict(X_filtered)
mean_prediction = np.mean(predictions)

print(f"筛选后预测结果的均值为: {mean_prediction}")

内容的提问来源于stack exchange,提问作者Miraslav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:35:50