首页 > 编程知识 正文

人工智能领域,人工智能模型与算法答案

时间:2023-05-05 19:33:42 阅读:51338 作者:4452

一、实验目的

1、巩固4种基本分类算法的算法思想:朴素贝叶斯算法、决策树算法、人工神经网络、支持向量机算法;

2 .可以利用现有的分类器算法代码进行分类操作;

3、学习如何调整算法参数以提高分类性能;

二、实验硬件软件平台

硬件:计算机

软件:操作系统: WINDOWS

已APP的应用程序: c、Java或Matlab、Weka

三.实验内容

利用现有的分类器算法对文本数据集进行分类

实验步骤:

1 .了解文本数据集情况,阅读算法代码说明文档

2 .利用文本数据集内的训练数据对算法进行参数学习

3 .利用学习到的分类器测试测试数据集

4 .统计测试结果

下载和安装软件; 下载实验资料

软件使用weka3.8下载链接。 https://可以直接使用SourceForge.net/projects/WEKA /。

实验资源下载: https://pan.Baidu.com/s/1 pqxbdf 4p JC v1 f 63 pxyjiow密码: r54q

包括实验算法的原理说明和arff格式的数据集。

实验过程的操作和现象

1、数据集获取和格式转换

1.1将txt文本转换为CSV

在Excel的XLS文件中,可以在不同的工作表中放置多个二维表。 只能将每个工作表保存为不同的CSV文件。 打开XLS文件,切换到需要转换的工作表,保存为CSV类型,单击“确定”,然后单击“是”忽略提示,操作完成。

本次实验提供的数据集数据集由逗号分隔,可以使用Excel的“导入数据”功能保存为CSV。

1.2CSV到arff的转换

将CSV转换为ARFF的最快速方法是使用WEKA本身。

只需在资源管理器界面中选择open file,打开CSV文件,选择save,保存格式,选择arff,然后单击open file打开arff文件。

WEKA存储数据的格式是属性关系文件格式(ARFF )文件,这是ASCII文本文件。 包含关系声明和属性声明。

2、使用Weka

图进入软件界面,点击浏览器,我们的实验功能都在其中。

单击open file,在第一步中选择并导入转换的. arff格式的数据集,然后在界面中显示数据后,单击右侧的" Classify "测试分类算法。

单击choose按钮,选择要测试的算法,在test_options中选择算法参数,在下拉列表中选择分类的重要依据参数,然后单击start完成分类测试

3、各算法测试

3.1 )分类重要依据的选择

导入dataset后,可以单击weka界面顶部、右侧的visualize访问数据可视化界面。 在这种情况下,可以创建如上图所示的数据分布情况图(plotsize=100,向右拉动pointsize和jitter ),然后单击Update。

【请注意,实验有三个数据集。 建议使用dataset (总数据集)、test (测试)和predict (预测)测试集】

这个地方为了观察数据的整体分布情况,使用最完整的dataset。

从照片上可以看出,除了第一行的class values以外,各色圈之间的位置分布存在较大的差异,而其他属性在各色圈的分布位置上没有较大的差异,因此采用class values作为分类依据比使用其他属性更有效。

3.2 )分类及测试方法

使用test作为数据集,总共使用1349组数据predict作为测试集,共计377组数据。

算法的选择、具体参数设定请参阅图。

3.3 :朴素贝叶斯

培训过程【单击Use traning set并注意导入的数据是test而不是dataset】

如果使用dataset作为训练集,则测试集predict也包含在名为dataset的总数据集中,因此测试的结果正确率较高,但由于是自己测试自己,所以没有意义。 (之后的算法也一样)

correctlyclassifiedinstances 119188.2876 %

incorrectlyclassifiedinstances 15811.7124 %

kappa静态0.6888

Mean absolute error 0.0993

根均方错误0.2053

Relative absolute error 48.4529 %

根Rela

tive squared error 64.2275 %

Total Number of Instances 1349

训练集分类正确率为88.2876%。

