一、邏輯回歸簡介
邏輯回歸是一種二分類演算法,常用於解決問題:某件事情能/不能發生、某個人患病/不患病等。邏輯回歸演算法的輸入是一些特徵,輸出是取值為0或1的標籤,它的目標是通過學習來預測輸入與輸出之間的關係。
邏輯回歸模型基於 sigmoid 函數(或 logistic 函數)進行建模。sigmoid 函數的定義為:$f(x)=\frac{1}{1+e^{-x}}$。它能將任意輸入映射到區間 [0,1] 上,這就使得它非常適合用於實現二分類問題。
二、邏輯回歸演算法實現
1. 數據預處理
import numpy as np import pandas as pd from sklearn.model_selection import train_test_split # 載入數據集 data = pd.read_csv('data.csv') X = data.iloc[:, :-1] y = data.iloc[:, -1] # 劃分訓練集和測試集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) # 特徵縮放 from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)
2. 模型訓練
from sklearn.linear_model import LogisticRegression # 創建邏輯回歸對象 classifier = LogisticRegression(random_state=0) # 用訓練集訓練模型 classifier.fit(X_train, y_train)
3. 模型預測
# 對測試集做預測 y_pred = classifier.predict(X_test)
4. 模型評估
from sklearn.metrics import confusion_matrix, accuracy_score # 創建混淆矩陣 cm = confusion_matrix(y_test, y_pred) print("混淆矩陣:\n", cm) # 計算準確率 accuracy = accuracy_score(y_test, y_pred) print("準確率:", accuracy)
三、邏輯回歸在sklearn中的應用
1. API說明
在sklearn中,邏輯回歸演算法的API為:LogisticRegression。
2. 代碼示例
from sklearn.linear_model import LogisticRegression # 創建邏輯回歸對象 classifier = LogisticRegression(random_state=0) # 用訓練集訓練模型 classifier.fit(X_train, y_train) # 對測試集做預測 y_pred = classifier.predict(X_test) # 計算準確率 from sklearn.metrics import accuracy_score accuracy = accuracy_score(y_test, y_pred) print("準確率:", accuracy)
四、邏輯回歸的應用
1. 二分類問題
邏輯回歸常用於二分類問題,例如預測一個人會/不會購買某個商品、預測一個客戶可能/不可能違約等。
2. 多分類問題
邏輯回歸也可以應用於多分類問題。一種常用的方法是採用 One-vs-All(OvA)策略。即對於有 n 個類別的問題,訓練 n 個分類器,每個分類器分別將一個類別看作正例,其餘類別看作反例。最後,將這些分類器組合成一個大模型,再根據輸入的特徵進行分類。
3. 特徵工程
特徵工程是提高模型性能的重要步驟。通過對原始特徵的處理,可以提取出更有價值的特徵。例如,可以通過多項式擴展、歸一化、特徵選擇等方式來提高模型表現。
4. 模型優化
邏輯回歸模型的性能可以通過多種方式進行優化。例如,可以通過正則化、調整參數、使用Ensemble方法等方式來提高模型表現。
5. 實現案例:銀行貸款違約預測
銀行貸款違約預測是一個典型的二分類問題,可以使用邏輯回歸模型進行預測。我們可以使用已有的數據來訓練模型,從而預測哪些客戶可能違約。
首先,我們需要載入數據集,並對數據進行預處理。下面的代碼演示了如何對數據進行處理。
import pandas as pd from sklearn.preprocessing import LabelEncoder # 載入數據集 data = pd.read_csv("bank-full.csv", delimiter=";") y = data["y"] X = data.drop("y", axis=1) # 類別型特徵編碼 categorical_features = ["job", "marital", "education", "default", "housing", "loan", "contact", "month", "poutcome"] for feature in categorical_features: encoder = LabelEncoder() X[feature] = encoder.fit_transform(X[feature]) # 轉換啞變數 X = pd.get_dummies(X, columns=categorical_features) # 將標籤 y 轉換為 0 和 1 y = (y == "yes").astype(int)
接著,我們可以將數據集劃分為訓練集和測試集,並使用邏輯回歸模型訓練和預測。下面的代碼演示了如何訓練和預測模型。
from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 劃分訓練集和測試集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 訓練模型 model = LogisticRegression() model.fit(X_train, y_train) # 預測測試集 y_pred = model.predict(X_test) # 計算準確率 accuracy = accuracy_score(y_test, y_pred) print("準確率:", accuracy)
原創文章,作者:ILUJH,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/369738.html