首页 > 编程语言 >实验二:逻辑回归算法实现与测试

实验二:逻辑回归算法实现与测试

时间:2024-11-18 09:07:51浏览次数:1  
标签:逻辑 训练 pred 算法 train 测试 test sklearn

一、实验目的

深入理解对数几率回归(即逻辑回归的)的算法原理,能够使用 Python 语言实现对数

几率回归的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。

二、实验内容

(1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注

意同分布取样);

(2)使用训练集训练对数几率回归(逻辑回归)分类算法;

(3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选

择;

(4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验二的

部分。

三、算法步骤、代码、及结果

   1. 算法伪代码

# 输入:训练数据 (X_train, y_train),学习率 (alpha),迭代次数 (num_iterations)

# 输出:训练好的模型参数 w 和 b

 

# 1. 初始化参数 w 和 b

w = 0  # 权重初始化为 0

b = 0  # 偏置初始化为 0

 

# 2. 设置学习率和迭代次数

alpha = 0.01  # 学习率

num_iterations = 1000  # 最大迭代次数

 

# 3. 定义 Sigmoid 函数

function sigmoid(z):

    return 1 / (1 + exp(-z))

 

# 4. 定义损失函数:Log-Loss (交叉熵损失)

function compute_loss(X, y, w, b):

    m = len(y)  # 样本数量

    cost = 0

    for i = 1 to m:

        z = dot_product(w, X[i]) + b  # 计算预测值

        prediction = sigmoid(z)  # 计算 Sigmoid 输出

        cost += -y[i] * log(prediction) - (1 - y[i]) * log(1 - prediction)

    return cost / m  # 返回平均损失

 

# 5. 训练模型:梯度下降法

for i = 1 to num_iterations:

    # 计算模型的预测值

    m = len(X_train)  # 样本数量

    dw = 0  # 权重的梯度

    db = 0  # 偏置的梯度

    

    # 计算梯度(损失函数关于 w 和 b 的导数)

    for i = 1 to m:

        z = dot_product(w, X_train[i]) + b  # 计算预测值

        prediction = sigmoid(z)  # 计算 Sigmoid 输出

        

        # 计算梯度

        dw += (prediction - y_train[i]) * X_train[i]

        db += prediction - y_train[i]

    

    # 更新参数

    w -= alpha * dw / m  # 更新权重

    b -= alpha * db / m  # 更新偏置

    

    # 每迭代 100 次输出一次损失值

    if i % 100 == 0:

        loss = compute_loss(X_train, y_train, w, b)

        print("Iteration", i, "loss:", loss)

 

# 6. 返回训练好的模型参数

return w, b

 

   2. 算法主要代码

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.model_selection import StratifiedKFold

# 1. 加载Iris数据集
data = load_iris()
X = data.data
y = data.target

# 2. 留出法:将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)

# 3. 使用逻辑回归算法训练模型
log_reg = LogisticRegression(max_iter=200)
log_reg.fit(X_train, y_train)

# 4. 使用五折交叉验证评估模型
kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
cross_val_scores = cross_val_score(log_reg, X_train, y_train, cv=kfold, scoring='accuracy')

# 输出五折交叉验证的平均准确率
print(f'五折交叉验证的平均准确率: {cross_val_scores.mean():.4f}')

# 计算其他评估指标(精度、召回率、F1分数)
y_train_pred = log_reg.predict(X_train)
train_report = classification_report(y_train, y_train_pred)
print("训练集评估报告:\n", train_report)

# 5. 使用测试集评估模型
y_test_pred = log_reg.predict(X_test)

# 计算测试集的性能
test_report = classification_report(y_test, y_test_pred)
print("测试集评估报告:\n", test_report)

# 生成混淆矩阵
conf_matrix = confusion_matrix(y_test, y_test_pred)
print("混淆矩阵:\n", conf_matrix)

# 提供准确度(accuracy)作为最终模型评估的一个关键指标
test_accuracy = np.mean(y_test == y_test_pred)
print(f'测试集准确率: {test_accuracy:.4f}')

(2)调用库方法

1、numpy库:np.mean()用于计算输入数组的平均值,用于计算模型的准确度。

2、pandas库

3、sklearn.datasets库:load_iris()用于加载Iris 数据集sklearn.model_selection库:train_test_split()用于将数据集划分为训练集和测试集。参数有X:特征数据;y:目标标签;test_size=0.33:设置测试集的大小为 33%;random_state=42:设置随机种子以保证结果可复现;stratify=y:按照目标标签 y 的分布来划分数据,确保训练集和测试集中的标签分布一致。cross_val_score()用于计算交叉验证的得分(如准确度)。参数有log_reg:使用的模型(逻辑回归模型);X_train:训练集的特征数据;y_train:训练集的目标标签;cv=kfold:交叉验证折数和分层设置,使用之前定义的 StratifiedKFold;scoring='accuracy':评估指标为准确度。

4、StratifiedKFold()库:参数有n_splits=5:指定交叉验证折数为 5;shuffle=True:是否对数据进行打乱;random_state=42:确保结果可复现。

5、sklearn.linear_model库:LogisticRegression(max_iter=200)参数有max_iter=200:指定最大迭代次数为 200。

6、sklearn.metrics库:classification_report()有参数y_train 或 y_test:实际的标签;y_train_pred 或 y_test_pred:预测的标签;confusion_matrix()有参数y_test:实际标签;y_test_pred:预测标签。

 

 

   3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)

 

 

1. 测试结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)

 

 

