掌握GBDT模型的Python实现技巧

版权申诉
5星 · 超过95%的资源 2 下载量 141 浏览量 更新于2024-10-17 收藏 19KB ZIP 举报
资源摘要信息:"GBDT(Gradient Boosting Decision Tree,梯度提升决策树)是一种基于决策树算法的集成学习方法,它通过不断添加新的树来改进模型的预测性能,具体是通过优化损失函数的梯度来实现的。GBDT能够处理各种类型的数据,包括数值型数据和类别型数据,是一种非常强大的非线性建模算法。 在本压缩包中,包含了一个关于GBDT模型的python实现的代码示例。代码中可能包含了GBDT的构建过程,从初始化模型开始,到添加新的树(即弱学习器)以逐步提高预测性能。在python中,GBDT可以通过一些现成的库来实现,如`scikit-learn`中的`GradientBoostingClassifier`或`GradientBoostingRegressor`。 使用`scikit-learn`实现GBDT模型时,通常会涉及到以下步骤: 1. 导入相关类和函数。 2. 准备数据集,包括特征矩阵X和标签向量y。 3. 初始化GBDT模型,设置基本参数,如树的数量、树的深度、学习率等。 4. 使用拟合方法(fit)训练模型,输入特征矩阵X和标签向量y。 5. 使用训练好的模型进行预测。 6. (可选)调整参数进行模型优化。 7. (可选)使用交叉验证等方法评估模型性能。 代码的具体内容可能包括了对GBDT模型参数的详细配置,以及如何利用已有的数据集进行模型训练和预测。通过这种方式,用户可以直接观察到GBDT模型如何在数据上工作,以及如何通过梯度提升来提高模型的准确率。 此外,代码中可能还包含了对GBDT模型进行调优的例子,例如通过网格搜索(GridSearchCV)找到最佳的超参数设置。代码示例的目的是为了让学习者能够更好地理解和掌握GBDT的工作原理以及实际应用。 GBDT的特点包括: - 能够自动处理特征选择。 - 具有良好的抗过拟合能力。 - 可以用于回归和分类问题。 - 可以处理大规模数据集。 通过本压缩包提供的内容,学习者能够加深对GBDT算法原理的理解,并通过实例代码提高自己在实际问题中应用GBDT模型的能力。" 由于文件标题中出现了"slightlyukz",这可能是一个用户名或者特定的标识。但考虑到这并不属于GBDT相关的核心知识,因此不做进一步的讨论。

# 导入模块 import prettytable as pt from sklearn.metrics import accuracy_score from sklearn.metrics import precision_score from sklearn.metrics import recall_score, f1_score from sklearn.metrics import roc_curve, auc # 创建表格对象 table = pt.PrettyTable() # 设置表格的列名 table.field_names = ["acc", "precision", "recall", "f1", "roc_auc"] # 循环添加数据 # 20个随机状态 for i in range(1): # # GBDT GBDT = GradientBoostingClassifier(learning_rate=0.1, min_samples_leaf=14, min_samples_split=6, max_depth=10, random_state=i, n_estimators=267 ) # GBDT = GradientBoostingClassifier(learning_rate=0.1, n_estimators=142,min_samples_leaf=80,min_samples_split=296,max_depth=7 , max_features='sqrt', random_state=66 # ) GBDT.fit(train_x, train_y) y_pred = GBDT.predict(test_x) # y_predprob = GBDT.predict_proba(test_x) print(y_pred) print('AUC Score:%.4g' % metrics.roc_auc_score(test_y.values, y_pred)) # print('AUC Score (test): %f' %metrics.roc_auc_score(test_y.values,y_predprob[:,1])) accuracy = GBDT.score(val_x, val_y) accuracy1 = GBDT.score(test_x, test_y) print("GBDT最终精确度:{},{}".format(accuracy, accuracy1)) y_predict3 = GBDT.predict(test_x) get_score(test_y, y_predict3, model_name='GBDT') acc = accuracy_score(test_y, y_predict3) # 准确率 prec = precision_score(test_y, y_predict3) # 精确率 recall = recall_score(test_y, y_predict3) # 召回率 f1 = f1_score(test_y, y_predict3) # F1 fpr, tpr, thersholds = roc_curve(test_y, y_predict3) roc_auc = auc(fpr, tpr) data1 = acc data2 = prec data3 = recall data4 = f1 data5 = roc_auc # 将数据添加到表格中 table.add_row([data1, data2, data3, data4, data5]) print(table) import pandas as pd # 将数据转换为DataFrame格式 df = pd.DataFrame(list(table), columns=["acc","prec","recall","f1","roc_auc"]) # 将DataFrame写入Excel文件 writer = pd.ExcelWriter('output.xlsx') df.to_excel(writer, index=False) writer.save(),出现上面的错误怎样更正

2023-05-29 上传