实验2的报告抄袭自报告,存粹是为了完成作业,不带任何商业目的。侵删!
文章目录
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 数据导入
原始数据集中的数据为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)
df = pd.DataFrame(imputed_data)
df = pd.concat([df2, df], axis=1)
return df
1.4.2 数据清洗
数据集中有的数据项严重缺失,为了方便下一步工作,需要剔除训练数据中缺失值大于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.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.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所示。

1.4.5 多层感知器分类器(MLP Classifier)
实验过程中主要使用sklearn函数包来实现多层感知器分类器(MLP Classifier)。MLP是常见的ANN(Artificial Neuro Network,人工神经网络)算法,它由一个输入层,一个输出层和一个或多个隐藏层组成。在MLP中的所有神经元都差不多,每个神经元都有几个输入(连接前一层)神经元和输出(连接后一层)神经元,该神经元会将相同值传递给与之相连的多个输出神经元,如图所示。本次实验使用Python所实现MLP算法如下所示:
# 构建 Keras 模型
mlp = MLPClassifier(random_state=seed, solver='lbfgs')
# 训练模式
mlp.fit(partial_train_data, partial_train_targets)
首先取十分之一的数据作为测试数据,分别赋給val_data与val_targets;而后准备训练数据,分别赋給partial_train_data与partial_train_targets;之后从sklearn.neural_network包中导入MLPClassifier函数,并初始化;接着以partial_train_data与partial_train_targets为参数对MLPClassifier进行训练;最后完成精确度与折验证分数平均等指标的统计后。多层感知器分类器的实验结果如图1.4.3所示。

1.4.6 朴素贝叶斯算法
实验过程中主要使用sklearn函数包来实现朴素贝叶斯方法(Naive Bayes)。朴素贝叶斯(Naive Bayes)属于监督学习的生成模型,实现简单,没有迭代,学习效率高,在大样本量下会有较好的表现。但因为假设太强——假设特征条件独立,在输入向量的特征条件有关联的场景下并不适用。朴素贝叶斯分类器的主要思路:通过联合概率P(x,y)=P(x|y)P(y)建模,运用贝叶斯定理求解后验概率P(y|x);将后验概率最大者对应的的类别作为预测类别。本次实验使用Python所实现朴素贝叶斯方法如下所示:
# 构建 Keras 模型
nb = GaussianNB()
# 训练模式
nb.fit(partial_train_data, partial_train_targets)
首先取十分之一的数据作为测试数据,分别赋給val_data与val_targets;而后准备训练数据,分别赋給partial_train_data与partial_train_targets;之后从sklearn.naive_bayes包中导入GaussianNB函数,并初始化;接着以partial_train_data与partial_train_targets为参数对GaussianNB进行训练;最后完成精确度与折验证分数平均等指标的统计后。朴素贝叶斯分类器的实验结果如图1.4.4所示。

1.4.7 SVM算法
实验过程中主要使用sklearn函数包来实现SVM方法。SVM学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。本实验借助sklearn中的SVC函数实现了SVM方法,SVC全称为C-Support Vector Classification,即支持向量分类,是一种基于libsvm实现的,时间复杂度为样本数量平方的算法。Python实现代码如下所示:
# 构建 Keras 模型
svc = SVC(kernel='poly', gamma="auto")
# 训练模式
svc.fit(partial_train_data, partial_train_targets)
首先取十分之一的数据作为测试数据,分别赋給val_data与val_targets;而后准备训练数据,分别赋給partial_train_data与partial_train_targets;之后从sklearn.svm包中导入SVC函数,并初始化;接着以partial_train_data与partial_train_targets为参数对SVC进行训练;最后完成精确度与折验证分数平均等指标的统计后。SVM的实验结果如图1.4.5所示。

1.4.8 随机森林算法
实验过程中主要使用sklearn函数包来实现随机森林方法。随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法。随机森林非常简单,易于实现,计算开销也很小,但是它在分类和回归上表现出非常惊人的性能。Python实现代码如下所示:
# 构建 Keras 模型
rf = RandomForestClassifier(n_estimators=10, max_depth=10)
# 训练模式
rf.fit(partial_train_data, partial_train_targets)