python回歸分析邏輯斯蒂模型之多分類任務(wù)詳解_第1頁
python回歸分析邏輯斯蒂模型之多分類任務(wù)詳解_第2頁
python回歸分析邏輯斯蒂模型之多分類任務(wù)詳解_第3頁
python回歸分析邏輯斯蒂模型之多分類任務(wù)詳解_第4頁
python回歸分析邏輯斯蒂模型之多分類任務(wù)詳解_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第python回歸分析邏輯斯蒂模型之多分類任務(wù)詳解目錄邏輯斯蒂回歸模型多分類任務(wù)1.ovr策略2.onevsone策略3.softmax策略邏輯斯蒂回歸模型多分類案例實(shí)現(xiàn)

邏輯斯蒂回歸模型多分類任務(wù)

上節(jié)中,我們使用邏輯斯蒂回歸完成了二分類任務(wù),針對多分類任務(wù),我們可以采用以下措施,進(jìn)行分類。

我們以三分類任務(wù)為例,類別分別為a,b,c。

1.ovr策略

我們可以訓(xùn)練a類別,非a類別的分類器,確認(rèn)未來的樣本是否為a類;同理,可以訓(xùn)練b類別,非b類別的分類器,確認(rèn)未來的樣本是否為b類;同理,可以訓(xùn)練c類別,非c類別的分類器,確認(rèn)未來的樣本是否為c類;這樣我們通過增加分類器的數(shù)量,K類訓(xùn)練K個分類器,完成多分類任務(wù)。

2.onevsone策略

我們將樣本根據(jù)類別進(jìn)行劃分,分別訓(xùn)練a與b、a與c、b與c之間的分類器,通過多個分類器判斷結(jié)果的匯總打分,判斷未來樣本的類別。同樣使用了增加分類的數(shù)量的方法,需要注意訓(xùn)練樣本的使用方法不同,K類訓(xùn)練K(K-1)/2個分類器,完成多分類任務(wù)

3.softmax策略

通過計(jì)算各個類別的概率,比較最高概率后,確定最終的類別。

對于類別互斥的情況,建議使用softmax,而不同類別之間關(guān)聯(lián)性較強(qiáng)時,建議使用增加多個分類器的策略。

邏輯斯蒂回歸模型多分類案例實(shí)現(xiàn)

本例我們使用sklearn數(shù)據(jù)集,鳶尾花數(shù)據(jù)。

1.加載數(shù)據(jù)

樣本總量:150組預(yù)測類別:山鳶尾,雜色鳶尾,弗吉尼亞鳶尾三類,各50組。樣本特征4種:花萼長度sepallength(cm)、花萼寬度sepalwidth(cm)、花瓣長度petallength(cm)、花瓣寬度petalwidth(cm)。

2.使用seaborn提供的pairplot方法,可視化展示特征與標(biāo)簽

3.訓(xùn)練模型

fromsklearn.datasetsimportload_iris

importpandasaspd

importseabornassns

frommatplotlibimportpyplotasplt

fromsklearn.model_selectionimporttrain_test_split

#加載數(shù)據(jù)

data=load_iris()

iris_target=data.target#

iris_df=pd.DataFrame(data=data.data,columns=data.feature_names)#利用Pandas轉(zhuǎn)化為DataFrame格式

iris_df['target']=iris_target

##特征與標(biāo)簽組合的散點(diǎn)可視化

sns.pairplot(data=iris_df,diag_kind='hist',hue='target')

plt.show()

#劃分?jǐn)?shù)據(jù)集

X=iris_df.iloc[:,:-1]

y=iris_df.iloc[:,-1]

x_train,x_test,y_train,y_test=train_test_split(X,y,test_size=0.2)

##創(chuàng)建邏輯回歸模型

clf=LogisticRegression(random_state=0,solver='lbfgs')

