欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python回歸分析邏輯斯蒂模型之多分類(lèi)任務(wù)詳解

 更新時(shí)間:2022年09月09日 09:08:36   作者:人工智能學(xué)術(shù)前沿  
這篇文章主要為大家介紹了python回歸分析邏輯斯蒂模型之多分類(lèi)任務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

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

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

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

1.ovr策略

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

2.one vs one策略

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

3.softmax策略

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

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

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

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

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

  • 樣本總量:150組
  • 預(yù)測(cè)類(lèi)別:山鳶尾,雜色鳶尾,弗吉尼亞鳶尾三類(lèi),各50組。
  • 樣本特征4種:花萼長(zhǎng)度sepal length (cm) 、花萼寬度sepal width (cm)、花瓣長(zhǎng)度petal length (cm)、花瓣寬度petal width (cm)。

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

3.訓(xùn)練模型

from sklearn.datasets import load_iris
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt
from sklearn.model_selection import train_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ù)決定了我們對(duì)邏輯回歸損失函數(shù)的優(yōu)化方法,有4種算法可以選擇,分別是:
    a) liblinear:使用了開(kāi)源的liblinear庫(kù)實(shí)現(xiàn),內(nèi)部使用了坐標(biāo)軸下降法來(lái)迭代優(yōu)化損失函數(shù)。
    b) lbfgs:擬牛頓法的一種,利用損失函數(shù)二階導(dǎo)數(shù)矩陣即海森矩陣來(lái)迭代優(yōu)化損失函數(shù)。
    c) newton-cg:也是牛頓法家族的一種,利用損失函數(shù)二階導(dǎo)數(shù)矩陣即海森矩陣來(lái)迭代優(yōu)化損失函數(shù)。
    d) sag:即隨機(jī)平均梯度下降,是梯度下降法的變種,和普通梯度下降法的區(qū)別是每次迭代僅僅用一部分的樣本來(lái)計(jì)算梯度,適合于樣本數(shù)據(jù)多的時(shí)候。
    從上面的描述可以看出,newton-cg, lbfgs和sag這三種優(yōu)化算法時(shí)都需要損失函數(shù)的一階或者二階連續(xù)導(dǎo)數(shù),因此不能用于沒(méi)有連續(xù)導(dǎo)數(shù)的L1正則化,只能用于L2正則化。而liblinear通吃L(fǎng)1正則化和L2正則化。
    同時(shí),sag每次僅僅使用了部分樣本進(jìn)行梯度迭代,所以當(dāng)樣本量少的時(shí)候不要選擇它,而如果樣本量非常大,比如大于10萬(wàn),sag是第一選擇。但是sag不能用于L1正則化,所以當(dāng)你有大量的樣本,又需要L1正則化的話(huà)就要自己做取舍了。要么通過(guò)對(duì)樣本采樣來(lái)降低樣本量,要么回到L2正則化。
    從上面的描述,大家可能覺(jué)得,既然newton-cg, lbfgs和sag這么多限制,如果不是大樣本,我們選擇liblinear不就行了嘛!錯(cuò),因?yàn)閘iblinear也有自己的弱點(diǎn)!我們知道,邏輯回歸有二元邏輯回歸和多元邏輯回歸。對(duì)于多元邏輯回歸常見(jiàn)的有one-vs-rest(OvR)和many-vs-many(MvM)兩種。而MvM一般比OvR分類(lèi)相對(duì)準(zhǔn)確一些。郁悶的是liblinear只支持OvR,不支持MvM,這樣如果我們需要相對(duì)精確的多元邏輯回歸時(shí),就不能選擇liblinear了。也意味著如果我們需要相對(duì)精確的多元邏輯回歸不能使用L1正則化了。
'''
clf.fit(x_train, y_train)
## 查看自變量對(duì)應(yīng)的系數(shù)w
print('the weight of Logistic Regression:\n',clf.coef_)
## 查看常數(shù)項(xiàng)對(duì)應(yīng)的系數(shù)w0
print('the intercept(w0) of Logistic Regression:\n',clf.intercept_)
#模型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.對(duì)模型進(jìn)行評(píng)價(jià):模型得分、交叉驗(yàn)證得分、混淆矩陣

from sklearn.metrics import accuracy_score,recall_score
## 模型評(píng)價(jià)
score = clf.score(x_train,y_train)#Return the mean accuracy on the given test data and labels.
print(score)#0.628125
#模型在訓(xùn)練集上的得分
train_score = accuracy_score(y_train,clf.predict(x_train))
print(train_score)#0.628125
#模型在測(cè)試集上的得分
test_score = clf.score(x_test,y_test)
print(test_score)#0.6
#預(yù)測(cè)
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
#測(cè)試集的召回率
test_recall = recall_score(y_test, clf.predict(x_test), average='macro')
print("測(cè)試集召回率",test_recall)#0.5002736726874658
from sklearn.metrics import classification_report
print('測(cè)試數(shù)據(jù)指標(biāo):\n',classification_report(y_test,y_predict,digits=4))
#k-fold交叉驗(yàn)證得分
from sklearn.model_selection import cross_val_score
scores = cross_val_score(clf,x_train,y_train,cv=10,scoring='accuracy')
print('十折交叉驗(yàn)證:每一次的得分',scores)
#結(jié)果:每一次的得分 [0.59375 0.59375 0.6875  0.59375 0.53125 0.5625  0.65625 0.625   0.71875 0.625  ]
print('十折交叉驗(yàn)證:平均得分', scores.mean())
#結(jié)果:平均得分 0.61875
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import confusion_matrix
import pandas as pd
labelEncoder = LabelEncoder()
labelEncoder.fit(y)##對(duì)變量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)
import matplotlib.pyplot as plt
plt.matshow(confusion_matrix(y_test, y_predict))
plt.title('Confusion matrix')
plt.colorbar()
plt.ylabel('Actual type') #實(shí)際類(lèi)型
plt.xlabel('Forecast type') #預(yù)測(cè)類(lèi)型

以上就是python回歸分析邏輯斯蒂模型之多分類(lèi)任務(wù)詳解的詳細(xì)內(nèi)容,更多關(guān)于python邏輯斯蒂模型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論