您的位置:

逻辑回归简介和实现

一、逻辑回归简介

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