三、算法步骤、代码、及结果
1. 算法伪代码
功能: 创建或读取Iris数据集
输入: 无
输出: DataFrame (包含Iris数据集)
开始
尝试
从 "iris.csv" 文件中读取数据到 df
打印 "从本地读取iris数据集成功"
打印 df 的前几行
异常处理 FileNotFoundError
打印 "本地iris.csv文件未找到,开始创建..."
调用 create_iris_dataset()
从新创建的 "iris.csv" 文件中读取数据到 df
打印 "创建并从本地读取iris数据集成功"
打印 df 的前几行
结束尝试
结束
功能: 创建Iris数据集 CSV 文件
输入: 无
输出: 无
开始
定义列名 = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm', 'Species']
定义样本数据 data
创建 DataFrame df 使用列名和样本数据
将 df 保存为 "iris.csv"
打印 "iris数据集CSV文件已创建。"
结束
功能: 主处理逻辑
输入: 无
输出: 模型评估指标
开始
从 scikit-learn 加载 Iris 数据集
赋值 X, y 为加载的数据和标签
打印 "从scikit-learn加载iris数据集成功"
打印 X.shape 和 y.shape
初始化随机森林分类器 rf_classifier
初始化 KFold 交叉验证器 kf (5折,洗牌)
初始化列表 accuracies, precisions, recalls, f1s 为空
对于每个 (train_index, test_index) 在 kf.split(X) 中
定义 X_train = X[train_index]
定义 X_test = X[test_index]
定义 y_train = y[train_index]
定义 y_test = y[test_index]
训练 rf_classifier 使用 X_train 和 y_train
预测 y_pred 使用 X_test
计算并添加准确度到 accuracies
计算并添加精度到 precisions
计算并添加召回率到 recalls
计算并添加 F1 值到 f1s
结束循环
打印平均准确度: 计算 accuracies 的均值
打印平均精度: 计算 precisions 的均值
打印平均召回率: 计算 recalls 的均值
打印平均F1值: 计算 f1s 的均值
结束
2. 算法主要代码
(1)完整源代码
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import KFold
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
# 步骤1:创建iris数据集CSV文件(如果需要)
def create_iris_dataset():
# 创建iris数据集的列名
columns = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm', 'Species']
# 创建iris数据集的样本数据
data = {
'SepalLengthCm': np.random.rand(150) * 10,
'SepalWidthCm': np.random.rand(150) * 5,
'PetalLengthCm': np.random.rand(150) * 15,
'PetalWidthCm': np.random.rand(150) * 10,
'Species': np.random.choice(['Setosa', 'Versicolour', 'Virginica'], 150)
}
# 将数据转换为DataFrame
df = pd.DataFrame(data, columns=columns)
# 保存DataFrame为CSV文件
df.to_csv('iris.csv', index=False)
print("iris数据集CSV文件已创建。")
# 检查iris.csv文件是否存在,如果不存在则创建
try:
df = pd.read_csv('iris.csv')
print("从本地读取iris数据集成功:")
print(df.head())
except FileNotFoundError:
print("本地iris.csv文件未找到,开始创建...")
create_iris_dataset()
df = pd.read_csv('iris.csv')
print("创建并从本地读取iris数据集成功:")
print(df.head())
# 步骤2:从scikit-learn库中直接加载iris数据集
iris = load_iris()
X, y = iris.data, iris.target
print("从scikit-learn加载iris数据集成功:")
print("数据集形状:", X.shape, y.shape)
# 步骤3:实现五折交叉验证进行模型训练
rf_classifier = RandomForestClassifier(n_estimators=100)
kf = KFold(n_splits=5, shuffle=True, random_state=42)
accuracies = []
precisions = []
recalls = []
f1s = []
for train_index, test_index in kf.split(X):
X_train, X_test = X[train_index], X[test_index]
y_train, y_test = y[train_index], y[test_index]
# 训练模型
rf_classifier.fit(X_train, y_train)
y_pred = rf_classifier.predict(X_test)
# 评估模型
accuracies.append(accuracy_score(y_test, y_pred))
precisions.append(precision_score(y_test, y_pred, average='macro'))
recalls.append(recall_score(y_test, y_pred, average='macro'))
f1s.append(f1_score(y_test, y_pred, average='macro'))
# 步骤4:计算并输出模型的准确度、精度、召回率和F1值
print(f"平均准确度: {np.mean(accuracies)}")
print(f"平均精度: {np.mean(precisions)}")
print(f"平均召回率: {np.mean(recalls)}")
print(f"平均F1值: {np.mean(f1s)}")
(2)调用库方法
# 导入所需的库
import pandas as pd
from sklearn.datasets import load_iris
# 从 scikit-learn 库中加载 iris 数据集
iris = load_iris()
X, y = iris.data, iris.target
# 将数据转换为 DataFrame
iris_df = pd.DataFrame(X, columns=iris.feature_names)
iris_df['target'] = y
# 划分数据集为训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 自己编写的决策树分类器算法
class DecisionTreeClassifier:
def __init__(self):
self.tree = None
def fit(self, X, y):
# 这里只是一个占位符,实际的决策树构建代码会更复杂
self.tree = "决策树模型"
def predict(self, X):
# 这里只是一个占位符,实际的预测代码会更复杂
return [0] * len(X) # 假设所有预测结果都是类别0
# 初始化分类器
dt_classifier = DecisionTreeClassifier()
# 训练模型
dt_classifier.fit(X_train, y_train)
# 使用训练好的模型进行预测
y_pred = dt_classifier.predict(X_test)
# 计算并打印模型的准确度
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
print(f"\n准确度: {accuracy:.4f}")
3. 结果截图(包括:准确率;精度、召回率、F1)
(1)准确率:***
(2)精度:***,召回率:***,F1:***
四、心得体会
通过本次实验,我熟悉了 Python 的基本操作,掌握了使用 pandas 读取数据集及模型性能评估。实验中实现了五折交叉验证,加深了对训练集、测试集和评估标准(准确度、精度、召回率和 F1 值)的理解。使用随机森林分类器提高了我对机器学习模型的认识。这次实践让我认识到理论与实际结合的重要性,还学会了查阅资料解决问题的技能。
浙公网安备 33010602011771号