有哪些简单的网站小游戏网站建设
2025/12/29 12:29:03 网站建设 项目流程
有哪些简单的网站,小游戏网站建设,小城建设的网站,网站制作服务公司一、项目背景及解决问题的方案 1. 项目背景 在机器学习分类任务中#xff0c;单一模型难以同时兼顾非线性特征挖掘能力和模型可解释性/泛化稳定性#xff1a; 梯度提升决策树#xff08;GBDT#xff09;#xff1a;擅长挖掘特征间的非线性关系、处理高维/异构特征#xf…一、项目背景及解决问题的方案1. 项目背景在机器学习分类任务中单一模型难以同时兼顾非线性特征挖掘能力和模型可解释性/泛化稳定性梯度提升决策树GBDT擅长挖掘特征间的非线性关系、处理高维/异构特征对缺失值不敏感但易过拟合、可解释性差单独使用时泛化能力受超参数影响大逻辑回归LR模型简单、可解释性强能输出概率和特征权重、训练/预测速度快是工业界如CTR预估、风控的经典基线但对非线性特征建模能力弱依赖人工特征工程。为结合两者优势工业界提出「GBDTLR」组合方案用GBDT做「自动特征工程器」将原始特征映射为离散的非线性特征再输入LR分类。本项目以鸢尾花数据集为示例将多分类任务改造为二分类实现该组合模型并验证其性能。2. 解决方案核心思路利用GBDT的叶子节点索引做特征编码将非线性特征转化为LR可处理的离散特征最终用LR完成分类。具体步骤数据预处理加载鸢尾花数据集将「是否为第三类鸢尾花」作为二分类标签划分训练/测试集6:4GBDT训练训练GBDT模型挖掘原始特征的非线性规律特征编码通过GBDT的apply方法提取样本的叶子节点索引对索引做One-Hot编码生成新特征LR训练用编码后的新特征训练LR得到GBDTLR组合模型性能评估分别计算单独GBDT和GBDTLR的AUC对比两者效果。二、添加详细注释的完整代码含中文说明、可视化# 导入必要的库importnumpyasnpimportmatplotlib.pyplotasplt# 补充可视化库# 导入GBDT分类器fromsklearn.ensembleimportGradientBoostingClassifier# 导入逻辑回归分类器fromsklearn.linear_modelimportLogisticRegression# 导入AUC评估指标fromsklearn.metricsimportroc_auc_score# 导入One-Hot编码器fromsklearn.preprocessingimportOneHotEncoder# 导入鸢尾花数据集fromsklearn.datasetsimportload_iris# 导入数据集划分工具fromsklearn.model_selectionimporttrain_test_split# 设置中文显示解决plt中文乱码问题plt.rcParams[font.sans-serif][SimHei]# 黑体plt.rcParams[axes.unicode_minus]False# 解决负号显示问题classGradientBoostingWithLR(object):GBDTLR组合模型类实现GBDT特征编码 LR分类的端到端流程def__init__(self):初始化模型相关变量self.gbdt_modelNone# 存储训练好的GBDT模型self.lr_modelNone# 存储训练好的LR模型self.gbdt_encoderNone# 存储One-Hot编码器self.X_train_leafsNone# 训练集样本的GBDT叶子节点索引self.X_test_leafsNone# 测试集样本的GBDT叶子节点索引self.X_transNone# 训练集叶子节点索引的One-Hot编码结果defgbdt_train(self,X_train,y_train): 训练GBDT模型 参数 X_train: 训练集特征矩阵np.array y_train: 训练集标签np.array 返回 训练好的GBDT模型 # 初始化GBDT模型gbdt_modelGradientBoostingClassifier(n_estimators10,# 决策树数量10棵max_depth6,# 单棵树最大深度6verbose0,# 训练过程不打印日志max_features0.5# 每棵树使用50%的特征)# 用训练集训练GBDT模型gbdt_model.fit(X_train,y_train)returngbdt_modeldeflr_train(self,X_train,y_train): 训练逻辑回归模型 参数 X_train: 训练集特征矩阵One-Hot编码后的 y_train: 训练集标签np.array 返回 训练好的LR模型 # 初始化LR模型使用默认参数lr_modelLogisticRegression()# 用编码后的特征训练LR模型lr_model.fit(X_train,y_train)returnlr_modeldefgbdt_lr_train(self,X_train,y_train): 端到端训练GBDTLR组合模型 参数 X_train: 原始训练集特征矩阵 y_train: 训练集标签 返回 训练好的LR模型组合模型核心 # 第一步训练GBDT模型self.gbdt_modelself.gbdt_train(X_train,y_train)# 第二步用GBDT提取训练集样本的叶子节点索引# apply方法返回形状为[样本数, 树数量, 1]的数组[:, :, 0]降维为[样本数, 树数量]self.X_train_leafsself.gbdt_model.apply(X_train)[:,:,0]# 第三步初始化One-Hot编码器对叶子节点索引做编码self.gbdt_encoderOneHotEncoder(sparseFalse)# 拟合编码器并转换训练集叶子节点索引self.X_transself.gbdt_encoder.fit_transform(self.X_train_leafs)# 第四步用编码后的特征训练LR模型self.lr_modelself.lr_train(self.X_trans,y_train)returnself.lr_modeldefgbdt_lr_pred(self,model,X_test,y_test): 用GBDTLR组合模型预测并评估AUC 参数 model: 训练好的LR模型 X_test: 原始测试集特征矩阵 y_test: 测试集标签 返回 组合模型的AUC分数 # 第一步提取测试集样本的GBDT叶子节点索引self.X_test_leafsself.gbdt_model.apply(X_test)[:,:,0]# 第二步合并训练集和测试集的叶子节点索引保证One-Hot编码维度一致(train_rows,cols)self.X_train_leafs.shape# 获取训练集样本数和特征数X_all_leafsnp.concatenate((self.X_train_leafs,self.X_test_leafs),axis0)# 对合并后的索引做One-Hot编码X_trans_allself.gbdt_encoder.fit_transform(X_all_leafs)# 第三步提取测试集的编码特征预测正类概率y_predmodel.predict_proba(X_trans_all[train_rows:])[:,1]# 计算AUC分数auc_scoreroc_auc_score(y_test,y_pred)# 打印中文说明的AUC结果print(fGBDTLR组合模型 AUC分数{auc_score:.5f})returnauc_scoredefmodel_assessment(self,model,X_test,y_test,model_nameGBDT): 通用模型评估函数计算AUC 参数 model: 待评估的模型GBDT/LR等 X_test: 测试集特征矩阵 y_test: 测试集标签 model_name: 模型名称用于打印日志 返回 模型的AUC分数 # 预测测试集正类概率y_predmodel.predict_proba(X_test)[:,1]# 计算AUC分数auc_scoreroc_auc_score(y_test,y_pred)# 打印中文说明的AUC结果print(f{model_name}模型 AUC分数{auc_score:.5f})returnauc_scoredefload_data(): 数据加载与预处理函数 1. 加载鸢尾花数据集 2. 将多分类任务转为二分类是否为第三类鸢尾花Virginica 3. 划分训练集60%和测试集40% 返回 X_train: 训练集特征 X_test: 测试集特征 y_train: 训练集标签 y_test: 测试集标签 # 加载鸢尾花数据集iris_dataload_iris()# 提取特征矩阵Xiris_data[data]# 构造二分类标签y1表示是第三类鸢尾花y0表示不是yiris_data[target]2# 划分训练集和测试集测试集占40%随机种子固定为0保证结果可复现X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.4,random_state0)returnX_train,X_test,y_train,y_testif__name____main__:# 1. 加载并预处理数据X_train,X_test,y_train,y_testload_data()# 2. 初始化GBDTLR组合模型实例gblrGradientBoostingWithLR()# 3. 训练组合模型gbdt_lr_modelgblr.gbdt_lr_train(X_train,y_train)# 4. 评估单独GBDT模型的性能gbdt_aucgblr.model_assessment(gblr.gbdt_model,X_test,y_test,model_name单独GBDT)# 5. 评估GBDTLR组合模型的性能gbdt_lr_aucgblr.gbdt_lr_pred(gbdt_lr_model,X_test,y_test)# 6. 补充可视化绘制AUC对比柱状图models[单独GBDT,GBDTLR组合模型]auc_scores[gbdt_auc,gbdt_lr_auc]plt.bar(models,auc_scores,color[#1f77b4,#ff7f0e])plt.title(模型AUC性能对比)plt.ylabel(AUC分数)plt.ylim(0.9,1.0)# 限定y轴范围突出差异# 在柱状图上标注具体数值fori,scoreinenumerate(auc_scores):plt.text(i,score0.005,f{score:.5f},hacenter)plt.show()三、去除所有注释的简洁版代码以下是完全去除所有注释、仅保留核心代码的简洁版适配新版sklearn且可直接运行importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.ensembleimportGradientBoostingClassifierfromsklearn.linear_modelimportLogisticRegressionfromsklearn.metricsimportroc_auc_scorefromsklearn.preprocessingimportOneHotEncoderfromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_split plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]FalseclassGradientBoostingWithLR(object):def__init__(self):self.gbdt_modelNoneself.lr_modelNoneself.gbdt_encoderNoneself.X_train_leafsNoneself.X_test_leafsNoneself.X_transNonedefgbdt_train(self,X_train,y_train):gbdt_modelGradientBoostingClassifier(n_estimators10,max_depth6,verbose0,max_features0.5)gbdt_model.fit(X_train,y_train)returngbdt_modeldeflr_train(self,X_train,y_train):lr_modelLogisticRegression()lr_model.fit(X_train,y_train)returnlr_modeldefgbdt_lr_train(self,X_train,y_train):self.gbdt_modelself.gbdt_train(X_train,y_train)self.X_train_leafsself.gbdt_model.apply(X_train)[:,:,0]self.gbdt_encoderOneHotEncoder(sparseFalse)self.X_transself.gbdt_encoder.fit_transform(self.X_train_leafs)self.lr_modelself.lr_train(self.X_trans,y_train)returnself.lr_modeldefgbdt_lr_pred(self,model,X_test,y_test):self.X_test_leafsself.gbdt_model.apply(X_test)[:,:,0](train_rows,cols)self.X_train_leafs.shape X_all_leafsnp.concatenate((self.X_train_leafs,self.X_test_leafs),axis0)X_trans_allself.gbdt_encoder.fit_transform(X_all_leafs)y_predmodel.predict_proba(X_trans_all[train_rows:])[:,1]auc_scoreroc_auc_score(y_test,y_pred)print(fGBDTLR组合模型 AUC分数{auc_score:.5f})returnauc_scoredefmodel_assessment(self,model,X_test,y_test,model_nameGBDT):y_predmodel.predict_proba(X_test)[:,1]auc_scoreroc_auc_score(y_test,y_pred)print(f{model_name}模型 AUC分数{auc_score:.5f})returnauc_scoredefload_data():iris_dataload_iris()Xiris_data[data]yiris_data[target]2X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.4,random_state0)returnX_train,X_test,y_train,y_testif__name____main__:X_train,X_test,y_train,y_testload_data()gblrGradientBoostingWithLR()gbdt_lr_modelgblr.gbdt_lr_train(X_train,y_train)gbdt_aucgblr.model_assessment(gblr.gbdt_model,X_test,y_test,model_name单独GBDT)gbdt_lr_aucgblr.gbdt_lr_pred(gbdt_lr_model,X_test,y_test)models[单独GBDT,GBDTLR组合模型]auc_scores[gbdt_auc,gbdt_lr_auc]plt.bar(models,auc_scores,color[#1f77b4,#ff7f0e])plt.title(模型AUC性能对比)plt.ylabel(AUC分数)plt.ylim(0.9,1.0)fori,scoreinenumerate(auc_scores):plt.text(i,score0.005,f{score:.5f},hacenter)plt.show()运行结果 单独GBDT模型 AUC分数0.97192 GBDTLR组合模型 AUC分数0.98962 进程已结束退出代码为 0

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询