逻辑回归是一种用于解决分类问题的统计方法。它的核心思想是通过建立一个函数来预测事件发生的概率。在逻辑回归中,我们使用逻辑函数(sigmoid函数)进行概率转换,从而将线性回归的输出映射到0到1之间的概率值。本文旨在构建逻辑回归模型,解决分类问题,通过概率转换实现事件预测。从概率论回顾、逻辑函数应用,到模型构建、优化与评估,提供Python代码实现,全方位指导逻辑回归从入门到精通。
逻辑回归基础理解逻辑回归是一种用于解决二分类问题的统计方法。它的核心思想是通过建立一个函数来预测事件发生的概率。逻辑回归通过逻辑函数(sigmoid函数)进行概率转换,将线性回归的输出映射到0到1之间的概率值。下面我们回顾概率论的基本概念,包括概率、条件概率、独立事件和随机变量等。
import numpy as np def sigmoid(z): return 1 / (1 + np.exp(-z))
逻辑函数是逻辑回归的关键部分,它通过将输入转换为一个在0到1之间的值来表示概率。sigmoid函数是逻辑回归中常用的逻辑函数,其数学表达式为:
σ(z) = \frac{1}{1 + e^{-z}}
sigmoid函数的特性:
z
为正数时,函数值接近于1,表示事件发生的概率高;z
为负数时,函数值接近于0,表示事件发生的概率低;z
为0时,函数值等于0.5,表示事件发生的概率为50%。import numpy as np def sigmoid(z): return 1 / (1 + np.exp(-z))逻辑回归模型构建
逻辑回归模型旨在找到一组参数,使得预测概率与实际结果尽可能匹配。我们通过最小化损失函数来调整这些参数,达到最佳拟合目的。
线性回归用于预测连续值,而逻辑回归用于解决二分类问题。逻辑回归通过将线性回归的输出通过一个连续的函数(如sigmoid函数)转换为概率。
class LogisticRegression: def __init__(self, learning_rate=0.01, num_iterations=1000): self.learning_rate = learning_rate self.num_iterations = num_iterations def fit(self, X, y): m, n = X.shape self.w = np.zeros(n) self.b = 0 for _ in range(self.num_iterations): z = np.dot(X, self.w) + self.b p = sigmoid(z) gradient_w = (1 / m) * np.dot(X.T, (p - y)) gradient_b = (1 / m) * np.sum(p - y) self.w -= self.learning_rate * gradient_w self.b -= self.learning_rate * gradient_b def predict(self, X): z = np.dot(X, self.w) + self.b return sigmoid(z)数据准备与预处理
数据预处理是机器学习模型构建过程中的关键步骤。它涉及特征选择、特征工程、数据清洗和标准化等过程。
from sklearn.preprocessing import StandardScaler # 加载数据 data = pd.read_csv('data.csv') X = data.drop('target', axis=1) y = data['target'] # 数据预处理 scaler = StandardScaler() X = scaler.fit_transform(X)
from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import f_classif selector = SelectKBest(score_func=f_classif, k=10) X_new = selector.fit_transform(X, y)逻辑回归模型训练
逻辑回归模型的训练涉及最小化损失函数,最常用的是交叉熵损失函数,通过梯度下降法或其他优化算法更新参数。
from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split X, y = make_classification(n_samples=100, n_features=2, random_state=42) 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) predictions = model.predict(X_test)模型评估与优化
模型评估是衡量模型性能的关键步骤,涉及使用准确率、召回率、F1分数、ROC曲线和AUC值等指标。
from sklearn.metrics import accuracy_score, recall_score, f1_score, roc_auc_score def evaluate_model(model, X_test, y_test): y_pred = model.predict(X_test) acc = accuracy_score(y_test, y_pred) recall = recall_score(y_test, y_pred) f1 = f1_score(y_test, y_pred) roc_auc = roc_auc_score(y_test, model.predict_proba(X_test)[:, 1]) return acc, recall, f1, roc_auc acc, recall, f1, roc_auc = evaluate_model(model, X_test, y_test)实战案例与代码实现
from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV from sklearn.preprocessing import StandardScaler from sklearn.metrics import roc_auc_score # 加载数据 data = pd.read_csv('data.csv') X = data.drop('target', axis=1) y = data['target'] # 数据预处理 scaler = StandardScaler() X = scaler.fit_transform(X) # 划分训练集和测试集 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) # 超参数调优 param_grid = {'C': [0.01, 0.1, 1, 10, 100], 'penalty': ['l1', 'l2']} grid_search = GridSearchCV(model, param_grid, cv=5) grid_search.fit(X_train, y_train) # 模型评估 predictions = model.predict(X_test) roc_auc_score(y_test, model.predict_proba(X_test)[:, 1])
通过上述步骤,我们可以从逻辑回归的基础理解到实现完整的实战案例,包括数据预处理、模型训练、评估与优化,最终完成一个逻辑回归模型的构建与应用。