物联网与数据挖掘习题及答案 第5、6章.docx

上传人:太** 文档编号:94704049 上传时间:2023-08-05 格式:DOCX 页数:9 大小:24.49KB
返回 下载 相关 举报
物联网与数据挖掘习题及答案 第5、6章.docx_第1页
第1页 / 共9页
物联网与数据挖掘习题及答案 第5、6章.docx_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《物联网与数据挖掘习题及答案 第5、6章.docx》由会员分享,可在线阅读,更多相关《物联网与数据挖掘习题及答案 第5、6章.docx(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、5-1简述决策树算法的基本思想。决策树主要由节点和连接节点的有向边组成,其中节点分为内部节点和叶子节点。 内部节点对应样本的特征,叶子节点对应样本的标签。决策树的分类过程:首先,从根 节点开始,对样本的相应特征进行测试,并根据测试结果将样本分配到子节点中,每个 子节点对应该特征的一个取值;然后,递归地对样本进行特征取值的测试,并根据测试 结果将样本分配到子节点中,直至达到叶子节点;最后,将样本的标签预测为叶子节点 所对应的标签。每个内部节点的子节点个数等于该内部节点所对应的特征的取值个数。5-2 ID3决策树算法的停止条件有哪些?TD3决策树算法的停止条件通常包括以下几个:所有样本属于同一类别

2、:如果在当前节点中所有的样本都属于同一类别,则算法停 止,将该节点标记为叶子节点,输出该类别。属性集为空:如果当前节点的属性集为空,即没有可用于划分样本的属性,则算法 停止,将该节点标记为叶子节点,输出该节点中样本数最多的类别。样本集为空:如果当前节点的样本集为空,则算法停止,将该节点标记为叶子节点, 输出该节点的父节点中样本数最多的类别。到达预设的树深度:如果当前节点所在的深度已经到达了事先设定的树深度上限, 则算法停止,将该节点标记为叶子节点,输出该节点中样本数最多的类别。样本数目过少:如果当前节点中的样本数目小于一个预设的阈值,则算法停止,将 该节点标记为叶子节点,输出该节点中样本数最多

3、的类别。5-3给出完整的利用ID3算法构建关于表5-2中数据的决策树的过程。根据表5-2中的数据,可以使用ID3算法来构建一棵决策树。选择根节点。首先, 根据信息增益的计算公式,在所有属性中选择具有最大信息增益的属性作为根节点。得 到每个属性的信息增益如下:属性信息增益年龄0.083有工作0.323有自己的房子0.419信贷情况0.362因此,选择“有自己的房子”作为根节点。接着,将样本集合D按照“有自己的房子”属性 的取值划分成两个子集:子集D1:包含有自己的房子的样本,共有6个,其中好信用的样 本有4个,坏信用的样本有2个。子集D2:包含没有自己的房子的样本,共有9个,其中 好信用的样本有

4、5个,坏信用的样本有4个。由于子集D1中坏信用的样本数量少于好信用的样本数量,因此我们将其标记为叶子节 点,并将其类别设定为“是九对于子集D2,我们需要选择一个属性作为内部节点。根据信息增益的计算公式,在剩 余属性中选择具有最大信息增益的属性作为内部节点得到每个属性的信息增益如下:属性信息增益年龄0.251有工作0.918佶贷情况0.474因此,选择“有工作”作为子节点的内部节点。接着,将子集D2按照“有工作”属性的取值划 分成两个子集:子集D21:包含有工作的样本,共有6个,其中好信用的样本有3个,坏信 用的样本有3个。子集D22:包含没有工作的样本,共有3个,其中好信用的样本有2个, 坏信

5、用的样本有1个。由于子集D21和D22中均有好信用和坏信用的样本,因此需要继续进行划分。在子集 D21中,坏信用的样本数量多于好信用的样本数量,因此将其标记为叶子节点,并将其类别 设定为“否”。而在子集D22中,好信用的样本数量多于坏信用的样本数量,因此将其标记为 叶子节点,并将其类别设定为“是”。构建完整的决策树。最终,得到了一棵如下所示的决策树:有自己的房子是无工作5-4给出完整的利用C4.5算法构建关于表5-2中数据的决策树的过程。计算每个属性的信息增益比,并选择具有最大信息增益比的属性作为根节点。计算结果 如下:属性信息增益属性端信息增益比年龄0.0831.5710.053有工作0.3

6、230.9850.327有自己的房子0.4190.940.446信贷情况0.3621.1560.313因此,选择“有自己的房子”作为根节点。对于每个非叶子节点,选择具有最大信息增益 比的属性作为其子节点,并将样本集合划分成多个子集。对于每个子集,如果样本都属于同 一类别,则将其标记为叶子节点,否则将其作为非叶子节点继续划分。针对当前根节点“有自己的房子”,将数据集按照该属性的取值进行划分,得到两个子集:子集D1:包含有自己的房子的样本,共有8个,其中好信用的样本有3个,坏信用的 样本有5个。子集D2:包含没有自己的房子的样本,共有7个,其中好信用的样本有6个,坏信用 的样本有1个。对于子集D1

7、,由于坏信用的样本数量多于好信用的样本数量,因此将其标记为叶子节 点,并将其类别设定为“否”。针对子集D2,选择具有最大信息增益比的属性作为其子节点。计算每个属性的信息增 益和属性燧,得到如下表格:属性信息增益属性嫡信息增益比年龄0.2510.9850.255有工作0.9180.5911.552信贷情况0.4740.9180.516因此,选择“有工作”作为内部节点进行划分。将子集D2按照“有工作”属性的取值划分成两个子集:子集D21:包含有工作的样本,共有5个,其中好信用的样本有3个,坏信用的样本有 2个。子集D22:包含没有工作的样本,共有2个,其中好信用的样本有3个,坏信用的样本 有。个。

8、对于子集D21,由于坏信用的样本数量少于好信用的样本数量,因此将其标记为叶子节 点,并将其类别设定为“是对于子集D22,由于只有两个样本,无法再进行划分,因此我 们将其标记为叶子节点,并将其类别设定为“是”。重复步骤2,直到所有样本属于同一类别或无法再进行划分。最终得到的决策树如下:有自己的房子是 有工作是 否5-5比较分析决策树预剪枝策略和后剪枝策略的优缺点。预剪枝策略的优点:减少决策树的大小,提高可解释性;避免决策树过度拟合,提高泛 化能力;计算高效,速度快。缺点:可能会出现欠拟合,导致模型复杂度不足;预测性能可 能会降低,因为可能会出现高偏差情况。后剪枝策略的优点:提高了泛化能力,可以更

9、好地处理噪声和异常值;避免了欠拟合, 保留更多有用的变量和关系;可以通过验证集来评估决策树的泛化性能。缺点:执行速度较 慢,需要消耗大量计算资源和时间;可能会出现过拟合,如果过度剪枝则会降低泛化能力。总体而言,预剪枝适用于训练数据量较大的情况下,可以快速构建好的简单模型。但是, 当样本容量不足或者数据规模较小时,预剪枝会导致信息损失,从而影响模型的泛化能力。 后剪枝可以更加有效地提高模型的泛化能力,但需要在训练数据和验证数据之间进行权衡, 同时也需要消耗较多计算资源和时间。因此,在实际应用中需要根据具体情况选择相应的策 略。5-6试编程实现ID3算法并将其应用于表5-2中数据的分类。参阅代码实

10、现:skleam.tree import DecisionTreeClassifier首先导入相关库import pandas as pdfrom skleam.tree import DecisionTreeClassifierfrom sklearn.model_selection import train_test_split构建数据集data = 客户 ID: 1, 2, 3,4, 5, 6,7, 8, 9, 10,11,12,13,14, 15,龄,:青年青年青年青年青年中年中年中年中年中年老年 老年7老年/老年丁老年工有工作,:厂否丁否丁是丁是丁否丁否丁否丁是丁是丁是丁是丁是否丁否

11、丁否口,有自己的房子,:,否否/否7是丁否丁否:否丁是了非常好/非常好,非常好;好,好,啡常好,否信贷情况:一般,好好7一般一般一般丁好丁好非常好啡常好非常好 好,好,啡常好,一般工类另:否/否是/是否/否否丁是是/是丁是7是/是/是/否)df = pd.DataFrame(data)将特征和标签分开X = ddrop(客户 IDJ类别似 axis=l)y = df?类别口将特征进行独热编码X = pd.get_dummies(X)将数据集分为训练集和测试集X_train, X_test5 y_train, y_test = train_test_split(X, y, test_size=0

12、.2)构建决策树模型(使用ID3算法)elf = DecisionTreeClassifier(criterion-entropy*)训练模型,并对对测试集进行预测并输出结果clf.fit(X_train, y train)y_pred = clf.predict(X_test)print(y pred)5-7分析k最近邻方法的时间复杂度,并说明造成其时间复杂度高的原因。K最近邻算法的时间复杂度主要受两个因素影响:样本数和特征数。样本数:K最近邻算法需要计算测试样本点与所有训练样本点之间的距离,并选取k个 距离最近的样本点作为预测结果的依据。因此,随着样本数的增加,算法的计算时间也会线 性增加