'''優(yōu)化算法選擇參數(shù):solver\

solver參數(shù)決定了我們對邏輯回歸損失函數(shù)的優(yōu)化方法,有4種算法可以選擇,分別是:

a)liblinear:使用了開源的liblinear庫實(shí)現(xiàn),內(nèi)部使用了坐標(biāo)軸下降法來迭代優(yōu)化損失函數(shù)。

b)lbfgs:擬牛頓法的一種,利用損失函數(shù)二階導(dǎo)數(shù)矩陣即海森矩陣來迭代優(yōu)化損失函數(shù)。

c)newton-cg:也是牛頓法家族的一種,利用損失函數(shù)二階導(dǎo)數(shù)矩陣即海森矩陣來迭代優(yōu)化損失函數(shù)。

d)sag:即隨機(jī)平均梯度下降,是梯度下降法的變種,和普通梯度下降法的區(qū)別是每次迭代僅僅用一部分的樣本來計(jì)算梯度,適合于樣本數(shù)據(jù)多的時候。

從上面的描述可以看出,newton-cg,lbfgs和sag這三種優(yōu)化算法時都需要損失函數(shù)的一階或者二階連續(xù)導(dǎo)數(shù),因此不能用于沒有連續(xù)導(dǎo)數(shù)的L1正則化,只能用于L2正則化。而liblinear通吃L1正則化和L2正則化。

同時,sag每次僅僅使用了部分樣本進(jìn)行梯度迭代,所以當(dāng)樣本量少的時候不要選擇它,而如果樣本量非常大,比如大于10萬,sag是第一選擇。但是sag不能用于L1正則化,所以當(dāng)你有大量的樣本,又需要L1正則化的話就要自己做取舍了。要么通過對樣本采樣來降低樣本量,要么回到L2正則化。

從上面的描述,大家可能覺得,既然newton-cg,lbfgs和sag這么多限制,如果不是大樣本,我們選擇liblinear不就行了嘛!錯,因?yàn)閘iblinear也有自己的弱點(diǎn)!我們知道,邏輯回歸有二元邏輯回歸和多元邏輯回歸。對于多元邏輯回歸常見的有one-vs-rest(OvR)和many-vs-many(MvM)兩種。而MvM一般比OvR分類相對準(zhǔn)確一些。郁悶的是liblinear只支持OvR,不支持MvM,這樣如果我們需要相對精確的多元邏輯回歸時,就不能選擇liblinear了。也意味著如果我們需要相對精確的多元邏輯回歸不能使用L1正則化了。

clf.fit(x_train,y_train)

##查看自變量對應(yīng)的系數(shù)w

print('theweightofLogisticRegression:\n',clf.coef_)

##查看常數(shù)項(xiàng)對應(yīng)的系數(shù)w0

print('theintercept(w0)ofLogisticRegression:\n',ercept_)

#模型1的變量重要性排序

coef_c1=pd.DataFrame({'var':pd.Series(x_test.columns),

'coef_abs':abs(pd.Series(clf.coef_[0].flatten()))

coef_c1=coef_c1.sort_values(by='coef_abs',ascending=False)

print(coef_c1)

#模型2的變量重要性排序

coef_c2=pd.DataFrame({'var':pd.Series(x_test.columns),

'coef_abs':abs(pd.Series(clf.coef_[1].flatten()))

coef_c2=coef_c2.sort_values(by='coef_abs',ascending=False)

print(coef_c2)

#模型3的變量重要性排序

coef_c3=pd.DataFrame({'var':pd.Series(x_test.columns),

'coef_abs':abs(pd.Series(clf.coef_[2].flatten()))

coef_c3=coef_c3.sort_values(by='coef_abs',ascending=False)

print(coef_c3)

4.對模型進(jìn)行評價:模型得分、交叉驗(yàn)證得分、混淆矩陣

fromsklearn.metricsimportaccuracy_score,recall_score

##模型評價

score=clf.score(x_train,y_train)#Returnthemeanaccuracyonthegiventestdataandlabels.

print(score)#0.628125

#模型在訓(xùn)練集上的得分

train_score=accuracy_score(y_train,clf.predict(x_train))

print(train_score)#0.628125

#模型在測試集上的得分

test_score=clf.score(x_test,y_test)

print(test_score)#0.6

y_predict=clf.predict(x_test)

#訓(xùn)練集的召回率

train_recall=recall_score(y_train,clf.predict(x_train),average='macro')

print("訓(xùn)練集召回率",train_recall)#0.47934382086167804

#測試集的召回率

test_recall=recall_score(y_test,clf.predict(x_test),average='macro')

print("測試集召回率",test_recall)#0.5002736726874658

fromsklearn.metricsimportclassification_report

print('測試數(shù)據(jù)指標(biāo):\n',classification_report(y_test,y_predict,digits=4))

#k-fold交叉驗(yàn)證得分

fromsklearn.model_selectionimportcross_val_score

scores=cross_val_score(clf,x_train,y_train,cv=10,scoring='accuracy')

print('十折交叉驗(yàn)證:每一次的得分',scores)

#結(jié)果:每一次的得分[0.593750.593750.68750.593750.531250.56250.656250.6250.718750.625]

print('十折交叉驗(yàn)證:平均得分',scores.mean())

#結(jié)果:平均得分0.61875

fromsklearn.preprocessingimportLabelEncoder

fromsklearn.metricsimportconfusion_matrix

importpandasaspd

labelEncoder=LabelEncoder()

labelEncoder.fit(y)##對變量y進(jìn)行硬編碼,將標(biāo)簽變?yōu)閿?shù)字

cm=confusion_matrix(y_test,y_predict)

cm_pd=pd.DataFrame(data=cm,columns=labelEncoder.classes_,index=labelEncoder.classes_)

print("混淆矩陣")

print(cm_pd)

importmatplotlib.p

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論