论坛的各位网友,首先预祝大家马年春节快乐,学业事业进步!  我们开发这套数据挖掘系统的初衷就是降低大家进行数据挖掘的知识,技术和软硬件门槛. 通过使用我们的系统, 您仅需要准备好数据,就能够便捷地构建人工神经网络, 决策树等模型并得到完整的数据分析报告. 而今天,我们将用一个实例来介绍如何利用人工神经网络进行三分类模式识别.
首先简单介绍下我们的系统.  我们的系统的后台计算系统是用R语言编写的, 而服务器采用了Amazon EC2弹性云计算服务器(我们采用的是美国的服务,而据说Amazon 云计算服务已经落户宁夏). 您登陆我们的网站www.foam-buffalo.com后,将会进入首页:
 
在这里,您可以看到系统有三个子系统: 1) 人工神经网络 2) Boosting (基于决策树) 3) 样本数据下载.
请首先点击 "样本数据下载", 在这里你可以下载我们今天要使用的样本数据, 即R中著名的鸢尾花卉数据集(iris data set), 鸢尾花卉数据集的主要任务是通过观测花萼(sepal)和花瓣(pedal)的长度(length)和宽度(width) 来判断花所属的亚属(山鸢尾(setosa) vs.变色鸢尾(versicolor) vs.维吉尼亚鸢尾(virginica)),是典型的模式识别任务.
进入下载界面后,请分别下载 "鸢尾花学习集" 和"鸢尾花新数据集". 第一个数据包含花萼和花瓣的长度和宽度四个自变量的信息以及花所属的亚属(山鸢尾 vs.变色鸢尾vs.维吉尼亚鸢尾)的信息, 用于训练系统. 而第二个数据集仅包括自变量信息,它来模拟您未来要预测的实际数据
 
下载下来的两个文件应该分别为.csv 文件.
准备好数据后, 我们在网页首页点击"人工神经网络' 进入分析系统, 首先选择我们要执行的分析任务:模式识别
 
然后您可以调整模型的各参数:
1)自变量预处理:您可以选择对自变量提取主成分和进行比例转换 (关于主成分和比例转换的相关知识请参见我们以前的帖子)
 
2)学习集拆分:我们将学习集拆分为训练集与测试集,训练集用于训练模型而测试集则用于评估模型。 您需要选择进入学习集进入训练集的样本数占总学习集样本数的比例
 
3) 网络结构:我们系统允许您构建单隐层人工神经网络模型,你需要选择隐层的单元(神经元)个数以及是否允许输入层跳过隐层直接连接输出层. 在模式识别条件下,输出层为进入各模式(在本例中我们有三个模式:山鸢尾 vs.变色鸢尾vs.维吉尼亚鸢尾)的概率
 
 4)网络可视化参数:您可以调节神经网络的参数.
 
5) * 调整网络最优化参数:在这里您可以调整为获取网络系数而采用的优化算法的各系数
 
6)Boosting参数:我们同样利用人工神经网络作为基础分类器然后采用Boosting机制,希望这样能够让模型更稳定(所谓稳定即当训练集的样本发生微小变化时,训练出来的模型和模型的预测结果不会发生剧烈波动),精度更高
 
7)上传数据:在调整完上列的数据后,您可以将刚刚下载的数据上传到系统
 
然后您可以在右侧查询相关结果:
1)学习集:在这里您能看到你上传得完整的数据集
2)训练集与测试集:在这里您能看到由学习集拆分出来的训练集和测试集
3)系统训练结果:您将可以监测利用训练集训练系统与利用测试集评估系统各项指标的结果
(3.1) 人工神经网络:
最左边一层是输入层(input layer), 这一层的每一个单元(unit) 代表一个自变量(predictor 或 attribute), 中间一层是隐层(hidden layer), 这一层的每一个单元都是输入层所有单元和偏差项(图中B1, 其与B2的实际取值都为1)的函数;而最右边一层是输出层, 每一个单元代表都是进入各属性的概率. 而图中黑线代表左边一层单元与其相连的右侧单元的关系为正(反之红线则为负) 而线的粗细代表了连接关系的强弱程度(越粗越强). 
 