13、。假设有m个训练样本,n个测试样本,d个特征,计算两个样本之间的距离的时间 复杂度为0(d),则整个算法的时间复杂度为0(mnd)。特征数:在计算两个样本之间的距离时,需要对每个特征进行比较和计算。因此,特征 数的增加会导致计算时间的增加。此外,在高维空间中,由于所谓的“维度灾难”问题,即随 着维度的增加,数据点之间的距离越来越稀疏,导致K最近邻算法的准确性下降。因此,一 般建议使用K最近邻算法时,应该选择少量的特征或者对特征进行降维处理,以提高算法 的效率和准确性。综上所述,K最近邻算法的时间复杂度较高,因为它需要计算测试样本与所有训练样本 之间的距离,并且受样本数和特征数的影响。对于大规模

14、数据集和高维特征数据,K最近邻 算法的计算时间会非常长,因此通常建议在使用该算法时要注意样本数和特征数的数量,并 对数据进行适当的处理以提高算法效率。5-8在524节中采用多种不同的距离度量准则,观察预测结果。导入相关库from skleam.neighbors import KNeighborsClassifierimport numpy as npimport pandas as pd构建数据集datasets = 0, 0, 0, 0, no,0, 0,0, 1 Jno, 0, 1, 0, 1 Jyes,0, 1, 1, 0, yes, 0, 0, 0, OJno, 1, 0, 0, 0

