继续完成机器学习实验二,以下为部分实验内容:
实验二:逻辑回归算法实现与测试
一、实验目的
深入理解对数几率回归(即逻辑回归的)的算法原理,能够使用 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),表明测试集上模型的精确度和召回率都非常高。
标签:训练,日报,pred,模型,train,测试,test,12.19 From: https://www.cnblogs.com/lijianlongCode13/p/18671490