一、简介

1.1 概念

一种分类模型,把线性回归的输出,作为逻辑回归的输入。

输出是(0, 1)之间的值

1.2 基本思想

  • 再使用 sigmoid 函数将 f(x) 的输出值映射为概率值
    1. 设置阈值 (eg:0.5),输出概率值大于 0.5,则将未知样本输出为 1 类
    2. 否则输出为 0 类

1.3 逻辑回归的假设函数

线性回归的输出,作为逻辑回归的输入。

二、重要类及方法的使用

2.1 StandardScaler()类介绍

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler(
    copy,
    with_mean,
    with_std
)

2.1.1 参数介绍

copy=True

作用:决定标准化操作是在原数据上直接修改,还是创建一个副本进行处理。

copy=True(默认):生成数据的副本进行计算,原始数据不会被改变,适合需要保留原始数据的场景。

copy=False:直接在输入数据上原地修改,节省内存,但原始数据会被覆盖,仅在内存紧张且无需保留原始数据时使用。


with_mean=True

作用:控制是否对数据做中心化处理(即每个特征减去自身的均值,使处理后特征的均值为 0)。

with_mean=True(默认):会计算每个特征的均值并执行中心化,是 Z 标准化的核心步骤之一。

with_mean=False:不做中心化,仅保留原始均值,适合处理稀疏矩阵等不能安全减去均值的数据。


with_std=True

作用:控制是否对数据做缩放处理(即每个特征除以自身的标准差,使处理后特征的标准差为 1)。

with_std=True(默认):会计算每个特征的标准差并执行缩放,是 Z 标准化的另一核心步骤。

with_std=False:不做缩放,仅保留原始标准差,适用于只需要中心化、不需要单位方差的场景。

2.2 train_test_split()函数介绍

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    arrays,
    test_size,
    train_size,
    random_state,
    shuffle,
    stratify
)

2.2.1 参数介绍

1. arrays(必选参数)

核心意义:传入需要拆分的数据集,通常是特征数据标签数据(可以是多个数组 / 数据框)。

常见用法:传入 X, yX 是特征矩阵,y 是对应标签),函数会同步对 Xy 进行拆分,保证特征和标签的对应关系不混乱。

补充:支持传入多个数据集(如 X, y, z),函数会按相同的拆分规则对所有数据集进行拆分。

