那样的网站电子工程网络工程属于安防工程吗
2026/4/16 21:15:46 网站建设 项目流程
那样的网站,电子工程网络工程属于安防工程吗,如何建立一个网站共享,云开发网站1. 项目背景及解决问题的方案 1.1 项目背景 鸢尾花#xff08;Iris#xff09;数据集是机器学习领域经典的多分类基准数据集#xff0c;由Fisher于1936年提出#xff0c;常被用于验证分类算法的有效性。该数据集包含3类鸢尾花#xff08;山鸢尾、变色鸢尾、维吉尼亚鸢尾Iris数据集是机器学习领域经典的多分类基准数据集由Fisher于1936年提出常被用于验证分类算法的有效性。该数据集包含3类鸢尾花山鸢尾、变色鸢尾、维吉尼亚鸢尾共150条样本每条样本包含4个数值型特征花萼长度、花萼宽度、花瓣长度、花瓣宽度。本项目的核心背景与目标算法验证以鸢尾花分类问题为载体验证随机森林Random Forest——作为Bagging集成学习的改进算法——在多分类任务中的性能关键特性验证测试随机森林的“袋外样本OOB评分”无需额外验证集即可评估模型泛化能力特征价值分析通过随机森林的特征重要性输出明确哪些特征对鸢尾花分类最关键算法对比可选对比基础Bagging算法与随机森林的分类效果体现随机森林“特征随机”的优势。1.2 解决问题的方案针对“鸢尾花多分类”问题本项目采用**“数据预处理→模型构建→模型评估→特征分析”** 四步解决方案步骤具体操作数据预处理1. 加载鸢尾花数据集2. 选取特征先选花萼长宽后用全部4个特征3. 按7:3拆分训练集/测试集保证随机可复现模型构建1. 初始化随机森林分类器设置树数量、最大叶节点数、开启OOB评分2. 可选初始化基础Bagging分类器作为对比模型评估1. 输出OOB评分袋外样本准确率2. 用测试集预测计算分类准确率3. 可选对比Bagging的测试集准确率特征重要性分析用全特征训练随机森林输出4个特征的重要性得分明确核心分类特征2. 详细注释版代码含中文可视化/打印# 导入必要的库fromsklearn.ensembleimportRandomForestClassifier# 随机森林分类器fromsklearn.model_selectionimporttrain_test_split# 数据集拆分fromsklearn.ensembleimportBaggingClassifier# 基础Bagging分类器对比用fromsklearn.treeimportDecisionTreeClassifier# 决策树基学习器fromsklearn.metricsimportaccuracy_score# 分类准确率评估指标fromsklearn.datasetsimportload_iris# 加载鸢尾花数据集importmatplotlib.pyplotasplt# 可视化库importnumpyasnp# 数值计算库# 解决matplotlib中文显示问题 plt.rcParams[font.sans-serif][SimHei]# 用黑体显示中文plt.rcParams[axes.unicode_minus]False# 正常显示负号# 第一步数据加载与预处理 # 加载鸢尾花数据集包含特征、标签、特征名、标签名等信息irisload_iris()# 选取前2个特征花萼长度第0列、花萼宽度第1列用于简化模型验证Xiris.data[:,:2]# 标签0山鸢尾1变色鸢尾2维吉尼亚鸢尾yiris.target# 拆分训练集67%和测试集33%random_state42保证结果可复现# stratifyy分层拆分保证训练/测试集的类别分布与原数据一致X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.33,random_state42,stratifyy)print(*50)print(数据预处理完成)print(f训练集样本数{len(X_train)}测试集样本数{len(X_test)})print(f选取的特征{iris.feature_names[0]}、{iris.feature_names[1]})# 第二步随机森林模型训练与评估 # 初始化随机森林分类器# n_estimators15决策树数量为15# max_leaf_nodes16每棵树的最大叶节点数限制树复杂度防止过拟合# n_jobs1单线程运行便于调试# oob_scoreTrue开启袋外样本评分用未被抽样的样本评估模型rnd_clfRandomForestClassifier(n_estimators15,max_leaf_nodes16,n_jobs1,oob_scoreTrue,random_state42# 随机种子保证结果可复现)# 用训练集训练模型rnd_clf.fit(X_train,y_train)# 输出OOB评分袋外样本准确率无需测试集即可评估模型泛化能力print(*50)print(f随机森林袋外OOB样本准确率{rnd_clf.oob_score_:.4f})# 用训练好的模型预测测试集y_pred_rfrnd_clf.predict(X_test)# 计算测试集分类准确率rf_accaccuracy_score(y_test,y_pred_rf)print(f随机森林测试集分类准确率{rf_acc:.4f})# 可选基础Bagging分类器对比解除注释可运行 # 初始化Bagging分类器基学习器为随机拆分的决策树# bag_clf BaggingClassifier(# DecisionTreeClassifier(splitterrandom, max_leaf_nodes16), # 随机拆分的决策树# n_estimators15, # 基学习器数量与随机森林一致# max_samples1.0, # 每个基学习器使用100%的抽样样本# bootstrapTrue, # 开启有放回抽样Bootstrap# n_jobs1,# random_state42# )# bag_clf.fit(X_train, y_train) # 训练Bagging模型# y_pred_bag bag_clf.predict(X_test) # 测试集预测# bag_acc accuracy_score(y_test, y_pred_bag) # 计算准确率# print(f基础Bagging分类器测试集准确率{bag_acc:.4f})# 第三步全特征随机森林 特征重要性分析 print(*50)print(全特征随机森林特征重要性分析)# 重新初始化随机森林更多树更高稳定性用全部4个特征训练rnd_clf_fullRandomForestClassifier(n_estimators500,# 决策树数量增加到500提升特征重要性的稳定性n_jobs-1,# 使用全部CPU核心加速训练random_state42)# 用全部特征4个训练模型rnd_clf_full.fit(iris[data],iris[target])# 遍历特征名和对应的重要性得分打印输出feature_importance[]forname,scoreinzip(iris[feature_names],rnd_clf_full.feature_importances_):print(f特征{name}重要性得分{score:.4f})feature_importance.append((name,score))# 第四步特征重要性可视化柱状图 # 提取特征名和得分features[x[0]forxinfeature_importance]scores[x[1]forxinfeature_importance]# 创建画布设置大小plt.figure(figsize(10,6))# 绘制柱状图barsplt.bar(features,scores,color[#1f77b4,#ff7f0e,#2ca02c,#d62728])# 添加数值标签在柱子上方显示得分forbarinbars:heightbar.get_height()plt.text(bar.get_x()bar.get_width()/2.,height0.01,f{height:.4f},hacenter,vabottom,fontsize10)# 设置标题和坐标轴标签plt.title(鸢尾花分类 - 随机森林特征重要性,fontsize14)plt.xlabel(特征名称,fontsize12)plt.ylabel(重要性得分,fontsize12)# 旋转x轴标签避免重叠plt.xticks(rotation15)# 显示网格仅y轴plt.grid(axisy,linestyle--,alpha0.7)# 保存图片可选plt.savefig(特征重要性.png,dpi300,bbox_inchestight)# 显示图表plt.show()# 第五步二维特征分类结果可视化花萼长宽 print(*50)print(绘制二维特征花萼长宽的分类决策边界...)# 生成网格点用于绘制决策边界x_min,x_maxX[:,0].min()-0.5,X[:,0].max()0.5y_min,y_maxX[:,1].min()-0.5,X[:,1].max()0.5xx,yynp.meshgrid(np.arange(x_min,x_max,0.02),np.arange(y_min,y_max,0.02))# 用随机森林模型预测网格点的类别Zrnd_clf.predict(np.c_[xx.ravel(),yy.ravel()])ZZ.reshape(xx.shape)# 创建画布plt.figure(figsize(10,6))# 绘制决策边界等高线填充plt.contourf(xx,yy,Z,alpha0.3,cmapplt.cm.RdYlBu)# 绘制训练集样本点plt.scatter(X_train[:,0],X_train[:,1],cy_train,edgecolorsk,cmapplt.cm.RdYlBu,label训练集)# 绘制测试集样本点加空心圈区分plt.scatter(X_test[:,0],X_test[:,1],cy_test,edgecolorsk,cmapplt.cm.RdYlBu,markero,facecolorsnone,s100,label测试集)# 设置标题和坐标轴标签plt.title(随机森林分类决策边界花萼长度 vs 花萼宽度,fontsize14)plt.xlabel(iris.feature_names[0],fontsize12)plt.ylabel(iris.feature_names[1],fontsize12)# 添加图例plt.legend(locupper left)# 显示网格plt.grid(alpha0.3)# 保存图片plt.savefig(分类决策边界.png,dpi300,bbox_inchestight)# 显示图表plt.show()3. 简洁版代码保留核心逻辑fromsklearn.ensembleimportRandomForestClassifierfromsklearn.model_selectionimporttrain_test_splitfromsklearn.ensembleimportBaggingClassifierfromsklearn.treeimportDecisionTreeClassifierfromsklearn.metricsimportaccuracy_scorefromsklearn.datasetsimportload_irisimportmatplotlib.pyplotaspltimportnumpyasnp plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]Falseirisload_iris()Xiris.data[:,:2]yiris.target X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.33,random_state42,stratifyy)print(*50)print(f训练集样本数{len(X_train)}测试集样本数{len(X_test)})rnd_clfRandomForestClassifier(n_estimators15,max_leaf_nodes16,n_jobs1,oob_scoreTrue,random_state42)rnd_clf.fit(X_train,y_train)print(*50)print(f随机森林袋外OOB样本准确率{rnd_clf.oob_score_:.4f})y_pred_rfrnd_clf.predict(X_test)rf_accaccuracy_score(y_test,y_pred_rf)print(f随机森林测试集分类准确率{rf_acc:.4f})print(*50)print(全特征随机森林特征重要性分析)rnd_clf_fullRandomForestClassifier(n_estimators500,n_jobs-1,random_state42)rnd_clf_full.fit(iris[data],iris[target])feature_importance[]forname,scoreinzip(iris[feature_names],rnd_clf_full.feature_importances_):print(f特征{name}重要性得分{score:.4f})feature_importance.append((name,score))features[x[0]forxinfeature_importance]scores[x[1]forxinfeature_importance]plt.figure(figsize(10,6))barsplt.bar(features,scores,color[#1f77b4,#ff7f0e,#2ca02c,#d62728])forbarinbars:heightbar.get_height()plt.text(bar.get_x()bar.get_width()/2.,height0.01,f{height:.4f},hacenter,vabottom,fontsize10)plt.title(鸢尾花分类 - 随机森林特征重要性,fontsize14)plt.xlabel(特征名称,fontsize12)plt.ylabel(重要性得分,fontsize12)plt.xticks(rotation15)plt.grid(axisy,linestyle--,alpha0.7)plt.savefig(特征重要性.png,dpi300,bbox_inchestight)plt.show()print(*50)print(绘制二维特征花萼长宽的分类决策边界...)x_min,x_maxX[:,0].min()-0.5,X[:,0].max()0.5y_min,y_maxX[:,1].min()-0.5,X[:,1].max()0.5xx,yynp.meshgrid(np.arange(x_min,x_max,0.02),np.arange(y_min,y_max,0.02))Zrnd_clf.predict(np.c_[xx.ravel(),yy.ravel()])ZZ.reshape(xx.shape)plt.figure(figsize(10,6))plt.contourf(xx,yy,Z,alpha0.3,cmapplt.cm.RdYlBu)plt.scatter(X_train[:,0],X_train[:,1],cy_train,edgecolorsk,cmapplt.cm.RdYlBu,label训练集)plt.scatter(X_test[:,0],X_test[:,1],cy_test,edgecolorsk,cmapplt.cm.RdYlBu,markero,facecolorsnone,s100,label测试集)plt.title(随机森林分类决策边界花萼长度 vs 花萼宽度,fontsize14)plt.xlabel(iris.feature_names[0],fontsize12)plt.ylabel(iris.feature_names[1],fontsize12)plt.legend(locupper left)plt.grid(alpha0.3)plt.savefig(分类决策边界.png,dpi300,bbox_inchestight)plt.show()关键输出说明OOB评分通常在0.85~0.95之间代表模型在未参与训练的“袋外样本”上的准确率反映泛化能力测试集准确率基于花萼长宽两个特征准确率约0.7~0.8若用全部4个特征准确率接近1.0特征重要性花瓣长度petal length和花瓣宽度petal width的重要性得分远高于花萼特征是鸢尾花分类的核心特征可视化图表特征重要性柱状图直观展示各特征的贡献度决策边界图可看到随机森林对二维特征的分类边界以及训练/测试样本的分布。

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

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

立即咨询