15、, ho11, 0, 0J/noll, 1, l,l/yesll, 0,1, 2Jyes 1, 0, l,2Jyes 2, 0, 1,2,yes, 2, 0, 1,yes, 2 J 0 J ,yes 2 J 0d 2, 0, 0, OJno,dataMat = np.mat(datasets)labelsMat = dataMat:, 4arrMat = dataMat:, 0:4attr_names =年龄有工作了有自己的房子信贷情况attr_pd = pd.DataFrame(data=arrMat, columns=attr_names)使用不同的距离度量进行分类knn manhatta

16、n = KNeighborsClassifier(n_neighbors=3, metric=manhattarf) knn_euclidean = KNeighborsClassifier(n_neighbors=3, metric=feuclidean,) knn_chebyshev = KNeighborsClassifier(n_neighbors=3, metric=,chebyshev!)knn_manhattan.fit(attr_pd? labelsMat)knn_euclidean.fit(attr_pd, labelsMat)knn_chebyshev.fit(attr_p

17、d, labelsMat)result_manhattan = knn_manhattan.predict(2,1,1,1)resulteuclidean = knn_euclidean.predict(2,1,1,1)result_chebyshev = knn_chebyshev.predict(2,1,1,1)print(!Manhattan distance result:1, result_manhattan)print(Euclidean distance result:1, result_euclidean)print(Chebyshev distance result:1, r

18、esult chebyshev)5-9简述朴素贝叶斯分类器的基本思想及利用条件独立性假设的原因。朴素贝叶斯分类器是一种基于贝叶斯定理和特征条件独立性假设的分类方法。其基本思 想是利用已知类别的样本来学习每个类别的先验概率以及每个特征在不同类别下的条件概 率,并通过这些概率来对新的未知样本进行分类。具体地说,朴素贝叶斯分类器假设每个特 征之间相互独立,即一个特征的取值不会影响其他特征的取值。这个假设使得分类器可以通 过计算每个特征在给定类别下的条件概率,将多个特征的概率相乘得到属于某一类别的后验 概率,并选择具有最大后验概率的类别作为预测结果。朴素贝叶斯分类器利用条件独立性假设的原因在于,它可以

19、极大地简化模型的计算量和 复杂度,使得分类器可以高效地处理大规模数据。虽然条件独立性假设并不总是成立,但是 在实际应用中,朴素贝叶斯分类器通常表现出良好的分类效果。止匕外,朴素贝叶斯分类器还 具有易于实现、不需要过多参数调整等优点,因此被广泛应用于文本分类、垃圾邮件过滤、 情感分析等领域。5-10试编程实现朴素贝叶斯分类器并将其应用于表5-4中数据的分类。参阅代码实现:skleam.naive bayes import CategoricalNB首先导入相关库from sklearn.naive_bayes import CategoricalNBimport numpy as np构建数据集