(3.2)依次往下看则是"变量相对重要性指标", 通过这项指标,我们能够评估各变量在构建模型中的重要性. 在本例中,我们可以看到花瓣的长度在区分花的亚属种类中比较重要. 不过值得注意的是,神经网络模型是较不稳定的模型,即少量数据的改变将可能带来模型较大的变化. 因此,在使用和解释相关结果时要小心 (而Boosting在某种程度上能够让模型更精确和稳定, 这也是为什么我们引入了Boosting的原因)
 
 
(3.3) 同时, 您将能监测混淆矩阵和预测误差. 它们的主要目的是为了估计模型的预测能力. 首先是基于训练集的混淆矩阵和集内预测误差,也就是当我们用训练集构建人工网络后,再将这一模型应用到训练集所得到的结果. 这一结果的实际意义往往不大,主要原因是因为我们在训练模型和评估模型时候重复使用了同一数据集,因此结果往往过于乐观. 而当我们把模型应用到测试集上面的时候,所得到的结果比较接近未来 “实战”结果, 更具参考价值. 比如在本例中,训练集误差为0, 而测试集误差为18%.所以训练好的模型的准确度比较接近18%. 值得注意的是,神经网咯稳定性较差,所以请参阅'boosting相关'内容。
 
(4) Boosting 相关结果::Boosting本身并不是如同人工神经网络那样的分类器,它本质上是一种帮助分类器对数据进行深度挖掘的机制. 所以,构建Boosting分析系统的第一步就是选择基础分类器,其分析结果与原始分类器相比其精度更高,稳定性更强. 一般来说,候选分类器需要具备低稳定性的特征,即当数据发生微小变化时,分类器得到的结果会产生较大的变化. 目前我们选择了人工神经网络作为基础分类器. 而与此相反,同样非常流行的分类器KNN (K nearest neigbours),因为其稳定性较高,并不太适合作为Boosting的基础分类器. 而在我们推出的另一个"Boosting挖掘系统" 中, 我们采取了决策树作为基础分类器. 关于Boosting的历史,理论基础,有兴趣的朋友可以请参阅 cseweb.ucsd.edu/~yfreund/papers/IntroToBoosting.pdf
(4.1) 首先我们还是关注变量相对重要性指标:
 
(4.2) 而对于预测误差, 在Boosting情况下, 训练集的误差绝大多数情况下会随着Boosting轮数迅速地降到0,而测试集误差则有可能随着Boosting的轮数先下降后有所上升. 不过值得注意的是, Boosting的一大重要特征就是其不易'过度拟合' (overfitting) .
 
(4.3) 在本例中, 训练集误差依然为0和而测试集误差都降到了15%
 
(4.4) 对于训练集中的每一个样本,我们都可以计算其边际(margin). 边际是Boosting分析中一个十分总要的概念,它主要用户测量预测的信心. 当边际接近+1时候, 我们对于该样本的判断是正确的,且数据的变动引起的模型变化时候,我们再次预测正确该样本的几率很大. 反之,当边际接近-1时, 我们对于该样本的判断是错误的, 同样模型的变化对于该样本的预测影响较少. 如果边际接近0, 则我们对于该样本做出的任何预测都不具备信心. 我们提供最后一轮Boosting的预测的样本边际的累积分不函数(cumulative distribution function, cdf)
 5) 新数据集的预测:系统对于上传的新数据集的类属进行了预测并将其展示在第一列. 而我们分别利用训练集得到的单一模型和Boosting得到的复合模型(ensemble)对新数据进行了预测,一般来说, 人工神经网络的预测精度已经非常高,而Boosting不仅精度高而且稳定性更强
5) 新数据集的预测:系统对于上传的新数据集的类属进行了预测并将其展示在第一列. 而我们分别利用训练集得到的单一模型和Boosting得到的复合模型(ensemble)对新数据进行了预测,一般来说, 人工神经网络的预测精度已经非常高,而Boosting不仅精度高而且稳定性更强
