一、逻辑回归简介
逻辑回归是一种二分类算法,常用于解决问题:某件事情能/不能发生、某个人患病/不患病等。逻辑回归算法的输入是一些特征,输出是取值为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)