NGBoost:用于概率预测的自然梯度提升
ngboost是一个实现自然梯度提升的Python库,如在"NGBoost: Natural Gradient Boosting for Probabilistic Prediction"中所述。它建立在Scikit-Learn之上,旨在在选择适当的评分规则、分布和基础学习器方面实现可扩展和模块化。有关NGBoost基础方法论的教学性介绍可在此幻灯片中找到。
安装
通过pip安装
pip install --upgrade ngboost
通过conda-forge安装
conda install -c conda-forge ngboost
使用
在波士顿房价数据集上进行概率回归示例:
from ngboost import NGBRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
#加载波士顿房价数据集
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
X = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
Y = raw_df.values[1::2, 2]
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2)
ngb = NGBRegressor().fit(X_train, Y_train)
Y_preds = ngb.predict(X_test)
Y_dists = ngb.pred_dist(X_test)
# 测试均方误差
test_MSE = mean_squared_error(Y_preds, Y_test)
print('Test MSE', test_MSE)
# 测试负对数似然
test_NLL = -Y_dists.logpdf(Y_test).mean()
print('Test NLL', test_NLL)
有关可用分布、评分规则、学习器、调优和模型解释的详细信息可在我们的用户指南中找到,其中还包括众多使用示例以及如何向NGBoost添加新分布或分数的信息。
许可
参考文献
Tony Duan, Anand Avati, Daisy Yi Ding, Khanh K. Thai, Sanjay Basu, Andrew Y. Ng, Alejandro Schuler. 2019. NGBoost: Natural Gradient Boosting for Probabilistic Prediction. arXiv