机器学习B:实验一:数据准备与模型评估
一、实验目的
熟悉 Python 的基本操作,掌握对数据集的读写实现、对模型性能的评估实现的能力;
加深对训练集、测试集、N 折交叉验证、模型评估标准的理解。
二、实验内容
(1)利用 pandas 库从本地读取 iris 数据集;
(2)从 scikit-learn 库中直接加载 iris 数据集;
(3)实现五折交叉验证进行模型训练;
(4)计算并输出模型的准确度、精度、召回率和 F1 值。
三、算法步骤、代码、及结果
1. 算法伪代码
步骤1: 导入所需的库
步骤2: 尝试从本地读取iris.csv文件,并打印前几行数据
步骤3: 从scikit-learn库中加载iris数据集,并创建DataFrame
步骤4: 划分数据集为训练集和测试集
步骤5: 初始化随机森林分类器,并设置参数
步骤6: 使用五折交叉验证评估模型性能,并打印平均分数
步骤7: 训练模型
步骤8: 使用训练好的模型进行预测
步骤9: 计算并打印模型的准确度、精度、召回率和F1值
2. 算法主要代码
(1)完整源代码
# 导入所需的库
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
# 从本地读取iris数据集
try:
iris_local = pd.read_csv('iris.csv')
print("从本地读取的 iris 数据集:")
print(iris_local.head())
except FileNotFoundError:
print("本地 iris.csv 文件未找到,请确保文件路径正确。")
# 从scikit-learn库中加载iris数据集
iris_sklearn = load_iris()
X_sklearn, y_sklearn = iris_sklearn.data, iris_sklearn.target
iris_df_sklearn = pd.DataFrame(X_sklearn, columns=iris_sklearn.feature_names)
iris_df_sklearn['target'] = y_sklearn
print("\n从 scikit-learn 库中加载的 iris 数据集:")
print(iris_df_sklearn.head())
# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_sklearn, y_sklearn, test_size=0.2, random_state=42)
# 初始化随机森林分类器,并设置参数
rf_classifier = RandomForestClassifier(n_estimators=100)
# 使用五折交叉验证评估模型性能,并打印平均分数
cv_scores = cross_val_score(rf_classifier, X_train, y_train, cv=5)
print(f"\n五折交叉验证分数: {cv_scores}")
print(f"平均交叉验证分数: {cv_scores.mean()}")
# 训练模型
rf_classifier.fit(X_train, y_train)
# 使用训练好的模型进行预测
y_pred = rf_classifier.predict(X_test)
# 计算并打印模型的准确度、精度、召回率和F1值
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred, average='macro')
recall = recall_score(y_test, y_pred, average='macro')
f1 = f1_score(y_test, y_pred, average='macro')
print(f"\n准确度: {accuracy:.4f}")
print(f"精度: {precision:.4f}")
print(f"召回率: {recall:.4f}")
print(f"F1值: {f1:.4f}")
(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:***
四、心得体会
1. Python和库的掌握
通过这个实验,我对Python的基本操作有了更深的了解,尤其是在数据处理和分析方面。我学会了如何使用pandas库来读取和操作数据集,这是一个非常重要的技能。同时,我也熟悉了scikit-learn库,它提供了许多方便的数据集、模型和评估工具,极大地简化了机器学习项目的流程。
2. 数据集的理解
实验中,我直接从本地文件和scikit-learn库中加载了iris数据集,这让我对数据集的结构和内容有了直观的认识。了解数据集的特征和目标变量对于后续的模型训练和评估至关重要。
3. 模型训练与评估
通过实现五折交叉验证和计算模型的准确度、精度、召回率和F1值,我对模型性能的评估有了更全面的理解。这些指标不仅帮助我量化模型的表现,还让我学会了如何解释这些结果,这对于任何机器学习项目的成功都是关键的。
4. 训练集与测试集的重要性
我学到了如何将数据集划分为训练集和测试集,以及这样做的重要性。训练集用于构建模型,而测试集用于评估模型的泛化能力。这种划分确保了模型在未见过的数据上也能表现良好。
5. N折交叉验证的理解
实验中的五折交叉验证让我深刻理解了交叉验证的概念和优点。它是一种评估模型泛化能力的技术,通过将训练数据分成多个小批次,可以减少模型评估的方差,提供更可靠的性能估计。
6. 实践中的挑战
在实验过程中,我也遇到了一些挑战,比如数据路径问题、库函数的使用等。这些挑战让我意识到在实际项目中,问题解决能力和调试技巧同样重要。
7. 自主学习与探索
虽然我使用了scikit-learn库中的随机森林分类器,但我也尝试了自己编写一个简单的决策树分类器。这个过程虽然复杂,但加深了我对机器学习算法背后的原理的理解。
8. 实验报告的撰写
最后,撰写实验报告的过程让我学会了如何将实验过程和结果系统地整理和表达出来。这对于学术交流和项目文档的编写都是非常宝贵的技能。