我在使用scikit learn的随机森林进行分类,并使用pred_proba函数获取类别概率。但它输出的概率被四舍五入到小数点后第一位
我尝试使用了样本鸢尾花数据集
iris = load_iris()df = pd.DataFrame(iris.data, columns=iris.feature_names)df['is_train'] = np.random.uniform(0, 1, len(df)) <= .75df['species'] = pd.Categorical(iris.target, iris.target_names)df.head()train, test = df[df['is_train']==True], df[df['is_train']==False]features = df.columns[:4]clf = RandomForestClassifier(n_jobs=2)y, _ = pd.factorize(train['species'])clf.fit(train[features], y)clf.predict_proba(train[features])
输出概率
[ 1. , 0. , 0. ], [ 1. , 0. , 0. ], [ 1. , 0. , 0. ], [ 1. , 0. , 0. ], [ 0. , 1. , 0. ], [ 0. , 1. , 0. ], [ 0. , 1. , 0. ], [ 0. , 1. , 0. ], [ 0. , 1. , 0. ], [ 0. , 1. , 0. ], [ 0. , 0.8, 0.2], [ 0. , 1. , 0. ], [ 0. , 1. , 0. ], [ 0. , 1. , 0. ],
这是默认输出吗?可以增加小数位数吗?
注意:找到了解决方案。默认树的数量为10,增加到一百后,概率的精度提高了。
回答:
显然,默认设置是十棵树,你在代码中使用了默认值:
Parameters: n_estimators : integer, optional (default=10)森林中的树的数量。
尝试这样做,增加树的数量到25或比10更大的数字:
RandomForestClassifier(n_estimators=25, n_jobs=2)
如果你只是在10棵默认树上获取投票比例,这很可能会导致你看到的概率
你可能会遇到问题,因为鸢尾花数据集非常小。如果我没记错的话,不到200个观测值。
predict.proba()的文档说明:
输入样本的预测类别概率被计算为森林中所有树的预测类别概率的平均值。单棵树的类别概率是叶子节点中相同类别的样本比例。
我在文档中没有找到可以调整预测概率小数精度的参数。