20、data = np.array(09l/TlL 0, 1/S; 1, 0, 1, S, 1, 0, 0, T, 0,0 J, T, 0, 0, 0, T, 0, 0, 0, D, 0,l, 0, T, 1, 1, 0, T, 1,1, 0, D, 1, 1, 0, D, 1, 1, 1, T, 1,分割特征和标签X = data:? :-ly = data:, -1 将字符型特征转换为数字型特征char_features = np.unique(X:,2)for i in range(char_features.shape0):X:,2X:,2 = char_featuresi = iX =

21、X.astype(int)y = y.astype(int)建立模型elf = CategoricalNB()clf.fit(X, y)预测新数据new data = np.array(0, 0, D)fbr i in range(char_features. shape0):newdata : ?2 new_data: ,2 = char_featuresi = i newdata = new_data.astype(int) pred = clf.predict(newdata) print(该新数据的预测标签为:”, pred)6-1简述集成学习的基本思想。集成学习体现了“三个臭皮匠顶个

22、诸葛亮”“人多力量大”等人类的经验和智慧。集成学习 的基本思想:首先,学习一组弱学习器;然后,根据某种策略结合这些弱学习器,从而获得 比单个弱学习器更好的学习效果,在构建集成学习模型时、我们期望该学习模型具有“好而 不同的特点,即每个弱学习器的预测能力足够好,同时弱学习器之间彼此不同。如果集成 学习模型中的弱学习器相同,那么该模型的预测结果将与单个弱学习器的预测结果相同,显 然这不能提高集成学习模型的预测能力。因此,弱学习器的准确性和多样性是集成学习的两 大关键核心内容,两者决定着集成学习模型的泛化能力。6-2影响集成学习模型性能的主要因素有哪些?影响集成学习模型性能的主要因素包括以下几个方面

23、:基分类器的质量:集成学习的性能受到基分类器的影响,因此基分类器的质量越高,集 成学习的性能越好。基分类器之间的多样性:集成学习的原理是将多个不同的分类器组合起来,如果这些分 类器之间的差异性比较大,那么集成学习的效果会更好。集成方法的选择:不同的集成方法适用于不同的场景和问题,选择合适的集成方法可以 提高集成学习的性能。训练数据的质量和数量:训练数据的质量和数量对于集成学习的性能也有很大的影响, 充足的高质量数据可以提高集成学习的性能。特征的选择和处理:特征对于机器学习任务来说非常重要,选择合适的特征以及对特征 进行合理的处理可以提高集成学习的性能。6-3比较分析AdaBoost算法和Bag

24、ging算法。Bagging算法与AdaBoost算法的区别主要体现在以下几方面。第一,用于训练弱学习 器的训练样本的产生方式不同:Bagging算法随机从原始训练集中通过有放回地随机抽取一 定数量的样本构成训练集;而AdaBoost算法则基于当前弱学习器的错误率来更新训练样本 的权重,并将加权后的数据用于下一轮弱学习器的训练,也就是说弱学习器的训练集不是相 互独立的。第二,弱学习器的生成方式不同:Bagging算法可以并行生成多个弱学习器,而 AdaBoost算法则需要按顺序依次生成弱学习器。6-4随机森林与基于决策树的模型相比有何不同?随机森林与基于决策树的模型相比有以下不同点:随机性:随

25、机森林引入了随机性,它采用随机抽样和随机特征选择的方式来构建多棵决 策树,并将它们的结果综合起来作为最终预测结果。而基于决策树的模型通常只使用一棵决 策树进行预测。鲁棒性:由于随机森林采用了多棵决策树并将其结果综合处理,因此它的鲁棒性更强。 即使某些决策树出现过拟合或者其他问题,随机森林仍然可以正常运行并得到较好的结果。多样性:随机森林通过随机抽样和随机特征选择的方式构建多棵决策树,每棵树都是在 不同的子集上训练得到的,因此它们之间具有较大的差异性,从而避免了过拟合问题。预测能力:由于随机森林采用了多棵决策树并将它们的结果综合起来作为最终预测结果, 因此它的预测能力通常比单棵决策树更强。总的来

26、说,随机森林相对于基于决策树的模型而言,在模型鲁棒性、多样性和预测能力方面 都有一定优势。6-5 Stacking方法与基于简单统计的结合策略相比有何不同?Stacking方法是一种集成学习的方法,它将多个基础模型的预测结果作为新的特征,再 使用一个元模型来融合这些特征并得到最终预测结果。而基于简单统计的结合策略则是直接 对多个基础模型的预测结果进行加权平均、投票等操作来得到最终预测结果。下面是 Stacking方法与基于简单统计的结合策略区别的几点:特征融合方式不同:Stacking方法通过将多个基础模型的预测结果作为新的特征进行融 合;而基于简单统计的结合策略则是直接对多个基础模型的预测结

27、果进行融合。模型训练方式不同:Stacking方法需要使用训练数据来训练基础模型和元模型,并且需 要使用交叉验证等技术来防止过拟合;而基于简单统计的结合策略则不需要额外的训练过 程。效果稳定性不同:由于Stacking方法考虑了多个基础模型之间的关系,在某些情况下可 以达到更好的效果,但同时也更加复杂,可能出现过拟合等问题;而基于简单统计的结合策 略相对来说更加简单,但在某些情况下可能效果不如Stacking方法。总的来说,Stacking方法需要更多的模型训练和融合过程,但可以通过考虑多个基础模 型之间的关系来提高预测性能。而基于简单统计的结合策略则更加简单易用,但通常只适合 对少量基础模型

28、进行组合。6-6根据表64,以决策桩为基学习器构建一个AdaBoost模型。首先导入相关库from sklearn.tree import DecisionTreeClassifierfrom sklearn.ensemble import AdaBoostClassifier构建训练集与测试集X_train = 0LlL2, 3, 4, 5, 6y_train = -l,-l, 1,-1, 1,-1,-1X_test=l,49 5构建决策桩stump = DecisionTreeClassifier(max_depth= 1)构建AdaBoost模型adaboost = AdaBoostCl

29、assifier(base_estimator=stump, n_estimators=3, algorithmSAMME)训练模型一一adaboost.fit(X_train, y train)预测结果一 一y_pred = adaboost.predict(Xtest)print(y_pred)6-7试编程实现基于k最近邻的AdaBoost算法。导入相关库from sklearn.neighbors import KNeighborsClassifierfrom sklearn.ensemble import AdaBoostClassifier构建训练集与测试集X.train = 2,

30、3, 5, 4, 9, 6, 4, 7, 8, 1, 7, 2y_train = -l,-l, 1,-1, 1, 1X_test = 3, 5, 6, 3, 9, 2构建KNN分类器knn = KNeighborsClassifier(n_neighbors=3)构建AdaBoost模型adaboost = AdaBoostClassifier(base_estimator=knn, n_estimators=3)训练模型一一adaboost.fit(X train, y train)预测结果y_pred = adaboost.predict(X_test) print(y_pred)6-8试

31、编程实现随机森林算法。参阅代码实现:sklearn.ensemble import RandomForestClassifier导入相关库from skleam.ensemble import RandomForestClassifier 构建训练集与测试集X.train = 2, 3, 5, 4, 9, 6, 4, 7, 8, 1, 7, 2y_train = -1,-1, 1,-1, 1, 1X_test = 3, 5, 6, 3, 9, 2构建随机森林模型rf = RandomForestClassifier(n_estimators=35 max_depth=2)训练模型一一rf.fi

32、t(X_train, y train)预测结果一 一y_pred = rf.predict(Xtest)print(y_pred)6-9试编程实现基于Stacking方法的集成学习模型。参见教材第6.4小节。6-10在集成学习模型中,弱学习器的多样性极大地影响着模型的性能,除了随机采样,还 可以采取哪些方法来提高弱学习器的多样性?除了随机采样外,以下是一些常见的提高弱学习器多样性的方法:不同的算法:使用不 同类型的算法作为弱学习器,比如决策树、支持向量机和神经网络等。不同的参数设置:对 于同一个算法,在不同的参数设置下训练出的模型可能会有很大差异,可以通过调整参数来 增加弱学习器的多样性。数据预处理:使用不同的数据预处理技术,比如标准化、归一化和 特征选择等,可以产生不同的特征集合从而增加弱学习器的多样性。特征子采样:在每次训 练弱学习器时,只选取部分特征来训练,可以增加弱学习器之间的差异性。集成多个集成器: 将多个集成器进行组合,可以产生更高层次的多样性,比如Bagging和Boosting结合起来使 用。人工引入噪声:通过人工修改数据或者引入随机噪声,可以增加弱学习器的多样性。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