测试过程:【测试集选定的时候,需要点击左边的Supplied test set右边的set按钮,选定predict为测试集,之后的算法相同】

Correctly Classified Instances 259 68.7003 %

Incorrectly Classified Instances 118 31.2997 %

Kappa statistic 0.4326

Mean absolute error 0.1631

Root mean squared error 0.3224

Relative absolute error 62.0086 %

Root relative squared error 80.52%

Total Number of Instances 377

经过测试,得出朴素贝叶斯的正确率为68.7003%。

3.4:决策树

训练过程:

Correctly Classified Instances 1304 96.6642 %

Incorrectly Classified Instances 45 3.3358 %

Kappa statistic 0.9189

Mean absolute error 0.026

Root mean squared error 0.1139

Relative absolute error 12.673 %

Root relative squared error 35.643 %

Total Number of Instances 1349

决策树分类正确率为96.6642%。

测试过程:

Correctly Classified Instances 256 67.9045 %

Incorrectly Classified Instances 121 32.0955 %

Kappa statistic 0.4171

Mean absolute error 0.1579

Root mean squared error 0.3684

Relative absolute error 60.0144%

Root relative squared error 91.997%

Total Number of Instances 377

使用测试集,得出决策树的分类结果正确率为67.9045%。

3.5:人工神经网络

训练过程:

Correctly Classified Instances 1349 100%

Incorrectly Classified Instances 0 0%

Kappa statistic 1

Mean absolute error 0.0018

Root mean squared error 0.0059

Relative absolute error 0.8944 %

Root relative squared error 1.8382 %

Total Number of Instances 1349

使用人工神经网络算法,训练集上的分类正确率可以达到100%。

测试过程:

Correctly Classified Instances 295 78.2493 %

Incorrectly Classified Instances 82 21.7507 %

Kappa statistic 0.6226

Mean absolute error 0.1089

Root mean squared error 0.321

Relative absolute error 41.3865 %

Root relative squared error 80.1692 %

Total Number of Instances 377

使用人工神经网络,测试正确率达到了78.2493%。

3.6:支持向量机

训练过程:

Correctly Classified Instances 1282 95.0334 %

Incorrectly Classified Instances 67 4.9666 %

Kappa statistic 0.8795

Mean absolute error 0.2543

Root mean squared error 0.3185

Relative absolute error 124.1183 %

Root relative squared error 99.6308 %

Total Number of Instances 1349

支持向量机的分类正确率为95.1389%。

测试过程:

Correctly Classified Instances 280 74.2706 %

Incorrectly Classified Instances 97 25.7294 %

Kappa statistic 0.5559

Mean absolute error 0.2851

Root mean squared error 0.3618

Relative absolute error 108.4062 %

Root relative squared error 90.348 %

Total Number of Instances 377

支持向量机算法的测试正确率为74.2706%。

4、各算法原理(详细内容见上文链接中文档)

这里就简单写一点介绍吧。。

朴素贝叶斯

朴素贝叶斯分类是一种十分简单的分类算法,叫它朴素贝叶斯分类是因为这种方法的思想真的很朴素,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。我们会选择条件概率最大的类别,这就是朴素贝叶斯的思想基础。

整个朴素贝叶斯分类分为三个阶段:

第一阶段——准备工作阶段,这个阶段的任务是为朴素贝叶斯分类做必要的准备,主要工作是根据具体情况确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本集合。这一阶段的输入是所有待分类数据,输出是特征属性和训练样本。这一阶段是整个朴素贝叶斯分类中唯一需要人工完成的阶段,其质量对整个过程将有重要影响,分类器的质量很大程度上由特征属性、特征属性划分及训练样本质量决定。

第二阶段——分类器训练阶段,这个阶段的任务就是生成分类器,主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录。其输入是特征属性和训练样本,输出是分类器。这一阶段是机械性阶段,根据前面讨论的公式可以由程序自动计算完成。

第三阶段——应用阶段。这个阶段的任务是使用分类器对待分类项进行分类,其输入是分类器和待分类项,输出是待分类项与类别的映射关系。这一阶段也是机械性阶段,由程序完成。

