亦菲喊你来学习之机器学习(6)--逻辑回归算法

逻辑回归

逻辑回归(Logistic Regression)是一种广泛使用的统计方法,用于解决分类问题,尤其是二分类问题。尽管名字中有"回归"二字,但它实际上是一种分类算法,因为它试图通过线性回归的方式去预测一个事件的发生概率(即属于某个类别的概率),然后根据设定的阈值(通常是0.5)来分类。

注意哦!逻辑回归其实是分类算法!!!

逻辑回归模型

逻辑回归模型使用逻辑函数(通常是sigmoid函数)将线性回归的预测值转换为概率值。sigmoid函数的公式如下:

其中,z 是线性回归模型的预测值,即 z =β 0+β 1x 1+β 2x 2+⋯+βnxn ,其中 β 0 是截距,β 1,β 2,...,βn 是回归系数,x 1,x 2,...,xn 是特征值。

逻辑回归模型的训练过程主要是找到最佳的回归系数(即 β 值),使得模型的预测概率与实际标签之间的差异最小。这通常通过最大化似然函数(在逻辑回归中,常用的是对数似然函数)来实现,也就是最小化负对数似然损失(Negative Log Likelihood Loss, NLL Loss)。

总的来说:就是通过概率来分类。

实现模型

对于实现一个算法模型,我们一般从以下几个方面来完成:

  1. 训练模型
  2. 测试模型

训练模型

  1. 收集数据
python 复制代码
  1. 数据预处理
python 复制代码
import pandas as pd
data = pd.read_csv('creditcard.csv') #读取数据
data = data.drop('Time',axis=1) #去除无关变量

from sklearn.preprocessing import StandardScaler #导入归一化方法
scaler = StandardScaler()
#对需要归一化处理的数据归一化,避免权重影响
data['Amount'] = scaler.fit_transform(data[['Amount']])
  1. 绘制图像,查看正负样本个数
python 复制代码
import matplotlib.pyplot as plt
from pylab import mpl

#字体调整
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
mpl.rcParams['axes.unicode_minus'] = False

#对样本中每个类别的数量计数,将其可视化,观察数据
lei_count = pd.value_counts(data['Class'])
plt.title('样本数')
plt.xlabel('类别')
plt.ylabel('数量')

lei_count.plot(kind = 'bar')
plt.show()
  1. 随机分割数据集与测试集

使用train_test_split方法,在数据中随机抽取数据作为训练集与测试集

python 复制代码
x = data.drop(["Class"],axis=1)
y = data.Class

from sklearn.model_selection import train_test_split

train_x,test_x,train_y,test_y = \
    train_test_split(x,y,test_size=0.3,random_state=0)	#test_size表示抽取的的测试集所占的百分比
  1. 交叉验证,选择较优的惩罚因子

在逻辑回归的算法中,逻辑模型的参数中,有一参数为正则化强度C,越小的数值表示越强的正则化。我们要进行调参数,看看哪个惩罚因子最为合适,使模型拟合效果更好:

python 复制代码
#交叉验证选择较优的惩罚因子
scores = []
c_param_range = [0.01,0.1,1,10,100] #参数:一般常用的惩罚因子

for i in c_param_range:
    lr = LogisticRegression(C = i,penalty='l2',solver='lbfgs',max_iter=1000)
    # C表示正则化强度,越小的数值表示越强的正则化。防止过拟合
    score = cross_val_score(lr,x_train,y_train,cv = 8,scoring='recall')
    #交叉验证,将模型和数据集传入,对其进行划分,每份轮流作为测试集来测试模型。返回一个列表对象
    score_mean = sum(score)/len(score)
    scores.append(score_mean)
beat_c = c_param_range[np.argmax(scores)] #argmax取出最大值的索引位置
  1. 训练模型
python 复制代码
lr = LogisticRegression(C = beat_c,penalty='l2',max_iter=1000)
lr.fit(x_train,y_train) #训练模型

测试模型

  1. 先用训练数据再次进入模型测试,查看他本身的模型训练效果怎么样:
python 复制代码
from sklearn import metrics

train_predicted = lr.predict(x_train)
print(metrics.classification_report(y_train,train_predicted)) #绘制混淆矩阵,查看测试参数
---------------------------------------------------------------
              precision    recall  f1-score   support

           0       1.00      1.00      1.00    199019
           1       0.88      0.62      0.73       345

    accuracy                           1.00    199364
   macro avg       0.94      0.81      0.86    199364
weighted avg       1.00      1.00      1.00    199364
  1. 再用分割的测试集来测试模型:
python 复制代码
test_predicted = lr.predict(x_test)
print(metrics.classification_report(y_test,test_predicted))
----------------------------------------------
              precision    recall  f1-score   support

           0       1.00      1.00      1.00     85296
           1       0.88      0.62      0.73       147

    accuracy                           1.00     85443
   macro avg       0.94      0.81      0.86     85443
weighted avg       1.00      1.00      1.00     85443

到这为止我们的模型就训练好啦,但是!!通过混淆矩阵我们可以发现,模型对类别为1的召回率只有0.62,这是比较差的,是什么原因导致的呢?

其实,在训练模型时第三步查看样本个数时,我们通过图片可以发现样本数量极度不均衡,致使训练时,类别1的数据训练不够,拟合欠缺,那么我们该如何处理呢?

处理方法有过采样(扩充样本数量)和下采样(数量多的将数据量向数量少的类别数量靠近),可以解决这个问题!我们下篇来介绍。

总结

本篇介绍了:

  1. 什么是逻辑回归:逻辑回归其实是分类算法!!!
  2. 逻辑回归算法如何分类:计算每个数据的属于哪个类别的概率,判断属于哪个类。(默认阈值0.5为分界线)
  3. 训练模型:
    1. 使用train_test_split方法,在数据中随机抽取数据作为训练集与测试集,使测试更有说服力。
    2. 交叉验证,选择较优的惩罚因子
相关推荐
非凸科技10 分钟前
非凸智能APP
人工智能
土星云SaturnCloud22 分钟前
抽水蓄能设备智慧运营:基于土星云边缘计算实现机组全生命周期预测性维护
服务器·人工智能·ai·边缘计算
江畔柳前堤23 分钟前
系统的本质——从LTI系统到神经网络
人工智能·深度学习·神经网络·机器学习·计算机视觉·数据挖掘·语音识别
HackTwoHub37 分钟前
轻量化AI渗透武器库|ARTEX自主攻防系统、资产梳理、漏洞挖掘、链路分析全流程智能化落地
人工智能·安全·web安全·网络安全·系统安全·网络攻击模型·安全架构
中电金信1 小时前
WAIC 2026媒体聚焦:中电金信的AI工程化思考与实践
人工智能
冬奇Lab1 小时前
码库知识库系列(03):代码 Embedding 策略——原始代码反而比注释增强更好
人工智能
冬奇Lab1 小时前
开源项目第172期:agentOS — 以库的形式给 AI Agent 一个操作系统,冷启动 92x 更快、内存 47x 更少
人工智能·开源·agent
大橙子打游戏1 小时前
make-goal:把长期 AI 任务从聊天记录里解放出来
人工智能
0566461 小时前
Python康复训练——常用标准库
开发语言·python·学习
华盈生物1 小时前
AI+病理:从切片到数据,空间多模态解析肿瘤微环境
人工智能·单细胞测序·空间单细胞蛋白组·单细胞组织原位空间蛋白组学·组织原位空间蛋白组学·超多重蛋白成像·ai+病理