拓端tecdat|Python多項式Logistic邏輯迴歸進行多類別分類和交叉驗證準確度箱
原文連結:http://tecdat.cn/?p=25583
原文出處:拓端資料部落公眾號
多項式邏輯迴歸是邏輯迴歸的擴充套件,它增加了對多類分類問題的支援。
預設情況下,邏輯迴歸僅限於兩類分類問題。一些擴充套件,可以允許將邏輯迴歸用於多類分類問題,儘管它們要求首先將分類問題轉換為多個二元分類問題。
相反,多項邏輯迴歸演算法是邏輯迴歸模型的擴充套件,涉及將損失函式更改為交叉熵損失,並將概率分佈預測為多項概率分佈,以原生支援多類分類問題。
在本教程中,您將瞭解如何在Python中開發多項邏輯迴歸模型。
完成本教程後,您將瞭解:
- 多項邏輯迴歸是邏輯迴歸的擴充套件,用於多類分類。
- 如何開發和評估多項邏輯迴歸並開發最終模型以對新資料進行預測。
- 如何調整多項邏輯迴歸模型的懲罰超引數。
教程概述
本教程分為三個部分:
- 多項邏輯迴歸
- 評估多項邏輯迴歸模型
- 多項 Logistic邏輯迴歸的調整懲罰
多項邏輯Logistic迴歸
邏輯迴歸是一種分類演算法。
它適用於具有數字輸入變數和具有兩個值或類的分類目標變數的資料集。這種型別的問題被稱為二元分類問題。
邏輯迴歸是為兩類問題設計的,使用二項式概率分佈函式。對於正類或結果,類標籤對映到 1,對於負類或結果,對映到 0。擬合模型預測示例屬於第 1 類的概率。
預設情況下,邏輯迴歸不能用於具有兩個以上類別標籤的分類任務,即所謂的多類別分類。
相反,它需要修改以支援多類分類問題。
使邏輯迴歸適應多類分類問題的一種流行方法是將多類分類問題拆分為多個二元分類問題,並在每個子問題上擬合標準邏輯迴歸模型。
另一種方法涉及更改邏輯迴歸模型以直接支援多個類別標籤的預測。具體來說,預測輸入示例屬於每個已知類標籤的概率。
定義多類概率的概率分佈稱為多項概率分佈。適用於學習和預測多項概率分佈的邏輯迴歸模型稱為多項邏輯迴歸。同樣,我們可以將預設或標準邏輯迴歸稱為二項式邏輯迴歸。
- 二項式邏輯迴歸:標準邏輯迴歸,預測每個輸入示例的二項式概率(即兩個類別)。
- 多項式邏輯迴歸:邏輯迴歸的修改版本,預測每個輸入示例的多項概率(即多於兩個類別)。
將邏輯迴歸從二項式概率改為多項式概率,需要改變用於訓練模型的損失函式(例如,將對數損失改為交叉熵損失),並將輸出從單一概率值改為每個類標籤的一個概率。
現在我們已經熟悉了多項邏輯迴歸,讓我們看看我們如何在Python中開發和評估多項邏輯迴歸模型。
評估多指標Logistic迴歸模型
在本節中,我們將使用Python機器學習庫開發並評估一個多項邏輯迴歸模型。
首先,我們將定義一個合成的多類分類資料集,作為基礎。這是一個通用的資料集,以後你可以很容易地用你自己載入的資料集來替換。
classification()函式可以用來生成一個具有一定數量的行、列和類的資料集。在這種情況下,我們將生成一個具有1000行、10個輸入變數或列和3個類的資料集。
下面的例子總結了陣列的形狀和三個類中的例子分佈。
- # 測試分類資料集
- import Counter
- # 定義資料集
- X, y = mclas
- # 對資料集進行總結
執行這個例子,證實了資料集有1,000行和10列,正如我們預期的那樣,而且這些行大約均勻地分佈在三個類別中,每個類別中大約有334個例子。
scikit庫支援Logistic迴歸。
將 "solver "引數設定為支援多指標邏輯迴歸的解算器,從而配置為多指標邏輯迴歸。
- # 定義多項式邏輯迴歸模型
- modl = LoRe(muss)
多項式邏輯迴歸模型將使用交叉熵損失進行擬合,並將預測每個整數編碼的類標籤的整數值。
現在我們已經熟悉了多項邏輯迴歸API,我們可以看看如何在我們的合成多類分類資料集上評估一個多項邏輯迴歸模型。
使用重複分層的k-fold交叉驗證來評估分類模型是一個好的做法。分層確保了每個交叉驗證折在每個類別中的例子的分佈與整個訓練資料集大致相同。
我們將使用10個折的三次重複,這是一個很好的預設值,並且考慮到類的平衡,使用分類精度來評估模型效能。
下面列出了評估多類分類的多項邏輯迴歸的完整例子。
- # 評估多指標Logistic迴歸模型
- from numpy import mean
- # 定義資料集
- X, y = makeclas
- # 定義多項式邏輯迴歸模型
- modl = LogReg
- # 定義模型的評估程式
- cv = RepeKFold
- # 評估模型並收集分數
- n_scores = crovalsc
- # 報告模型的效能
- print('Mean Accurac)
執行這個例子可以報告所有交叉驗證和評估程式的重複的平均分類準確率。
注意:鑑於演算法或評估程式的隨機性,或數字精度的差異,你的結果可能會有所不同。考慮把這個例子執行幾次,然後比較平均結果。
在這個例子中,我們可以看到,在我們的合成分類資料集上,帶有預設懲罰的多項邏輯迴歸模型取得了約68.1%的平均分類精度。
我們可以決定使用多項邏輯迴歸模型作為我們的最終模型,並對新資料進行預測。
這可以通過首先在所有可用資料上擬合模型,然後呼叫predict()函式對新資料進行預測來實現。
下面的例子演示瞭如何使用多項邏輯迴歸模型對新資料進行預測。
- # 用多指標邏輯迴歸模型進行預測
- from sklearn.datasets
- # 定義資料集
- X, y = makclas
- # 定義多項式邏輯迴歸模型
- model = LogRegr
- # 在整個資料集上擬合該模型
- fit(X, y)
- # 定義單行輸入資料
- row
- # 預測類別標籤
- predict([row])
- # 對預測的類進行總結
- print('Predic
執行這個例子首先在所有可用的資料上擬合模型,然後定義一行資料,提供給模型,以便進行預測。
在這種情況下,我們可以看到,模型對單行資料的預測是 "1 "類。
多項式邏輯迴歸的一個好處是,它可以預測資料集中所有已知類標籤的校準概率。
這可以通過呼叫模型的predict_proba()函式來實現。
下面的例子演示瞭如何使用多項邏輯迴歸模型預測一個新例子的多項概率分佈。
- # 用多指標邏輯迴歸模型預測概率
- from sklea
- # 定義資料集
- X, y = makclassif
- # 定義多項式邏輯迴歸模型
- model = LoRegre
- # 在整個資料集上擬合該模型
- fit(X, y)
- # 定義單行輸入資料
- # 預測一個多項式概率分佈
- preprob
- # 對預測的概率進行總結
- print('Predict
執行這個例子首先在所有可用的資料上擬合模型,然後定義一行資料,將其提供給模型,以便預測類的概率。
注意:鑑於演算法或評估程式的隨機性,或數字精度的差異,你的結果可能會有所不同。考慮將這個例子執行幾次,並比較平均結果。
在這個例子中,我們可以看到第1類(例如,陣列索引被對映到類的整數值)的預測概率最大,約為0.50。
現在我們已經熟悉了評估和使用多項邏輯迴歸模型,讓我們來探索如何調整模型的超引數。
多項式Logistic迴歸的調整懲罰
調整多項邏輯迴歸的一個重要超引數是懲罰項。
這個項對模型施加懲罰,尋求更小的模型權重。這是通過在損失函式中加入模型係數的加權和來實現的,鼓勵模型在擬合模型的同時減少權重的大小和誤差。
一種流行的懲罰型別是L2懲罰,它將係數的平方之和(加權)加入到損失函式中。可以使用係數的加權,將懲罰的強度從完全懲罰降低到非常輕微的懲罰。
預設情況下,LogisticRegression類使用L2懲罰,係數的權重設定為1.0。懲罰的型別可以通過 "懲罰 "引數設定,其值為 "l1"、"l2"、"elasticnet"(例如兩者),儘管不是所有的求解器都支援所有的懲罰型別。懲罰中的係數權重可以通過 "C "引數設定。
- # 定義帶有預設懲罰的多項式邏輯迴歸模型
- Logistic
懲罰的加權實際上是反加權,也許懲罰=1-C。
從檔案中可以看出。
C : float, default=1.0
正則化強度的倒數,必須是一個正的浮點數。與支援向量機一樣,較小的值表示較強的懲罰。
這意味著,接近1.0的值表示很少的懲罰,接近0的值表示強的懲罰。C值為1.0可能表示根本沒有懲罰。
- C接近於1.0。輕懲罰。
- C接近0.0:強懲罰。
- # 定義無懲罰的多項式邏輯迴歸模型
- LogRegr( penal='none')
現在我們已經熟悉了懲罰,讓我們來看看如何探索不同懲罰值對多指標邏輯迴歸模型效能的影響。
在對數尺度上測試懲罰值是很常見的,這樣可以快速發現對一個模型很有效的懲罰尺度。一旦發現,在這個尺度上進一步調整可能是有益的。
我們將在對數尺度上探索加權值在0.0001到1.0之間的L2懲罰,此外還有不懲罰或0.0。
下面列出了評估多項邏輯迴歸的L2懲罰值的完整例子。
- #調整多指標邏輯迴歸的正則化
- from numpy import mean
- # 獲取資料集
- def getet():
- X, y = make_
- # 獲得一個要評估的模型列表
- def ges():
- models = dict()
- #為模型建立名稱
- # 在某些情況下關閉懲罰
- # 在這種情況下沒有懲罰
- models[key] = LogisticReg penalty='none'
- models[key] = LogisticR penalty='l2'
- # 使用交叉驗證法評估一個給定的模型
- def evamodel
- # 定義評估程式
- cv = RataifiFod
- # 評估模型
- scs= cssva_scre
- # 定義資料集
- X, y = gatet()
- # 獲得要評估的模型
- gt_dels()
- # 評估模型並存儲結果
- for name, moel in mos.ims():
- # 評估模型並收集分數
- oes = evadel(model, X, y)
- # 儲存結果
- rsts.append
- names.append
- # 總結
- # 繪製模型效能的比較圖
執行這個例子可以報告每個配置的平均分類精度。
注意:鑑於演算法或評估程式的隨機性,或數字精度的差異,你的結果可能會有所不同。考慮多執行幾次這個例子,並比較平均結果。
在這個例子中,我們可以看到,C值為1.0的最佳得分約為77.7%,這與不使用懲罰達到相同的得分是一樣的。
為每種配置的準確度分數建立了一個盒須圖,所有的圖都並排顯示在一個相同比例的圖上,以便直接比較。
在這種情況下,我們可以看到,我們在這個資料集上使用的懲罰越大(即C值越小),模型的效能就越差。
多項式Logistic迴歸的L2懲罰與準確率的箱線圖
概括
在本教程中,您瞭解瞭如何在 Python 中開發多項邏輯迴歸模型。
你有任何問題嗎?
在下面的評論中提出您的問題,我會盡力回答。
最受歡迎的見解
3.matlab中的偏最小二乘迴歸(PLSR)和主成分迴歸(PCR)
6.r語言中對LASSO迴歸,Ridge嶺迴歸和Elastic Net模型實現
7.R語言邏輯迴歸、Naive Bayes貝葉斯、決策樹、隨機森林演算法預測心臟病
9.R語言用邏輯迴歸、決策樹和隨機森林對信貸資料集進行分類預測
▍關注我們 【大資料部落】第三方資料服務提供商,提供全面的統計分析與資料探勘諮詢服務,為客戶定製個性化的資料解決方案與行業報告等。 ▍諮詢連結:http://y0.cn/teradat ▍聯絡郵箱:[email protected]