标签:逻辑,训练,pred,算法,train,测试,test,sklearn
From: https://www.cnblogs.com/yuanxinglan/p/18551677

相关文章

  • HarmonyOS Next 加解密算法框架入门:基础概念与功能概述
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、引言在当今数字化时代,信息安全犹......
  • HarmonyOS Next 非对称密钥生成实战:多算法与多方式详解
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、引言在当今数字化时代,安全通信已......
  • 异常值检测:SOS算法(Stochastic Outlier Selection Algorithm)MATLAB代码
    SOS算法(StochasticOutlierSelectionAlgorithm)是由JeroenJanssens提出的一种无监督异常检测算法。该算法通过计算数据点之间的关联度(affinity)来识别异常点。核心思想是,如果一个点与其他所有点的关联度都很低,那么它被视为异常点。以下是该算法的详细公式和步骤:其MATLAB代码......
  • 红队全栈课程之渗透测试导学
    声明学习视频来自B站up主泷羽sec,如有涉及侵权马上删除文章。在学习的过程中记笔记,分享笔记方便各位师傅学习,以下内容只涉及学习内容,任何其他违法行为与本人及泷羽sec无关,请务必遵守法律法规,切莫逾越法律红线切莫逾越法律红线。B站UP链接:https://space.bilibili.com/3503......
  • 【优选算法篇】分治乾坤,万物归一:在重组中窥见无声的秩序
    文章目录分治专题(二):归并排序的核心思想与进阶应用前言、第二章:归并排序的应用与延展2.1归并排序(medium)解法(归并排序)C++代码实现易错点提示时间复杂度和空间复杂度2.2数组中的逆序对(hard)解法(利用归并排序的过程—分治)核心步骤与实现细节C++代码实现易错点提示时间......
  • 寻找最优解的算法-模拟退火算法(Simulated Annealing)
    模拟退火算法(SimulatedAnnealing,简称SA)是一种基于物理退火过程的优化算法。它灵感来源于金属退火过程中的分子运动——在高温下,金属分子的自由度很高,随着温度的逐渐降低,分子排列逐渐有序,最终达到最低能量状态。退火算法通过模拟这一过程,解决复杂的优化问题。在现实生活中......
  • 芒果Ultralytics最新YOLO11算法原理解析-包含最新详细-结构图,以及内附YOLO11各部分细
    YOLO11系列是YOLO家族中最先进的(SOTA)、最轻量级、最高效的模型,其表现优于其前辈。它由Ultralytics创建,该组织发布了YOLOv8,这是迄今为止最稳定、使用最广泛的YOLO变体。YOLO11将延续YOLO系列的传奇。在本文中,我们将探讨YOLO11文章目录YOLO11架构、YOLO11......
  • Java程序基础③Java运算符+逻辑控制+循环结构+输入输出
    目录1.Java运算符1.1算术运算符1.2增量运算符1.3关系运算符1.4逻辑运算符1.5位运算符1.6移位操作符1.7(三目)条件操作符1.8操作符优先级2.Java逻辑控制2.1顺序结构2.2分支结构2.2.1 if语句2.2.2switch语句3.循环结构3.1while循环3.2for循环3.......
  • jmeter接口测试之SSH Command
    原文地址:https://download.csdn.net/blog/column/8863406/106334136需要提前安装好的工具:按照好jmeter插件:sshprotocolsupport、sshmonsamlerCollector   然而在实际测试中,不能确定我们的的机器能够正常连接。这里就要用到while循环设置重连,如下添加while控......
  • 【转载】遗传算法-HyperNEAT Approach in Neuroevolution
    原文地址:https://medium.com/@eugenesh4work/hyperneat-approach-in-neuroevolution-d2ead10aad33HyperNEAT(Hypercube-basedNeuroEvolutionofAugmentingTopologies)innovativealgorithmextendsthecapabilitiesofevolutionarycomputation,particularlyinevol......