2. test_size(可选参数,控制测试集比例

核心意义:指定拆分后测试集的规模

两种赋值形式:

0~1 之间的浮点数:表示测试集占总数据集的比例(如 test_size=0.3 表示测试集占 30%)。

正整数:表示测试集的样本数量(如 test_size=1000 表示测试集固定取 1000 个样本)。

默认值:None,此时会根据 train_size 推导,若 train_size 也未指定,默认测试集占比为 0.25(25%)。

3. train_size(可选参数控制训练集比例

核心意义:指定拆分后训练集的规模,用法和 test_size 完全一致。

两种赋值形式:0~1 之间的浮点数(比例)、正整数(样本数量)。

注意:通常只需指定 test_sizetrain_size 其中一个即可,另一个会自动补全(两者之和为 1 或总样本数),无需同时重复指定。

4. random_state(可选参数,控制拆分的随机性 )

核心意义:设置随机数种子,保证数据集拆分结果的可复现性

若不指定(默认 None):每次运行代码,拆分的样本都会不同(随机抽样)。

若指定一个固定整数(如 random_state=1000):每次运行代码,都会得到完全相同的训练集和测试集,方便后续调试、对比模型效果。

5. shuffle(可选参数,控制拆分前是否洗牌)

核心意义:指定在拆分数据集之前,是否对原始数据进行随机打乱(洗牌)。

True(默认):拆分前先打乱数据顺序,避免原始数据有规律(如按标签排序)导致拆分后的数据集分布不均。

False:不打乱数据顺序,直接从前往后截取样本作为训练集,剩余作为测试集(极少使用,仅适用于时序数据等特殊场景)。

注意:若 stratify 参数有赋值,shuffle 会自动被强制设为 True

6. stratify(可选参数,控制分层抽样)

核心意义:实现分层拆分,保证拆分后的训练集和测试集中,各标签类别的比例与原始数据集一致

赋值:通常传入标签数据 y(如 stratify=y),函数会按照 y 中的类别比例进行分层抽样。

适用场景:尤其适合不平衡数据集(如你之前的信用卡欺诈检测,欺诈样本极少),避免出现测试集中没有欺诈样本的情况。

默认值:None,不进行分层抽样,仅随机拆分。

2.3LogisticRegression()类的使用

from sklearn.linear_model import LogisticRegression

lr = LogisticRegression(
    penalty,
    dual,
    tol,
    C,
    fit_intercept,
    intercept_scaling,
    class_weight,
    random_state,
    solver,
    max_iter,
    multi_class,
    verbose,
    warm_start,
    n_jobs,
    l1_ratio
)

2.3.1 参数介绍

penalty(正则化类型,控制过拟合)

核心意义:指定使用哪种正则化方式来约束模型参数,防止模型过拟合。

常见可选值:'l1''l2'(默认)、'elasticnet''none'

说明:'l2'(默认):岭回归正则化,对所有参数进行小幅惩罚,适合大多数场景。

'l1':Lasso 正则化,会让部分不重要的参数变为 0,实现特征筛选,需搭配 solver='saga''liblinear'

'elasticnet':结合 L1 和 L2 正则化,需指定 l1_ratio 参数,仅搭配 solver='saga'。​​​​​​​'none':不使用正则化,模型容易过拟合。

dual(对偶问题 / 原始问题求解)

核心意义:控制求解器是解决对偶问题还是原始问题,仅对线性核函数有效。

可选值:TrueFalse(默认)

说明:当样本数量 < 特征数量时,设置 dual=True 可能更高效。

当使用 penalty='l1''elasticnet'multi_class='multinomial' 时,该参数无效,强制为 False

tol(收敛阈值,停止迭代的条件)

核心意义:指定迭代收敛的容忍度,当模型优化的损失函数下降幅度小于该值时,停止迭代。

可选值:非负浮点数(默认 1e-4,即 0.0001)

说明:值越小,迭代可能越充分,但训练时间会更长,默认值满足大多数场景。

C(正则化强度的倒数,核心常用)

核心意义:控制正则化的强弱程度,值越小,正则化强度越强,对过拟合的约束越严格;值越大,正则化强度越弱,甚至无约束。

可选值:正浮点数(默认 1.0

说明:你之前的信用卡欺诈检测中用到了 C=0.01,就是通过减小 C 来增强正则化,避免模型在少数欺诈样本上过拟合。

fit_intercept(是否拟合截距项)

核心意义:控制模型是否包含截距项(即逻辑回归中的 b,对应线性部分 z=w^Tx + b 中的 b)。

可选值:True(默认)、False

说明:

True(默认):拟合截距项,适合大多数场景,尤其是特征未做中心化处理时。

False:不拟合截距项,假设数据已经过中心化,模型直接从原点开始拟合。

intercept_scaling(截距项缩放,仅搭配 solver='liblinear'

核心意义:当 fit_intercept=Truesolver='liblinear' 时,对截距项进行缩放处理,用于调整求解器的计算逻辑。

可选值:正浮点数(默认 1.0)说明:日常场景无需修改,保持默认即可,仅在特殊优化需求时调整。

class_weight(类别权重,适配不平衡数据集)

核心意义:为不同类别分配不同的权重,解决数据集不平衡问题(如信用卡欺诈检测中,欺诈样本极少)。

可选值:'balanced'、字典(如 {0:0.1, 1:0.9})、None(默认)

说明:

None(默认):所有类别权重相等,适合平衡数据集。

'balanced':自动根据样本数量计算权重,少数类权重更高,公式为 权重 = 总样本数 / (类别数 * 该类样本数)

字典:手动指定每个类别的权重,键为类别标签(如 0、1),值为对应权重。

random_state(随机数种子,保证结果可复现)

核心意义:设置随机数生成器的种子,保证模型训练结果的可复现性。

可选值:整数、None(默认)

说明:

指定固定整数(如 1000):每次运行代码,模型的初始化和迭代结果一致,方便调试和对比。

None(默认):每次运行代码,结果可能略有不同。

solver(优化求解器)

核心意义:指定用于优化损失函数的算法(求解器)。

常见可选值:'lbfgs'(默认)、'liblinear''newton-cg''newton-cholesky''sag''saga'

说明:

'lbfgs'(默认):适合中小型数据集、二分类 / 多分类任务,支持 l2 正则化,收敛速度较快。

'liblinear':适合小型数据集,支持 l1/l2 正则化,仅支持二分类任务,对不平衡数据集友好

'saga':适合大型数据集,支持 l1l2elasticnet 正则化,支持多分类任务,收敛速度快。

其他求解器(如 newton-cg):仅支持 l2 正则化,适合特殊场景。

max_iter(最大迭代次数)

核心意义:指定优化求解器的最大迭代次数,防止模型无限迭代。

可选值:正整数(默认 100

说明:如果模型训练时提示 “未收敛”,可以增大该值(如 max_iter=1000),让求解器有更多迭代次数找到最优解。

 multi_class(多分类处理方式)

核心意义:指定多分类任务的处理策略,二分类任务时该参数无效(默认即可)。

可选值:'auto'(默认)、'ovr''multinomial'

说明:

'ovr'(一对多):将多分类任务拆解为多个二分类任务,适合各类求解器。

'multinomial'(多项逻辑回归):直接建模多分类概率,仅支持部分求解器(如 'lbfgs''saga'),效果通常更好。

'auto':自动根据求解器和任务类型选择策略。

verbose(详细输出模式)

核心意义:控制训练过程中是否输出详细的迭代日志。

可选值:非负整数(默认 0

说明:

0(默认):不输出任何日志,安静训练。

大于 0(如 12):输出迭代过程中的损失值、收敛情况等日志,值越大,输出越详细。

warm_start(热启动,复用前一次模型结果)

核心意义:控制是否复用前一次训练的模型参数作为本次训练的初始值,节省训练时间。

可选值:TrueFalse(默认)

说明:

True:复用前一次 lr 对象的训练结果,适合增量训练(如新增少量样本)。

False(默认):每次训练都重新初始化参数,从头开始训练。

n_jobs(并行计算核心数)

核心意义:指定训练模型时使用的 CPU 核心数,加速模型训练,仅对支持并行的求解器有效。

可选值:整数、-1None(默认)

说明:

None(默认):使用 1 个 CPU 核心。

-1:使用所有可用的 CPU 核心,适合大型数据集。

正整数:指定具体的核心数(如 n_jobs=4)。

l1_ratio(弹性网正则化的混合比例)

核心意义:仅当 penalty='elasticnet' 时有效,控制 L1 正则化在弹性网中的占比。

可选值:0~1 之间的浮点数

说明:

l1_ratio=0:等价于 penalty='l2'

l1_ratio=1:等价于 penalty='l1'

0 < l1_ratio < 1:混合 L1 和 L2 正则化,平衡特征筛选和参数平滑性

三、损失函数

损失函数的工作原理:每个样本预测值有 A、B 两个类别,真实类别对应的位置,概率值越大越好

四、实例

import pandas as pd

data = pd.read_csv(r"./creditcard.csv")

from sklearn.preprocessing import StandardScaler #z标准化的函数

scaler = StandardScaler()
data['Amount'] = scaler.fit_transform(data[['Amount']]) #将计算后的标准差 存入data中,dataframe
data = data.drop(['Time'],axis=1)    #删除Time列的内容,axis为1表示列。


from sklearn.model_selection import train_test_split #用来对数据集进行切分的函数

"""对原始数据集进行切分"""
X_whole = data.drop('Class', axis=1)  # 删除Class列,其余数据作为特征
y_whole = data['Class']  # Class列作为标签(Label)特征

# 返回的4个值:1. 训练数据集的特征, 2. 测试数据集的特征, 3. 训练数据集的标签, 4. 测试数据集的标签
X_train, X_test, y_train, y_test = \
    train_test_split(X_whole, y_whole, test_size=0.3, random_state=1000) #对数据集进行切分

from sklearn.linear_model import LogisticRegression  

lr = LogisticRegression(C=0.01)  # 先初始化一个逻辑回归对象lr
lr.fit(X_train, y_train)  # 传入训练数据,之后的模型就会自动保存到变量lr

'''训练集预测结果'''
test_predicted = lr.predict(X_test)  # 测试集
result = lr.score(X_test, y_test)  # 准确率
print(test_predicted,'\n',result)

'''获取分类结果报告'''
from sklearn import metrics
print(metrics.classification_report(y_test, test_predicted))

更多推荐