1. 算法伪代码

# 导入必要的库  

导入 numpy  

导入 sklearn.datasets  

导入 sklearn.model_selection  

导入 sklearn.linear_model  

导入 sklearn.metrics  

 

# 1. 加载 Iris 数据集  

iris = 加载 iris 数据集  

X = iris.data  # 特征数据  

y = iris.target  # 标签数据  

 

# 2. 留出法划分数据集  

X_train, X_test, y_train, y_test = 划分数据集(X, y, 测试集比例=0.33, 随机种子=42, 分层=)  

 

# 3. 使用逻辑回归算法训练模型  

logreg = 创建逻辑回归模型(最大迭代次数=200)  

logreg.适配(X_train, y_train)  

 

# 4. 使用五折交叉验证对模型性能进行评估  

cv = 创建分层 K 折交叉验证(折数=5, 打乱=, 随机种子=42)  

 

# 准确度评估  

accuracy = 交叉验证模型(logreg, X, y, cv, 评价指标='准确度')  

打印(五折交叉验证的准确度, accuracy.均值(), accuracy.标准差())  

 

# 精度、召回率和 F1 值  

定义评估模型(model, X, y, cv):  

     precision = 交叉验证模型(model, X, y, cv, 评价指标='加权精度')  

     recall = 交叉验证模型(model, X, y, cv, 评价指标='加权召回率')  

     f1 = 交叉验证模型(model, X, y, cv, 评价指标='加权 F1')  

 

     打印(五折交叉验证的精度, precision.均值(), precision.标准差())  

     打印(五折交叉验证的召回率, recall.均值(), recall.标准差())  

     打印(五折交叉验证的 F1 , f1.均值(), f1.标准差())  

 

# 运行模型评估  

评估模型(logreg, X, y, cv)  

 

# 5. 使用测试集测试模型性能  

y_pred = logreg.预测(X_test)  

打印(测试集准确度, 计算准确度(y_test, y_pred))  

打印(测试集精度, 计算精度(y_test, y_pred, 平均方式='加权'))  

打印(测试集召回率, 计算召回率(y_test, y_pred, 平均方式='加权'))  

打印(测试集 F1 , 计算 F1 (y_test, y_pred, 平均方式='加权'))

   2. 算法主要代码

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

# 导入必要的库

import numpy as np

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split, cross_val_score, StratifiedKFold

from sklearn.linear_model import LogisticRegression

from sklearn.metrics import precision_score, recall_score, f1_score, accuracy_score

from sklearn.model_selection import cross_val_predict

 

# 1. 加载 Iris 数据集

iris = load_iris()

X = iris.data  # 特征数据

y = iris.target  # 标签数据

 

# 2. 留出法划分数据集,1/3 作为测试集,2/3 作为训练集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)

 

# 3. 使用逻辑回归算法训练模型

logreg = LogisticRegression(max_iter=200)

logreg.fit(X_train, y_train)

 

# 4. 使用五折交叉验证对模型性能进行评估

cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)

 

# 准确度评估

accuracy = cross_val_score(logreg, X, y, cv=cv, scoring='accuracy')

print(f'五折交叉验证的准确度: {accuracy.mean():.4f} (+/- {accuracy.std():.4f})')

 

# 精度、召回率和 F1

def evaluate_model(model, X, y, cv):

    precision = cross_val_score(model, X, y, cv=cv, scoring='precision_weighted')

    recall = cross_val_score(model, X, y, cv=cv, scoring='recall_weighted')

    f1 = cross_val_score(model, X, y, cv=cv, scoring='f1_weighted')

 

    print(f'五折交叉验证的精度: {precision.mean():.4f} (+/- {precision.std():.4f})')

    print(f'五折交叉验证的召回率: {recall.mean():.4f} (+/- {recall.std():.4f})')

    print(f'五折交叉验证的 F1 : {f1.mean():.4f} (+/- {f1.std():.4f})')

 

# 运行模型评估

evaluate_model(logreg, X, y, cv)

 

# 5. 使用测试集测试模型性能

y_pred = logreg.predict(X_test)

print(f'测试集准确度: {accuracy_score(y_test, y_pred):.4f}')

print(f'测试集精度: {precision_score(y_test, y_pred, average="weighted"):.4f}')

print(f'测试集召回率: {recall_score(y_test, y_pred, average="weighted"):.4f}')

print(f'测试集 F1 : {f1_score(y_test, y_pred, average="weighted"):.4f}')

注:函数参数简写说明

1. train_test_split()  — 数据集划分

X:特征数据(输入)。

Y :目标标签数据。

 test_size:测试集比例,如 0.33 表示 1/3 数据为测试集。

 random_state :随机种子,保证结果一致。

 Stratify :按标签分层抽样,确保训练集和测试集标签比例一致。

 2.  LogisticRegression()  — 逻辑回归模型

 max_iter :最大迭代次数,默认为 100,设为 200 可增加迭代次数。

random_state :随机种子,确保结果一致。

cross_val_score()  — 交叉验证

 logreg :训练模型。

 X :特征数据。

 Y :目标标签数据。

 Cv :交叉验证的折数,通常为 5

 Scoring :评估指标,`'accuracy'` 为准确度。

StratifiedKFold()  — 分层 K 折交叉验证

 n_splits :折数,数据被划分成几份。

 

 Shuffle :是否打乱数据,`True` 为打乱。

 random_state :随机种子,保证结果一致。

accuracy_score() , precision_score() ,  recall_score() , f1_score()  — 评估指标

 y_test :真实标签。

 y_pred :预测标签。

 Average :多类别时的平均方法,weighted 按类权重加权。

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

 

 

四、实验结果分析

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

 

2. 对比分析

训练集性能优于测试集:可以看到训练集的各项指标明显高于测试集,说明模型在训练数据上过拟合,可能不了解测试集的特征。

下降幅度评估:准确度、精度、召回率和 F1 值都有所下降,表明模型的泛化能力需要改进。可能需要调整模型参数、选择更复杂的模型,或增加更多的训练数据以提高模型的鲁棒性。

posted on 2025-01-06 15:21    阅读(7)  评论(0)    收藏  举报