金堂做網(wǎng)站的公司個(gè)人網(wǎng)頁(yè)模板網(wǎng)站
鶴壁市浩天電氣有限公司
2026/01/24 18:01:44
金堂做網(wǎng)站的公司,個(gè)人網(wǎng)頁(yè)模板網(wǎng)站,找網(wǎng)站建設(shè)的企業(yè),wordpress插件mip一、多分類策略
邏輯回歸處理多分類主要有三種策略#xff1a;
OvR#xff08;One-vs-Rest#xff09;
為每個(gè)類別訓(xùn)練一個(gè)二分類器
預(yù)測(cè)時(shí)選擇概率最高的類別
Scikit-learn默認(rèn)使用此方法
OvO#xff08;One-vs-One#xff09;
為每對(duì)類別訓(xùn)練一個(gè)分類器
適合類別較少但樣…一、多分類策略邏輯回歸處理多分類主要有三種策略O(shè)vROne-vs-Rest為每個(gè)類別訓(xùn)練一個(gè)二分類器預(yù)測(cè)時(shí)選擇概率最高的類別Scikit-learn默認(rèn)使用此方法OvOOne-vs-One為每對(duì)類別訓(xùn)練一個(gè)分類器適合類別較少但樣本均衡的情況Softmax回歸Multinomial直接輸出多個(gè)類別的概率分布使用交叉熵?fù)p失函數(shù)二、完整實(shí)戰(zhàn)代碼示例importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltimportseabornassnsfromsklearnimportdatasetsfromsklearn.model_selectionimporttrain_test_split,cross_val_score,GridSearchCVfromsklearn.preprocessingimportStandardScalerfromsklearn.linear_modelimportLogisticRegressionfromsklearn.metricsimport(classification_report,confusion_matrix,accuracy_score,roc_curve,auc,roc_auc_score)fromsklearn.multiclassimportOneVsRestClassifierimportwarnings warnings.filterwarnings(ignore)# 設(shè)置中文顯示plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]False步驟1加載和準(zhǔn)備數(shù)據(jù)# 加載鳶尾花數(shù)據(jù)集3個(gè)類別irisdatasets.load_iris()Xiris.data yiris.target feature_namesiris.feature_names target_namesiris.target_namesprint(f特征形狀:{X.shape})print(f標(biāo)簽形狀:{y.shape})print(f類別:{target_names})print(f特征名:{feature_names})# 查看數(shù)據(jù)分布print(
類別分布:)fori,nameinenumerate(target_names):print(f{name}:{np.sum(yi)}個(gè)樣本)# 劃分訓(xùn)練集和測(cè)試集X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.3,random_state42,stratifyy)# 標(biāo)準(zhǔn)化特征scalerStandardScaler()X_train_scaledscaler.fit_transform(X_train)X_test_scaledscaler.transform(X_test)步驟2模型訓(xùn)練與評(píng)估方法1使用默認(rèn)的OvR策略# 創(chuàng)建邏輯回歸模型默認(rèn)使用OvRmodel_ovrLogisticRegression(multi_classovr,# One-vs-Restsolverlbfgs,# 適用于小數(shù)據(jù)集max_iter1000,random_state42,C1.0# 正則化強(qiáng)度越小正則化越強(qiáng))# 訓(xùn)練模型model_ovr.fit(X_train_scaled,y_train)# 預(yù)測(cè)y_pred_ovrmodel_ovr.predict(X_test_scaled)y_pred_proba_ovrmodel_ovr.predict_proba(X_test_scaled)# 評(píng)估print( OvR策略評(píng)估 )print(f準(zhǔn)確率:{accuracy_score(y_test,y_pred_ovr):.4f})print(
分類報(bào)告:)print(classification_report(y_test,y_pred_ovr,target_namestarget_names))方法2使用Softmax回歸# 創(chuàng)建Softmax回歸模型model_softmaxLogisticRegression(multi_classmultinomial,# Softmax回歸solverlbfgs,max_iter1000,random_state42,C1.0)# 訓(xùn)練模型model_softmax.fit(X_train_scaled,y_train)# 預(yù)測(cè)y_pred_softmaxmodel_softmax.predict(X_test_scaled)# 評(píng)估print(
Softmax回歸評(píng)估 )print(f準(zhǔn)確率:{accuracy_score(y_test,y_pred_softmax):.4f})print(
分類報(bào)告:)print(classification_report(y_test,y_pred_softmax,target_namestarget_names))方法3使用OneVsRestClassifier包裝器# 使用包裝器實(shí)現(xiàn)OvRmodel_ovr_wrapperOneVsRestClassifier(LogisticRegression(solverlbfgs,max_iter1000,random_state42))model_ovr_wrapper.fit(X_train_scaled,y_train)y_pred_ovr_wrappermodel_ovr_wrapper.predict(X_test_scaled)print(
OvR包裝器評(píng)估 )print(f準(zhǔn)確率:{accuracy_score(y_test,y_pred_ovr_wrapper):.4f})步驟3可視化分析defplot_confusion_matrix(y_true,y_pred,class_names,title):繪制混淆矩陣cmconfusion_matrix(y_true,y_pred)plt.figure(figsize(8,6))sns.heatmap(cm,annotTrue,fmtd,cmapBlues,xticklabelsclass_names,yticklabelsclass_names)plt.title(f混淆矩陣 -{title},fontsize14)plt.ylabel(真實(shí)標(biāo)簽)plt.xlabel(預(yù)測(cè)標(biāo)簽)plt.tight_layout()plt.show()# 繪制混淆矩陣plot_confusion_matrix(y_test,y_pred_ovr,target_names,OvR策略)# 繪制特征重要性defplot_feature_importance(model,feature_names,target_names):繪制特征重要性權(quán)重ifhasattr(model,coef_):weightsmodel.coef_ fig,axesplt.subplots(1,len(target_names),figsize(15,5))fori,(ax,class_name)inenumerate(zip(axes,target_names)):ax.barh(feature_names,weights[i])ax.set_title(f類別:{class_name})ax.set_xlabel(權(quán)重)plt.suptitle(邏輯回歸特征權(quán)重每個(gè)類別的決策邊界,fontsize14)plt.tight_layout()plt.show()plot_feature_importance(model_ovr,feature_names,target_names)步驟4概率可視化# 繪制預(yù)測(cè)概率分布defplot_probability_distribution(y_pred_proba,y_true,target_names):繪制預(yù)測(cè)概率分布fig,axesplt.subplots(1,3,figsize(15,5))fori,(ax,class_name)inenumerate(zip(axes,target_names)):# 獲取屬于當(dāng)前類別的樣本的概率true_class_mask(y_truei)prob_for_classy_pred_proba[true_class_mask,i]ax.hist(prob_for_class,bins20,alpha0.7,colorskyblue,edgecolorblack)ax.set_title(f{class_name}的預(yù)測(cè)概率分布)ax.set_xlabel(預(yù)測(cè)概率)ax.set_ylabel(樣本數(shù))ax.grid(True,alpha0.3)plt.suptitle(各類別預(yù)測(cè)概率分布,fontsize14)plt.tight_layout()plt.show()plot_probability_distribution(y_pred_proba_ovr,y_test,target_names)步驟5模型調(diào)優(yōu)# 使用網(wǎng)格搜索尋找最佳參數(shù)param_grid{C:[0.001,0.01,0.1,1,10,100],# 正則化強(qiáng)度solver:[lbfgs,liblinear,saga],max_iter:[100,500,1000]}# 創(chuàng)建網(wǎng)格搜索grid_searchGridSearchCV(LogisticRegression(multi_classovr,random_state42),param_grid,cv5,scoringaccuracy,n_jobs-1,verbose1)# 執(zhí)行網(wǎng)格搜索grid_search.fit(X_train_scaled,y_train)print(
網(wǎng)格搜索結(jié)果 )print(f最佳參數(shù):{grid_search.best_params_})print(f最佳交叉驗(yàn)證準(zhǔn)確率:{grid_search.best_score_:.4f})print(f測(cè)試集準(zhǔn)確率:{grid_search.score(X_test_scaled,y_test):.4f})# 使用最佳模型best_modelgrid_search.best_estimator_ y_pred_bestbest_model.predict(X_test_scaled)print(
最佳模型評(píng)估 )print(classification_report(y_test,y_pred_best,target_namestarget_names))步驟6交叉驗(yàn)證評(píng)估# 交叉驗(yàn)證評(píng)估模型穩(wěn)定性cv_scorescross_val_score(best_model,X_train_scaled,y_train,cv5,scoringaccuracy)print(
交叉驗(yàn)證結(jié)果 )print(f交叉驗(yàn)證準(zhǔn)確率:{cv_scores.mean():.4f}(/-{cv_scores.std()*2:.4f}))print(f各折準(zhǔn)確率:{cv_scores})# 繪制交叉驗(yàn)證結(jié)果plt.figure(figsize(10,6))plt.plot(range(1,6),cv_scores,markero,linewidth2,markersize8)plt.axhline(ycv_scores.mean(),colorr,linestyle--,labelf均值:{cv_scores.mean():.4f})plt.fill_between(range(1,6),cv_scores.mean()-cv_scores.std(),cv_scores.mean()cv_scores.std(),alpha0.2,colorgray)plt.title(5折交叉驗(yàn)證準(zhǔn)確率,fontsize14)plt.xlabel(折數(shù))plt.ylabel(準(zhǔn)確率)plt.legend()plt.grid(True,alpha0.3)plt.ylim([0.8,1.0])plt.show()三、關(guān)鍵要點(diǎn)總結(jié)1.策略選擇類別較少且均衡考慮OvO類別較多使用OvR或SoftmaxSoftmax通常更直接但需要計(jì)算所有類別的概率2.特征工程邏輯回歸對(duì)特征縮放敏感務(wù)必標(biāo)準(zhǔn)化特征間的多重共線性會(huì)影響結(jié)果3.正則化參數(shù)C控制正則化強(qiáng)度C越小正則化越強(qiáng)防止過擬合的重要工具4.模型評(píng)估多分類使用準(zhǔn)確率、混淆矩陣、分類報(bào)告考慮使用宏平均和微平均5.注意事項(xiàng)邏輯回歸假設(shè)特征與log odds線性相關(guān)對(duì)于非線性問題需要特征工程或使用核方法類別不平衡時(shí)需要調(diào)整class_weight參數(shù)