12.19日报

继续完成机器学习实验二,以下为部分实验内容:

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

一、实验目的

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

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

 

 

二、实验内容

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

意同分布取样);

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

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

择;

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

部分。

 

 

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

   1. 算法伪代码

# 伪代码:逻辑回归算法实现与测试

 

# 步骤1: 数据准备

1. 加载iris数据集

2. 将数据集分为特征集(X)和目标变量(y)

3. 使用留出法将数据集分为训练集和测试集,测试集大小为1/3

 

# 步骤2: 模型训练

4. 创建逻辑回归模型实例

5. 使用训练集数据训练模型

 

# 步骤3: 交叉验证

6. 使用五折交叉验证评估模型性能

   a. 将训练集分为5个部分

   b. 对于每一折:

      i. 使用4/5的数据作为训练集,1/5的数据作为验证集

      ii. 训练模型

      iii. 在验证集上评估模型准确度

   c. 计算所有折的平均准确度和标准差

 

# 步骤4: 测试集评估

7. 使用训练好的模型在测试集上进行预测

8. 计算测试集上的准确度、精确度、召回率和F1值

   a. 精确度:预测为正类的样本中实际为正类的比例

   b. 召回率:实际为正类的样本中被正确预测为正类的比例

   c. F1值:精确度和召回率的调和平均数

 

# 步骤5: 结果输出

9. 输出交叉验证的准确度分数和平均准确度

10. 输出测试集的分类报告,包括精确度、召回率、F1值和支持度

11. 输出测试集的准确度

 

# 步骤6: 实验报告

12. 根据以上步骤和结果撰写实验报告

   a. 描述实验过程

   b. 分析实验结果

   c. 讨论模型性能和可能的改进方向

   2. 算法主要代码

完整源代码\调用库方法(函数参数说明)

# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, accuracy_score

# 加载iris数据集
iris = load_iris()
X, y = iris.data, iris.target

# 使用留出法留出1/3的样本作为测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=42)

# 创建逻辑回归模型实例
logreg = LogisticRegression(max_iter=200)

# 训练模型
logreg.fit(X_train, y_train)

# 在训练集上进行预测
y_train_pred = logreg.predict(X_train)

# 打印训练集的性能报告
print("Training set performance:")
print(classification_report(y_train, y_train_pred))
print("Training Accuracy:", accuracy_score(y_train, y_train_pred))

# 在测试集上进行预测
y_test_pred = logreg.predict(X_test)

# 打印测试集的性能报告
print("\nTest set performance:")
print(classification_report(y_test, y_test_pred))
print("Test Accuracy:", accuracy_score(y_test, y_test_pred))

 

load_iris

  • 无参数,这个函数直接从scikit-learn的数据库中加载iris数据集。

train_test_split

  • X: 特征数据集。
  • y: 目标变量。
  • test_size: 测试集所占比例,这里设置为1/3。
  • random_state: 随机数生成器的种子,确保每次划分都是可复现的。这里设置为42。

python

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=42)

LogisticRegression

  • max_iter: 最大迭代次数,用于确定优化算法(默认使用liblinear,对于多类分类使用lbfgs)在停止之前运行的迭代次数。默认值是100,这里设置为200以确保模型能够收敛。

python复制

logreg = LogisticRegression(max_iter=200)

fit

  • 无参数说明,这是模型的拟合方法,用于在给定训练数据上训练模型。

python

logreg.fit(X_train, y_train)

predict

  • 无参数说明,这是模型的预测方法,用于在给定数据上进行预测。

python

y_train_pred = logreg.predict(X_train)

y_test_pred = logreg.predict(X_test)

classification_report

  • y_true: 真实的标签。
  • y_pred: 预测的标签。
  • target_names: 类别的名称列表,用于报告中显示。默认为None,这里未使用,所以结果中类别以数字显示。

python

print(classification_report(y_train, y_train_pred))

print(classification_report(y_test, y_test_pred))

accuracy_score

  • y_true: 真实的标签。
  • y_pred: 预测的标签。

python

print("Training Accuracy:", accuracy_score(y_train, y_train_pred))

print("Test Accuracy:", accuracy_score(y_test, y_test_pred))

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

 

 

四、实验结果分析

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

 

 

2. 对比分析

Accuracy(准确率):

 

训练集准确率为0.96,测试集准确率为1.00。测试集的准确率更高,表明模型在未见过的测试数据上表现非常好,没有错误分类任何样本。

Precision(精确度):

 

训练集的精确度略有波动,类别1的精确度稍低(0.97),而测试集的精确度在所有类别上都是完美的(1.00)。

Recall(召回率):

 

训练集的召回率在类别1上稍低(0.91),而测试集的召回率在所有类别上都是完美的(1.00)。

F1-Score:

 

训练集的F1分数在所有类别上都很高,但测试集的F1分数完美(1.00),表明测试集上模型的精确度和召回率都非常高。

 

posted @ 2025-01-14 20:00  Code13  阅读(27)  评论(0)    收藏  举报