决策树

决策树(decision tree)是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别。使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

不同于贝叶斯算法,决策树的构造过程不依赖领域知识,它使用属性选择度量来选择将元组最好地划分成不同的类的属性。所谓决策树的构造就是进行属性选择度量确定各个特征属性之间的拓扑结构。

ID3算法被用于选择属性度量。

人工神经网络

利用输出后的误差来估计输出层前一层的误差,再用这层误差来估计更前一层误差,如此获取所有各层误差估计。这里的误差估计可以理解为某种偏导数,我们就是根据这种偏导数来调整各层的连接权值,再用调整后的连接权值重新计算输出误差。直到输出的误差达到符合的要求或者迭代次数溢出设定值。

说来说去,“误差”这个词说的很多嘛,说明这个算法是不是跟误差有很大的关系?

没错,BP的传播对象就是“误差”,传播目的就是得到所有层的估计误差。

它的学习规则是:使用最速下降法,通过反向传播(就是一层一层往前传)不断调整网络的权值和阈值,最后使全局误差系数最小。

它的学习本质就是:对各连接权值的动态调整。

支持向量机

支持向量机(Support Vector Machine ,SVM)的主要思想是:建立一个最优决策超平面,使得该平面两侧距离该平面最近的两类样本之间的距离最大化,从而对分类问题提供良好的泛化能力。对于一个多维的样本集,系统随机产生一个超平面并不断移动,对样本进行分类,直到训练样本中属于不同类别的样本点正好位于该超平面的两侧,满足该条件的超平面可能有很多个,SVM正式在保证分类精度的同时,寻找到这样一个超平面,使得超平面两侧的空白区域最大化,从而实现对线性可分样本的最优分类。

5、思考题:如何在参数学习或者其他方面提高算法的分类性能?

以人工神经网络算法为例,调整学习相关参数,可以观察到如下结果。

以上是设置学习时间为300的情况,可以看到均方根误差为0.0096,训练时间2.41秒。

均方根误差是观测值与真值偏差的平方与观测次数n比值的平方根,在实际测量中,观测次数n总是有限的,真值只能用最可信赖(最佳)值来代替。对一组测量中的特大或特小误差反映非常敏感,所以,标准误差能够很好地反映出测量的精密度。因此这里我们使用均方差观察学习的准确性。

以上是设置学习时间为1300的情况,可以看到均方根误差为0.0044,训练时间10.32秒。

通过上述对比可以发现,训练时间越长,训练结果越准确,误差越低。这是因为随着训练时间的加长,迭代次数会越来越多,因此更容易接近实际准确情况。

下面,我们研究比对学习率对于均方根误差的影响:

以上是设置学习率为0.3的情况,训练时间设置为500,可以看到均方根误差为0.0073,实际训练时间为3.99秒。

此时我们将学习率设置为0.6,发现均方根误差降低到了0.0051,同时实际训练时间略有提升,达到了4.26秒,但是,此时我们人为所设定的学习时间并没有变化,此时我认为这里的时间提升,大致可以归因为一个可以被允许的误差。

而一味提升学习率就一定能够提升算法准确率吗?答案是否定的。因为学习率,又被成为“步长”。“步长”越大,每一次修改分类算法的关键参数的时候,这些参数的摆动幅度也就越大,因此,误差有可能随着学习率的提升而提升,而更为糟糕的是,学习率(步长)若过大,会使得算法在最优解附近不断来回摆动,因为步长太大的原因,算法参数无法收敛到全局最优,能否实际提升学习率是不确定的,全靠运气。

综上所述,我认为提高算法性能主要有两个方面:如果只需要提高运行速度,可以降低迭代次数,但这样会导致模型的误差增大;如果需要提高模型的精确度,就需要适当更改学习率,且一定要增加迭代次数,但是如果是通过增加迭代次数的方法提升精确度,那么相应的算法时间开销就会不可避免地增大。因此,从参数的角度来考虑分类器的学习建模,我们需要权衡精确度和效率之间的关系。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。