机器学习——逻辑回归(分类)
一、简介
1.1 概念
一种分类模型,把线性回归的输出,作为逻辑回归的输入。
输出是(0, 1)之间的值
1.2 基本思想

- 再使用 sigmoid 函数将 f(x) 的输出值映射为概率值
- 设置阈值 (eg:0.5),输出概率值大于 0.5,则将未知样本输出为 1 类
- 否则输出为 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, y(X 是特征矩阵,y 是对应标签),函数会同步对 X 和 y 进行拆分,保证特征和标签的对应关系不混乱。
补充:支持传入多个数据集(如 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_size 或 train_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(对偶问题 / 原始问题求解)
核心意义:控制求解器是解决对偶问题还是原始问题,仅对线性核函数有效。
可选值:True、False(默认)
说明:当样本数量 < 特征数量时,设置 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=True 且 solver='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':适合大型数据集,支持 l1、l2、elasticnet 正则化,支持多分类任务,收敛速度快。
其他求解器(如 newton-cg):仅支持 l2 正则化,适合特殊场景。
max_iter(最大迭代次数)
核心意义:指定优化求解器的最大迭代次数,防止模型无限迭代。
可选值:正整数(默认 100)
说明:如果模型训练时提示 “未收敛”,可以增大该值(如 max_iter=1000),让求解器有更多迭代次数找到最优解。
multi_class(多分类处理方式)
核心意义:指定多分类任务的处理策略,二分类任务时该参数无效(默认即可)。
可选值:'auto'(默认)、'ovr'、'multinomial'
说明:
'ovr'(一对多):将多分类任务拆解为多个二分类任务,适合各类求解器。
'multinomial'(多项逻辑回归):直接建模多分类概率,仅支持部分求解器(如 'lbfgs'、'saga'),效果通常更好。
'auto':自动根据求解器和任务类型选择策略。
verbose(详细输出模式)
核心意义:控制训练过程中是否输出详细的迭代日志。
可选值:非负整数(默认 0)
说明:
0(默认):不输出任何日志,安静训练。
大于 0(如 1、2):输出迭代过程中的损失值、收敛情况等日志,值越大,输出越详细。
warm_start(热启动,复用前一次模型结果)
核心意义:控制是否复用前一次训练的模型参数作为本次训练的初始值,节省训练时间。
可选值:True、False(默认)
说明:
True:复用前一次 lr 对象的训练结果,适合增量训练(如新增少量样本)。
False(默认):每次训练都重新初始化参数,从头开始训练。
n_jobs(并行计算核心数)
核心意义:指定训练模型时使用的 CPU 核心数,加速模型训练,仅对支持并行的求解器有效。
可选值:整数、-1、None(默认)
说明:
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))
更多推荐
所有评论(0)