一、邏輯回歸概述
邏輯回歸雖然名字中帶有“回歸”,但它是一種用于處理二分類或多分類問題的算法。其核心思想是通過構建一個線性模型,將輸入特征進行線性組合,再利用邏輯函數(如Sigmoid函數)將線性組合的結果映射到0到1之間的概率值,以此來判斷樣本屬于某一類別的可能性。例如,在信用卡欺詐檢測中,我們可以根據交易金額、時間等特征,預測該筆交易是否為欺詐行為。
二、案例背景與數據處理
在上述代碼中,使用了信用卡交易數據集creditcard.csv
。在進行邏輯回歸建模之前,數據預處理是必不可少的步驟。
- 數據標準化:對
Amount
列進行Z標準化,即通過StandardScaler
將數據轉換為均值為0,標準差為1的標準正態分布。這一步驟可以消除不同特征之間量綱的影響,加速模型的收斂速度。代碼如下:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
a = data[['Amount']]
data['Amount'] = scaler.fit_transform(data[['Amount']])
- 特征選擇與數據劃分:刪除對模型影響較小的
Time
列,并將數據集劃分為訓練集和測試集。這里采用train_test_split
函數,將30%的數據作為測試集,70%的數據作為訓練集,同時設置random_state
固定隨機種子,以保證實驗結果的可重復性。
from sklearn.model_selection import train_test_split
X = data.drop('Class',axis=1)
y = data.Class
x_train,x_test,y_train,y_test =\
train_test_split(X,y,test_size = 0.3,random_state = 0)
三、邏輯回歸關鍵參數介紹
在邏輯回歸模型LogisticRegression
中,有幾個關鍵參數對模型性能有著重要影響。
- C參數:C是正則化強度的倒數,它控制模型對訓練數據的擬合程度。C值越大,正則化強度越弱,模型越傾向于擬合訓練數據,容易出現過擬合現象;C值越小,正則化強度越強,模型的泛化能力越強,但可能會導致欠擬合。在實際應用中,需要通過合適的方法來選擇最優的C值。
- penalty參數:該參數用于指定正則化的類型,常見的有
'l1'
和'l2'
。'l1'
正則化會使部分系數變為0,從而起到特征選擇的作用;'l2'
正則化則是對所有系數進行約束,使系數更加平滑。在上述代碼中,使用的是'l2'
正則化。 - solver參數:該參數用于指定求解器的類型,不同的求解器適用于不同的數據規模和問題特點。例如,
'lbfgs'
適用于大多數情況,尤其是數據量較大時;'liblinear'
則適用于小數據集。
四、參數選擇方法——交叉驗證
為了選擇最優的C參數,代碼中采用了交叉驗證的方法。交叉驗證是一種評估模型性能和選擇參數的有效技術,它將訓練數據劃分為多個子集,通過多次訓練和驗證,得到模型在不同數據子集上的性能指標,最終取平均值作為模型的評估結果。
- 具體實現:在代碼中,定義了一個
c_param_range
列表,包含了多個候選的C值。然后,通過循環將每個C值傳入LogisticRegression
模型,并使用cross_val_score
函數進行8折交叉驗證,計算模型的召回率(scoring ='recall'
)。召回率是衡量模型在正樣本識別能力的重要指標,在信用卡欺詐檢測中,較高的召回率意味著能夠盡可能多地識別出欺詐交易。
scores = []
c_param_range =[0.01,0.1,1,10,100]
for i in c_param_range:lr = LogisticRegression(C = i, penalty='l2', solver='lbfgs', max_iter=1000)score = cross_val_score(lr, x_train, y_train, cv = 8, scoring ='recall')score_mean = sum(score) / len(score)scores.append(score_mean)print(score_mean)
- 選擇最優參數:通過
np.argmax(scores)
找到scores
列表中最大值對應的索引,從而確定最優的C參數。使用最優C參數重新構建邏輯回歸模型,以期望在測試集上獲得更好的性能。
best_c = c_param_range[np.argmax(scores)]
lr = LogisticRegression(C = best_c,penalty = 'l2',max_iter = 1000)
lr.fit(x_train, y_train)
五、模型評估與結果分析
為了評估模型的性能,代碼中使用了混淆矩陣和分類報告。
- 混淆矩陣:通過
cm_plot
函數繪制混淆矩陣,它直觀地展示了模型在不同類別上的預測情況。例如,矩陣的對角線元素表示預測正確的樣本數量,非對角線元素表示預測錯誤的樣本數量。通過分析混淆矩陣,可以深入了解模型的錯誤類型,為進一步優化模型提供依據。
train_predicted =lr.predict(x_train)
print(metrics.classification_report(y_train, train_predicted))
cm_plot(y_train,train_predicted).show()test_predicted = lr.predict(x_test)
print(metrics.classification_report(y_test, test_predicted))
cm_plot(y_test,test_predicted).show()
- 分類報告:
classification_report
函數生成的分類報告提供了精確率、召回率和F1值等關鍵指標,這些指標從不同角度評估了模型的性能。通過對比訓練集和測試集上的分類報告,可以判斷模型是否存在過擬合現象。
六、運行結果
七、總結與展望
邏輯回歸的參數選擇直接影響模型的性能和泛化能力。通過交叉驗證等方法,可以有效地找到最優參數,提高模型的預測準確性。在實際應用中,還可以結合更多的參數調整和模型優化技巧,如特征工程、調整正則化類型等,進一步提升邏輯回歸模型的效果。隨著機器學習技術的不斷發展,邏輯回歸也在與其他算法融合,發揮著更大的作用。未來,我們可以探索更多的參數選擇方法和模型優化策略,以適應更加復雜和多樣化的應用場景。