《数据挖掘》实验报告
2020 年 10 月
目 录
1 实验 1:基于 UCI soybean Dataset 的分类任务 ........................................................1
1.1 实验目的................................................................................................................1
1.2 实验任务................................................................................................................1
1.3 实验环境................................................................................................................1
1.4 实验内容................................................................................................................1
1.4.1 数据清洗 ...........................................................................................................1
1.4.2 数据导入 ...........................................................................................................1
1.4.3 kNN 算法 ...........................................................................................................2
1.4.4 决策树算法 .......................................................................................................2
1.4.5 多层感知器分类器(MLP Classifier)...........................................................3
1.4.6 朴素贝叶斯算法 ...............................................................................................4
1.4.7 SVM 算法 ..........................................................................................................4
1.4.8 随机森林算法 ...................................................................................................5
1.4.9 bagging 算法 ......................................................................................................6
1.5 实验分析................................................................................................................7
1.5.1 算法最佳性能对比 ...........................................................................................7
1.5.2 算法平均性能对比 ...........................................................................................8
1.5.3 测试样例占比对算法结果的影响 ...................................................................8
1.5.4 初始化随机数对算法结果的影响 ...................................................................9
1.6 实验总结..............................................................................................................11
附录 ...........................................................................................................................................11
2 实验 2:基于 UCI Groceries Dataset 的关联分析任务............................................12
2.1 背景......................................................................................................................12
2.2 问题描述..............................................................................................................12
2.3 实验环境..............................................................................................................13
2.4 数据集及实现的技术方案..................................................................................13
2.4.1 数据集介绍及预处理 .....................................................................................13
2.4.2 频繁项集挖掘 .................................................................................................14
2.4.3 频繁项目集挖掘 .............................................................................................16
2.5 实验结果..............................................................................................................16
附录 ...............................................................................................................................................19
3 实验 3:基于 PACS RAW Labeled Dataset 的聚类任务.........................................20
3.1 实验目的..............................................................................................................20
3.2 实验任务..............................................................................................................20
3.3 实验环境..............................................................................................................20
3.4 实验内容..............................................................................................................20
3.4.1 库函数引用 .....................................................................................................20
3.4.2 密度聚类(DBSCAN) .................................................................................20
3.4.3 伪代码与流程图 .............................................................................................21
3.4.4 核心代码 .........................................................................................................22
3.5 实验分析..............................................................................................................23
附录 ...............................................................................................................................................27
1
1 实验 1:基于 UCI soybean Dataset 的分类任务
1.1 实验目的
� 熟练掌握基本的数据预处理技术;
� 学会运用决策树、随机森林等方法解决分类任务。
1.2 实验任务
基于 Molecular Biology DataSet 完成分类任务,kNN、决策树、多层感知器、朴素贝叶斯、SVM、随机
森林、bagging 方法任选或组合,且不限于上述方法和策略,允许有预处理步骤。
1.3 实验环境
� 硬件:Dell G3 3579 笔记本
� 软件:
OS:Windows 10 Pro N for Workstations
平台工具:PyCharm 2019.3.4 (Professional Edition)、Python 3.7.4、OriginPro 2018(64-bit)
1.4 实验内容
1.4.1 数据清洗
数据集中有的数据项严重缺失,为了方便下一步工作,需要剔除训练数据中缺失值大于 90%的列。具体
操作是构建函数 drop_col,以待剔除数据集、列名与阈值为参数,在导入训练数据时调用其进行筛除。
实现代码如下所示:
def drop_col(df, col_name, cutoff=0.9):
n = len(df)
cnt = df[col_name].count()
if (float(cnt) / n) < cutoff:
df.drop(col_name, axis=1, inplace=True)
1.4.2 数据导入
原始数据集中的数据为 csv 格式,使用 Python 的第三方库 pandas 的 csv 读取方法可以方便地处理。如
1.4.1 所述,严重缺失数据的列(仅对于训练数据)应当删除,数据缺失不严重的使用 sklearn 的
SimpleImputer 进行补全,本次实验 SimpleImputer 的参数设置为 most_frequent。最后将格式化的数据
存入 df 中,并返回 df 的值。实现代码如下所示:
url = "data/soybean-large.data"
dataset = pd.read_csv(url, names=names)
dataset = dataset.replace({'?': np.nan})
for item in dataset.columns.values:
drop_col(dataset, item, cutoff=0.8)
df1 = dataset.iloc[:, 1:]
df2 = dataset.iloc[:, :1]
imr = SimpleImputer(strategy='most_frequent')
imr = imr.fit(df1)
imputed_data = imr.transform(df1.values)
2
df = pd.DataFrame(imputed_data)
df = pd.concat([df2, df], axis=1)
return df
1.4.3 kNN 算法
实验过程中主要使用 sklearn 函数包来实现 kNN 方法,同时为了更好地调节 kNN 算法的参数,本次实
验实现了一个 choose_best_k_to_knn 函数用于选取最大值,即 best_k 以及对应的下标。首先,从
sklearn.neighbors 函 数 包 中 导 入 KNeighborsClassifier 函 数 。 然 后 , 使 用 best 作 为 参 数 初 始 化
KNeighborsClassifier。最终,将分割好的数据分别作为第一个与第二个参数,对 kNN 模型进行训练。
实现代码如下所示:
best_k, max_value = choose_best_k_to_knn(x_train, y_train, x_validation, y_validation)
knn = KNeighborsClassifier(n_neighbors=best_k)
knn.fit(x_train, y_train)
值得一提的是,本次实验所用的 scikit-learn(简称 sklearn)是目前最受欢迎,也是功能最强大的一个
用于机器学习的 Python 库件。它广泛地支持各种分类、聚类以及回归分析方法比如支持向量机、随机
森林、DBSCAN 等等,由于其强大的功能、优异的拓展性以及易用性,目前受到了很多数据科学从业者
的欢迎,也是业界相当著名的一个开源项目之一。kNN 的实验结果如图 1.4.1 所示。
图 1.4.1 kNN 实验结果
1.4.4 决策树算法
实验过程中主要使用 sklearn 函数包来实现决策树方法。决策树(decision tree)算法基于特征属性进行
分类,其主要的优点:模型具有可读性,计算量小,分类速度快。sklearn 决策树算法类库内部实现是
使 用 了 调 优 过 的 CART 树 算 法 , 既 可 以 做 分 类 , 又 可 以 做 回 归 。 分 类 决 策 树 的 类 对 应 的 是
DecisionTreeClassifier。实现代码如下所示:
# 构建 Keras 模型
dtc = DecisionTreeClassifier()
# 训练模式
dtc.fit(partial_train_data, partial_train_targets)
首先取十分之一的数据作为测试数据,分别赋給 val_data 与 val_targets;而后准备训练数据,分别赋給
partial_train_data 与 partial_train_targets;之后从 sklearn.tree 包中导入 DecisionTreeClassifier 函数,并
初始化;接着以 partial_train_data 与 partial_train_targets 为参数对 DecisionTreeClassifier 进行训练;最
后完成精确度与折验证分数平均等指标的统计后。决策树方法的实验结果如图 1.4.2 所示。