数据科学 R语言实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-11 02:37:21

点击下载

作者:美 Dan Toomey 丹 图米

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

数据科学 R语言实战

数据科学 R语言实战试读:

前言

R是为数据操作及统计计算提供语言及环境的软件包,同样也能够用图表表示产生的统计数据。

R具有以下特性:● 语法简洁,可对数据执行操作;● 附带的工具可通过本地和互联网以多种格式加载和存储数据;● 语言一致,可对内存中的数据集进行操作;● 具有用于数据分析的内置和开源工具;● 采用生成实时图形和将图示存储到磁盘的方法。本书内容

第1章:模式的数据挖掘,包括R中的数据挖掘。在此示例中,我们会寻找数据集中的模式。本章探讨通过使用多种工具进行聚类分析的示例,同样也包括了异常检测和关联规则的使用。

第2章:序列的数据挖掘,探讨了R中可以让读者发现数据中序列的方法。多种可用的R功能包能够帮助读者确定序列并通过图形描绘做进一步分析。

第3章:文本挖掘,介绍了多种挖掘R中文本的方法。我们会着眼于能够帮读者处理并分析源中文本或文字的工具,同样也会研究XML处理能力。

第4章:数据分析——回归分析,探讨了对数据进行回归分析的不同方法。本章运用多种方法来运行简易回归和多元回归以及后续的显示。

第5章:数据分析——相关性,探讨了多种相关功能包。本章不仅运用皮尔森、多分格、四分、异构及部分相关性,还运用基本的相关性及协方差对数据进行分析。

第6章:数据分析——聚类,探讨了各种聚类分析的参考文献。本章包括K-means、PAM和若干其他聚类技术。R程序员可利用所有技术。

第7章:数据可视化——R图形,探讨了各种使数据可视化的方法。我们会着眼于数据的全部范围,包括典型的类显示、第三方工具的相互作用和地图的使用。

第8章:数据可视化——绘图,探讨了绘制R中数据的不同方法。本章不仅提供了可用于绘制数据的自定义显示的示例,还提供了带有标准化显示的简易绘图的示例。

第9章:数据可视化——三维,作为直接从R创建数据三维显示的指南,我们同样也会考虑使用更大数据集的三维显示。

第10章:机器学习实战,探讨了如何使用R进行机器学习。本章包括把数据集分成训练数据及测试数据,从训练数据中构建模型并对模型进行试验,与试验数据进行比较。

第11章:用机器学习预测事件,使用了时间序列数据集。本章包括将数据转化成R时间序列,然后将季节性、趋势及不规则分量分离出来。其目标在于模拟或预测未来事件。

第12章:监督学习和无监督学习,阐释了如何使用监督和无监督学习来构建模型。本章包括多种有关监督和无监督学习的方法。必备工具

关于本书,读者需要将R安装在机器(或将要运行脚本的机器)上。许多平台都可使用R。本书并非局限于R的现有特定版本。

为了更好地使用本书,读者需要开发R项目的交互工具。主要工具是R Studio,是许多平台均可使用的完全交互式且自包含程序,可以让读者输入脚本、显示数据并显示图形结果。各种R的安装总会有R命令行工具。目标读者

本书的目标读者是牢固掌握先进数据分析技术的数据分析师。同样也要求基本了解R语言及某些数据科学话题。本书假设读者可以使用R环境,并且对涉及的统计有所了解。读者反馈

欢迎来自读者的反馈,以让我们了解读者对本书的看法——读者喜欢或不喜欢的内容。读者反馈是重要的部分,能够帮助我们更好地阐述本书的主题,以便读者以后能够更好地掌握其内容。

将一般反馈发送至邮箱:feedback@packtpub.com,需在邮件主题中标明本书的标题。

如果读者擅长某一话题,并且对写书或撰稿感兴趣,登录www.packtpub.com/authors,可查看作者指南。用户支持

读者购买了Packt出版的书籍,我们会帮助读者从中获得最大收获。下载示例代码

凡购买过Packt出版的书籍的用户,均可访问http://www. packtpub. com,登录账户,并下载书籍的示例代码文件。如果读者是在别处购买的本书,可登录http://www.packtpub.com/ support,注册账户,以便通过电子邮箱直接获取文件。下载本书的彩色图像

我们同样也为读者提供了含有本书中截屏/图表的彩色图像PDF文件。彩色图像会帮助读者更好地理解输出中产生的变化。登录https://www.packtpub.com/sites/default/ files/downloads/ 0860OS_ColoredImages.pdf即可下载本文件。勘误

尽管我们已格外小心以确保内容的准确性,仍然无法避免书中会出现疏漏。如果读者发现在我们出版的书籍中存在错误——可能是文字或代码错误——请告知我们,我们将感激不尽。疏漏改正后,可以避免影响其他读者的阅读体验,并且有助于提高本书的后续版本。如果读者发现任何勘误,请按照以下方法告知:登录http://www.packtpub.com/ submit-errata,选择书籍,单击“勘误提交表格”链接,并输入勘误内容。一旦勘误通过核实,将会接收提交,并且勘误会上传至我们的网站或添加至此标题下“勘误”一节中现有的勘误表。

登录https://www.packtpub.com/books/content/support并在“搜索栏”输入书名,可查看以前提交的勘误。“勘误”一节中会提供必要信息。版权保护

非法翻印网上有版权的材料是所有媒体中存在已久的问题。在Packt,我们很重视对自身版权及授权的保护。如果读者在网上看见以任何形式盗版我们著作的行为,请立即向我们提供位置地址或网站名称,以便我们采取补救措施。

请将带有涉嫌盗版内容链接的邮件发送至copyright@packtpub.com与我们联系。

感谢读者对保护作者及我们能为读者提供有价值的内容而提供的帮助。疑问

如果读者对本书留有疑问,可发送邮件至questions@packtpub.com与我们联系,我们会竭尽所能解答读者的疑问。第1章模式的数据挖掘

数据挖掘常用于检测数据中的模式或规则。

兴趣点在于仅能够通过使用大数据集进行检测的不明显模式。一段时间内可以检测更简易的模式,如用于购买关联或时间选择的购物篮分析。我们对R编程的兴趣在于检测意外的关联,这能够带来新的机会。

某些模式本质上是有序的,例如,基于以往结果预测系统中的故障,通过使用大数据集,以往结果会更加明确。下一章会探讨相关内容。

本章探讨使用R来发现数据集不同方法中的模式。● 聚类分析:这是检测数据和建立多组相似数据点的过程。通过运

用多种算法可以进行聚类分析。不同的算法着重使用数据分布的

不同属性,如点间的距离、密度或统计范围。● 异常检测:这是着眼于表面相似但某些属性存在差异或异常的数

据的过程。异常检测经常用于执法机关、欺诈检测及保险索赔等

领域。● 关联规则:这是一组可以根据数据做出的决策。我们会寻找具体

的步骤,这样,如果我们找到数据点,就可以运用规则确定是否

可能存在另一个数据点。此规则经常用于购物篮方法。在数据挖

掘中,我们寻找存在于数据中更深层次的不明显规则。1.1 聚类分析

通过运用各种算法(如下表列举的一些算法)可进行聚类分析。模型类别模型如何工作此模型计算了点间的距离,并且基于距离远近对连通性点进行组织此模型将数据分割成集群,并且将每个数据点与分割一个集群结合起来,最主要的集群是K-means分布模型此模型使用了统计分布以便确定集群此模型确定了数据点的紧密度以便到达分布的密密度集区。DBSCAN常用于密集的分布,OPTICS常用于更加稀疏的分布

在算法中,同样也有更高级别的粒度,其中包括硬聚类或软聚类等。● 硬聚类或软聚类:用于界定数据点是否可以成为一个以上集群的

一部分。● 分割规则:用于确定如何向不同分区分配数据点,规则如下。● 严密:此规则检查分区是否包括不紧密的数据点。● 重叠:此规则检查分区是否以任何方式重叠。● 分层:此规则检查分区是否分层。

在R编程中,聚类工具用于:● K-means聚类;● K-medoids聚类;● 分层聚类;● 期望最大化;● 密度估计。1.1.1 K-means聚类

K-means聚类是将数据集分割成k集群的方法。需要预先确定将数据集分成几个集群。K-means算法的步骤如下所示。(1)从数据中选取k随机行(质心)(可使用预先确定的集群数量)。(2)我们使用Lloyd's算法(系统默认)来确定集群。(3)根据与质心的距离而对每个数据点进行分配。(4)将每个质心重新计算为与其相关的所有点的平均值。(5)对与质心距离最近的数据点进行重新分配。(6)继续执行步骤3和步骤4,直到不再分配数据点或循环次数已为最大值为止。

这是启发式算法,最好多次运行流程。通常,此算法会在R中快速运行,原因在于每个步骤都不难执行。其目的是通过不断完善术语,将平方和降到最小。

预先确定集群数量可能会出现问题。用图表表示数据(或平方等数值)应直观地呈现数据的逻辑分组。通过确定截止进行选择的步骤来进行迭代,以此来确定分组大小(本章后面会使用此步骤)。同样也有其他企图计算选择截止的R功能包。完成后,应核实选取集群的拟合。

使用平均值(步骤3中)表示K-means无法与相当稀疏的数据或带有许多异常值的数据一起工作。此外,如果集群的线性形状不好,就会出现问题。图示应证明数据是否适合此算法。1.用法

用kmeans函数在R编程中进行K-means聚类。使用k-means聚类的R编程遵循了此处提出的约定(注意:读者可以通过使用内联help函数确定函数的约定以便获取此信息,如?kmeans):kmeans(x,centers,iter.max = 10,nstart = 1,algorithm = c("Hartigan-Wong", "Lloyd", "Forgy", "MacQueen"),trace=FALSE)

下表对不同参数进行了说明。参数描述x这是待分析的数据矩阵centers这是集群数量iter.max这是最大迭代次数(除非停止重赋值)nstart这是随机集的使用次数可以是下列类型之一:Hartigan-Wong、Lloyd、algorithmForgy或MacQueen算法trace随着算法的不断发展,这提供了当前的跟踪信息

调用kmeans函数能够返回带有下列属性的kmeans对象。属性描述cluster包含了集群分配centers包含了集群中心totss提供了总平方和withinss这是每个聚类内部平方和的向量tot.withinss包含了距离平方和总量betweenss包含了聚类组间的平方和size包含了每个聚类内的数据点数量iter包含了执行迭代的次数ault包含了专家诊断2.示例

首先,在正态分布中生成了一百组随机数,并且将随机数分配给矩阵x,如下所示:>x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2), matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))

我们可以显示生成的数值,如下所示:>x [,1] [,2] [1,] 0.4679569701 -0.269074028 [2,] -0.5030944919 -0.393382748 [3,] -0.3645075552 -0.304474590… [98,] 1.1121388866 0.975150551 [99,] 1.1818402912 1.512040138[100,] 1.7643166039 1.339428999

生成的kmeans对象值可确定并显示如下(使用10个集群):> fit <- kmeans(x,10)> fitK-means clustering with 10 clusters of sizes 4, 12, 10, 7, 13, 16, 8,13, 8, 9Cluster means: [,1] [,2]1 0.59611989 0.772135272 1.09064550 1.024565633 -0.01095292 0.412551304 0.07613688 -0.488163605 1.04043914 0.788647706 0.04167769 -0.050238327 0.47920281 -0.055282448 1.03305030 1.284883589 1.47791031 0.9018542710 -0.28881626 -0.26002816Clustering vector: [1] 7 10 10 6 7 6 3 3 7 10 4 7 4 7 6 7 6 6 4 3 104 3 6 10 6 6 3 6 10 3 6 4 3 6 3 6 6 6 7 3 4 6 7 610 4 10 3 10 5 2 9 2 [55] 9 5 5 2 5 8 9 8 1 2 5 9 5 2 5 8 1 5 8 2 8 8 5 5 8 1 1 5 8 9 9 8 5 2 5 8 2 2 9 2 8 2 8 2 8 9Within cluster sum of squares by cluster: [1] 0.09842712 0.23620192 0.47286373 0.30604945 0.21233870 0.478249820.36380678 0.58063931 0.67803464 0.28407093 (between_SS / total_SS = 94.6 %)Available components:[1] "cluster" "centers" "totss" "withinss" "tot.withinss" "betweenss" "size" "iter" "ifault"

如果我们查看结果,就会发现某些有意思的数据点:● Cluster means表示用于集群分配的平均值的分解。● Clustering vector表示将100个数分配给哪个集群。● Cluster sum of squares表示总平方和,如输出中所示。● 百分比值是betweenss值在totss值中的百分比。如果值为

94.6%,说明拟合好。

我们任意选取数量为10的集群,但是应核实此数字确实好用。通过使用一系列的集群大小多次运行kmeans函数,最终会得到一张与下列示例中图表相似的图表。

例如,如果我们运行下列代码,并且记录结果,输出数据如下所示:results <- matrix(nrow=14, ncol=2, dimnames=list(2:15,c("clusters","sumsquares")))for(i in 2:15) { fit <- kmeans(x,i) results[i-1,1] <- i results[i-1,2] <- fit$totss}plot(results)

数据分布得越多,就越能够明确划分集群的最大数量,正如深层聚类的平方和不会有所增加。然而,由于测试中使用了平滑数据,因此可以增加集群数量。

一旦确定了集群,您就能够收集到可视化表示形式,如下图所示:1.1.2 K-medoids聚类

K-medoids聚类是确定数据集中集群的另一种方法。medoid是数据集的实体。数据集表示将medoid嵌入的群组。K-means与质心一起工作。质心是人为创造的概念,用以表示集群。所以,实际上,medoid是数据集的一部分,质心是派生数量。

当围绕medoids进行分割时,务必确保注意下列事项。● 向每个实体仅分配一个集群。● 向每个实体分配用于界定集群的medoid。● 准确界定k集群。

算法的两个阶段包括多个步骤,具体如下。● 构建阶段:在构建阶段,我们提出对集群进行初步估计。(1)随机选取成为medoids的k实体(可向算法提供k实体)。(2)计算相异度矩阵(计算数据集中观测值之间的所有成对相异点(距离))以便发现距离。(3)将每个实体分配给距离最近的medoid。● 交换阶段:在交换阶段,鉴于在构建阶段确定的集群比较粗糙,

我们调整了初步估计。(1)搜索实体的每个集群,实体大大降低了平均相异系数,因此成为集群的medoid。(2)如果medoid出现变化,请从构建阶段的步骤3重新开始。1.用法

用pam函数在R编程中进行K-medoid聚类:pam(x, k, diss, metric, medoids, stand, cluster.only, do.swap, keep.diss, keep.data, trace.lev)

下表对pam函数的不同参数进行了说明。参数描述x这是数据矩阵或相异度矩阵(基于diss标记)k这是集群数量,其实0比k小,而k比实体数量小数值如下所示:diss● 如果x是矩阵,就为“FALSE”● 如果x是相异度矩阵,就为“TRUE”这是用于计算相异度矩阵的字符串度量,可以是下列类型之一:metric● 用于欧几里得距离的euclidean● 用于曼哈顿距离的manhattan如果分配到了“NULL”,就需要开发一组medoidsmedoids;否则,这就是一组初步medoids如果x是数据矩阵,在计算相异度矩阵之前,会stand使x的度量标准化cluster.only如果数值集为“TRUE”,仅需要计算并返回聚类do. swap包含了布尔值,用于决定是否应该进行交换包含了布尔值,用于决定相异点是否应该保存在keep. diss结果中包含了布尔值,用于决定数据是否应该在结果中keep. data保留包含了诊断的整体跟踪级别,其中0表示无跟踪trace. lev信息

可显示从pam函数返回的结果,这样难以说明结果;或可绘图表示结果,这样能够直观地了解结果。2.示例

使用带有两个(直观上)清晰集群的一组简单数据,如下表所示,此数据存储在名为medoids. csv的文件中:对象xy1110221131104212514635726825936

使用文件medoids. csv上的pam函数,如下所示:# load pam function> library(cluster)#load the table from a file> x <- read.table("medoids.csv", header=TRUE, sep=",")#execute the pam algorithm with the dataset created for the example> result <- pam(x, 2, FALSE, "euclidean")Looking at the result directly we get:> resultMedoids: ID Object x y[1,] 2 2 2 11[2,] 7 7 2 6Clustering vector:[1] 1 1 1 1 2 2 2 2 2Objective function: build swap1.564722 1.564722Available components: [1] "medoids" "id.med" "clustering" "objective" "isolation" [6] "clusinfo" "silinfo" "diss" "call" "data"

对结果进行评估:● 我们指定使用两个medoids,并且选择第3行和第6行。● 这些行如同clustering vector中显示的那样聚集在一起(与预期一

样,大约一半在第一个medoid,其余都在另一个medoid)。● 从构建阶段到交换阶段,函数未出现巨大变化(构建阶段的

Objective function值为1.56,交换阶段的Objective function值也为

1.56)。

让我们通过摘要函数来进行更清楚的观察,可见下列结果:> summary(result)Medoids: ID Object x y[1,] 2 2 2 11[2,] 7 7 2 6Clustering vector:[1] 1 1 1 1 2 2 2 2 2Objective function: build swap1.564722 1.564722Numerical information per cluster:sizemax_dissav_diss diameter separation[1,] 4 2.236068 1.425042 3.741657 5.744563[2,] 5 3.000000 1.676466 4.898979 5.744563Isolated clusters: L-clusters: character(0) L*-clusters: [1] 1 2Silhouette plot information: cluster neighbor sil_width2 1 2 0.75750893 1 2 0.68645441 1 2 0.68596614 1 2 0.63151968 2 1 0.73109227 2 1 0.68727246 2 1 0.65958119 2 1 0.63748085 2 1 0.5342637Average silhouette width per cluster:[1] 0.6903623 0.6499381Average silhouette width of total data set:[1] 0.667904436 dissimilarities, summarized : Min. 1st Qu. Median Mean 3rd Qu. Max.1.4142 2.3961 6.2445 5.2746 7.3822 9.1652Metric : euclideanNumber of objects : 9Available components: [1] "medoids" "id.med" "clustering" "objective" "isolation" [6] "clusinfo" "silinfo" "diss" "call" "data"下载示例代码凡购买过Packt出版的书籍的用户,均可访问http://www.packtpub.com,登录账户,并下载书籍的示例代码文件。如果读者是在别处购买的本书,可登录http://www.packtpub.com/support,注册账户,以便通过邮箱直接获取文件。

摘要提供了有关medoid的更多详情,并介绍了如何选取medoid。然而,同样需注意相异度。

通过用图表表示数据,可见下列输出数据:#plot a graphic showing the clusters and the medoids of each cluster> plot(result$data, col = result$clustering)

生成图和预期一样。从图中能够清楚地看到分裂为两个medoid的数据,各有各的空间,并且用颜色区分二者。1.1.3 分层聚类

分层聚类是确定数据集中某一层集群的方法。

通过使用分层聚类,我们试图创建集群的层次,有如下两种方法。● 聚合法(或自底向上):在此方法中,每个实体开始都是自己的

集群,并且当每组都提升层次时会合并。● 分裂法(或自顶向下):在此方法中,当所有实体下移层次时,

就会归为一个集群,并且分裂。

通常,通过使用系统树图的树形模型/图模型,显示生成的分层。

用hclust函数在R编程中进行分层聚类。1.用法

hclust函数调用如下所示:hclust(d, method = "complete", members = NULL)

下表对hclust函数的不同参数进行了说明。参数描述d这是矩阵这是使用的附聚法。应是以下方法(不同的缩写)之一:ward.D、ward.D2、single、complete、methodaverage(= UPGMA)、mcquitty(= WPGMA)、median(= WPGMC)或centroid(= UPGMC)members可为“NULL”或d,即相异度矩阵2.示例

开始,我们通过使用下列代码在正态分布上生成某些随机数据:> dat <- matrix(rnorm(100), nrow=10, ncol=10)> dat [,1] [,2] [,3] [,4] [,5][,6] [1,] 1.4811953 -1.0882253 -0.47659922 0.22344983 -0.742278990.2835530 [2,] -0.6414931 -1.0103688 -0.55213606 -0.48812235 1.417637060.8337524 [3,] 0.2638638 0.2535630 -0.53310519 2.27778665 -0.095260581.9579652 [4,] -0.50307726 -0.3873578 -1.54407287 -0.1503834Then, we calculate the hierarchical distribution for our data asfollows:> hc <- hclust(dist(dat))> hcCall:hclust(d = dist(dat))Cluster method : completeDistance : euclideanNumber of objects : 10

生成的数据对象未提供任何信息。我们通过使用系统树图显示分层集群,如下所示:>plot(hc)

系统树图是预期的形状。我发现这些图表有些不易了解,但是,如果仔细研究,可得出如下推论。● 用自顶向下的方法读图,我们可以看出此图有两个不同的分支。

这暗示着有两个截然不同的分组。在两个分支内,我们可以看出

10和3与剩余部分截然不同。不出所料,我们确定有一个偶数组

和一个奇数组。● 用自底向上的方法读图,我们可以看出许多元素相近、相似。这

可从简单的随机分布预期得到。1.1.4 期望最大化

期望最大化(EM)是评估统计模型中参数的过程。

对于给定的模型,参数如下所示。● X:这是一组观测数据。● Z:这是一组缺失值。● T:这是一组未知参数,应将其应用于模型中以便预测Z。

执行期望最大化的步骤如下。(1)将未知参数(T)初始化为随机值。(2)通过使用新的参数值计算最优缺失值(Z)。(3)使用刚刚计算出的最优缺失值(Z)以便更好地评估未知参数(T)。(4)迭代采用步骤2和步骤3,直至收敛。

此版本的算法生成了硬参数值(Z)。实际上,可能对软数值感兴趣,因为将概率分配给了参数的各种数值(Z)。通过硬值,我们可以选取特定的Z值。相反,我们可能会使用软值,因为通过某些概率分布Z会出现变化。

利用mclust程序库里的Mclust函数在R编程中使用EM。Mclust的完整描述是通过EM算法拟合的正态混合模型,EM算法是基于模型的聚类、分类及密度估计,包括贝叶斯正则化。1.用法

Mclust函数如下所示:Mclust(data, G = NULL, modelNames = NULL, prior = NULL, control = emControl(), initialization = NULL, warn = FALSE, ...)

下表对Mclust函数的不同参数进行了说明。参数描述data包含了矩阵包含了使用的集群数量的向量,用于计算BIC,G默认值为1:9modelName包含了使用的模型名称的向量sprior包含了平均值的可选共轭先验control包含了EM的控制参数列表,默认值为List包含了“NULL”或包含一个或更多下列分量的列表:initialization● hcPairs:用于合并各组● subset:在初始化期间使用● noise:初次推测噪声warn包含了发出哪个警告,默认为无2.模型名称列表

当Mclust函数试图决定哪个项目属于某一个集群时,此函数就会使用模型。单变量、多变量及单一分量数据集有不同的模型名称。目的在于选取说明数据的模型,例如:VII将用于数据,并且用每个集群的等体积取代进行球状取代。模型数据集类型单变量混合E等方差(一维)V变量方差(一维)多变量混合EII球形,同等体积VII球形,不等体积EEI对角线,同等体积和形状VEI对角线,不同体积、同等形状EVI对角线,同等体积、不同形状VVI对角线,不同体积和形状EEE椭圆,同等体积、形状和方位EEV椭圆,同等体积和同等形状VEV椭圆,等形状VVV椭圆,不同体积、形状和方位单一分量X单变量正态XII球形多变量正态XXI对角线多变量正态XXX椭圆多变量正态3.示例

首先,我们必须加载包括mclust函数的程序库(我们需要将程序库安装在本地环境中),如下所示:> install.packages("mclust")> library(mclust)

我们会在此示例中使用iris数据,如下所示:> data <- read.csv("http://archive.ics.uci.edu/ml/machine-learningdatabases/iris/iris.data")

现在,我们可以通过EM计算最优匹配(注意:大写Mclust),如下所示:> fit <- Mclust(data)

结果显示如下所示:> fit'Mclust' model object:best model: ellipsoidal, equal shape (VEV) with 2 components> summary(fit)----------------------------------------------------Gaussian finite mixture model fitted by EM algorithm----------------------------------------------------Mclust VEV (ellipsoidal, equal shape) model with 2 components:log.likelihood n df BIC ICL -121.1459 149 37 -427.4378 -427.4385Clustering table: 1 2 49 100

简单地显示fit数据对象不会提供太多信息,仅表示使用什么计算数据集的密度。

summary指令显示了有关结果的更多详细信息,如下所列:● log.likelihood(-121):这是BIC数值的对数似然值。● n(149):这是数据点数量。● df(37):这是分布。● BIC(-427):这是贝叶斯信息准则,是最优值。● ICL(-427):集成完全数据似然值——BIC的分类版本。由于我

们有相同的ICL和BIC数值,因此可对数据点进行分类。

为了能够直观地确认结果,可用图表表示结果,如下所示:> plot(fit)

注意:EM 的plot指令生成了下列四个图。● 用于选择集群数量的BIC数值。● 有关聚类的图。● 有关分类不确定性的图。● 有关集群的轨道图。

下图是密度图。

第一幅图用不同的模型名称说明BIC范围和分量的数量。在这种情况下,我们可能不应该使用VEV,例如:

第二幅图表示对使用数据馈送的每个分量与数据馈送的每隔一个分量进行比较以便确定产生的聚类。选取提供数据最优聚类的分量。熟悉数据是选取聚类的合适数据点的关键,这只是其中一例。

在此示例中,我认为选取X5.1和X1.4会产生距离最近的集群,如下图所示。

第三幅图表示不同选择对聚类迭代的影响,通过消除图中的任意点来突出主要集群,此图用于主要集群,如下所示。

第四幅图是每个集群的轨道图,相对于每个集群的中心,突出显示点可能会出现在哪个地方,如下所示。1.1.5 密度估计

密度估计是评估观测组中群组的概率密度函数的过程。密度估计过程会采用观测值,将其分散到若干数据点中,运行FF转换以便确定核心,然后运行线性近似来评估密度。

密度估计对难以察觉的总体分布函数进行预估。用于生成密度估计的方法如下所示。● Parzen窗:在此方法中,观测值放置在窗口中,密度估计根据接

近度生成。● 向量量化:此方法让您按照观测值的分布做出概率密度函数的模

型。● 直方图:可以直观地表示密度(条形的大小);而绘制直方图时

所选择的bin的数量决定了密度的结果。

通过R编程中的density函数进行密度估计。R中其他用于密度估计的函数如下所示。函数描述DBSCAN此函数用于确定固定点集群的聚类OPTICS此函数用于确定广泛分布集群的聚类1.用法

density函数调用如下所示:density(x, bw = "nrd0", adjust = 1, kernel = c("gaussian", "epanechnikov", "rectangular", "triangular", "biweight", "cosine", "optcosine"), weights = NULL, window = kernel, width, give.Rkern = FALSE, n = 512, from, to, na.rm = FALSE, ...)

下表对density函数的不同参数进行了说明。参数描述x矩阵bw使用的平滑带宽adjust这是倍增器,用于调节带宽使用的是更加平滑的核心,必须是下列核心之一:● gaussian● rectangular● triangularkernel● epanechnikov● biweight● cosine● optcosineweights与x具有相同长度的观测权的向量window使用的核心widthS兼容性参数give.Rkern如果此参数的值为“TRUE”,就表示未预估密度N预估的密度点数from, to使用的最左边和最右边的点na.rm如果此参数的值为“TRUE”,就表示移除缺失值

通过使用以下指令可发现可用带宽:bw.nrd0(x)bw.nrd(x)bw.ucv(x, nb = 1000, lower = 0.1 * hmax, upper = hmax, tol = 0.1 *lower)bw.bcv(x, nb = 1000, lower = 0.1 * hmax, upper = hmax, tol = 0.1 *lower)bw.SJ(x, nb = 1000, lower = 0.1 * hmax, upper = hmax, method = c("ste", "dpi"), tol = 0.1 * lower)

下表对bw函数的不同参数进行了说明。参数描述x数据集nb二元数量lower, upper需要最小化的带宽范围methodste方法用于解方程,或者dpi方法用于直接插件tolste的收敛公差2.示例

iris数据集可使用如下:> data <- read.csv("http://archive.ics.uci.edu/ml/machine-learningdatabases/iris/iris.data")The density of the X5.1 series (sepal length) can be computed asfollows:> d <- density(data$X5.1)> dCall:density.default(x = data$X5.1)Data: data$X5.1 (149 obs.); Bandwidth 'bw' = 0.2741 x y Min.:3.478 Min. :0.0001504 1st Qu.:4.789 1st Qu.:0.0342542 Median :6.100 Median :0.1538908 Mean :6.100 Mean :0.1904755 3rd Qu.:7.411 3rd Qu.:0.3765078 Max. :8.722 Max. :0.3987472

密度值可绘制如下:> plot(d)

此图表示大部分数据都是出现在5和7之间。所以,萼片长度平均低于6。1.2 异常检测

我们可以使用R编程来检测数据集中的异常。异常检测可用于入侵检测、欺诈检测、系统健康状态等不同领域。在R编程中,这些被称为异常值。R编程允许用多种方法对异常值进行检测:● 统计测试;● 基于深度的方法;● 基于偏差的方法;● 基于距离的方法;● 基于密度的方法;● 高维方法。1.2.1 显示异常值

R编程存在可以显示异常值的函数:identify (in boxplot)。

boxplot函数生成了一个盒须图(请看下图)。boxplot函数有若干图形选项,比如此示例,我们无需进行任何设置。

identify函数是便于标记散点图中点的方法。在R编程中,箱线图是散点图的一种。1.示例1

在此示例中,我们需要生成100个随机数,然后将盒中的点绘制成图。

然后,我们用第一个异常值的标识符来对其进行标记:> y <- rnorm(100)> boxplot(y)> identify(rep(1, length(y)), y, labels = seq_along(y))注意图中接近异常值的0。2.示例2

boxplot函数同样也会自动计算数据集的异常值。

首先,我们会生成100个随机数(注意:此数据是随机生成的,所以结果可能不同):> x <- rnorm(100)

可通过使用下列代码查看摘要信息:> summary(x) Min. 1st Qu. Median Mean 3rd Qu. Max.-2.12000 -0.74790 -0.20060 -0.01711 0.49930 2.43200

现在,我们可以通过使用下列代码显示异常值:> boxplot.stats(x)$out[1] 2.420850 2.432033

下列代码会用图表表示数据集,并且突出显示异常值:> boxplot(x)注意图中接近异常值的0。

我们可以通过使用汽车的内置数据生成含有更常见数据的箱线图,这些数据与异常值存在相同的问题,如下所示:boxplot(mpg~cyl,data=mtcars, xlab="Cylinders", ylab="MPG")3.另一个有关异常检测的示例

当有两个维度时,我们同样也可以使用箱线图的异常值检测。注意:我们通过使用x和y中异常值的并集而非交集解决问题。此示例就是要显示这样的点。代码如下所示:> x <- rnorm(1000)> y <- rnorm(1000)> f <- data.frame(x,y)> a <- boxplot.stats(x)$out> b <- boxplot.stats(y)$out> list <- union(a,b)> plot(f)> px <- f[f$x %in% a,]> py <- f[f$y %in% b,]> p <- rbind(px,py)> par(new=TRUE)> plot(p$x, p$y,cex=2,col=2)

虽然R确实按照我们的要求去做了,但是此图看起来不对。我们完全是在编造数据,在真正的use case中,需要利用专业知识以便确定这些异常值是否正确。1.2.2 计算异常

考虑到构成异常的多样性,R编程带有可以让您完全控制异常的机制:编写能够用于做决策的函数。1.用法

我们可使用name函数创建异常,如下所示:name <- function(parameters,…) { # determine what constitutes an anomaly return(df)}

这里,参数是我们需要在函数中使用的数值。假设我们将函数返回为数据框。利用此函数可以完成任何工作。2.示例1

我们会在此示例中使用iris数据,如下所示:> data <- read.csv("http://archive.ics.uci.edu/ml/machine-learningdatabases/iris/iris.data")

如果我们决定当萼片低于4.5或高于7.5时存在异常,就使用下列函数:> outliers <- function(data, low, high) {> outs <- subset(data, data$X5.1 < low | data$X5.1 > high)> return(outs)>}

然后,我们会得出下列输出数据:> outliers(data, 4.5, 7.5) X5.1 X3.5 X1.4 X0.2 Iris.setosa8 4.4 2.9 1.4 0.2 Iris-setosa13 4.3 3.0 1.1 0.1 Iris-setosa38 4.4 3.0 1.3 0.2 Iris-setosa42 4.4 3.2 1.3 0.2 Iris-setosa105 7.6 3.0 6.6 2.1 Iris-virginica117 7.7 3.8 6.7 2.2 Iris-virginica118 7.7 2.6 6.9 2.3 Iris-virginica122 7.7 2.8 6.7 2.0 Iris-virginica131 7.9 3.8 6.4 2.0 Iris-virginica135 7.7 3.0 6.1 2.3 Iris-virginica

为了获得预期的结果,可以通过向函数传送不同的参数值灵活地对准则进行轻微调整。3.示例2

另一个受欢迎的功能包是DMwR。它包括同样可以用于定位异常值的lofactor函数。通过使用以下指令可对DMwR功能包进行安装:> install.packages("DMwR")> library(DMwR)

我们需要从数据上移除“种类”列,原因在于其是根据数据进行分类的。可通过使用以下指令完成移除:> nospecies <- data[,1:4]

现在,我们确定框中的异常值:> scores <- lofactor(nospecies, k=3)

然后,我们查看异常值的分布:> plot(density(scores))

一个兴趣点在于:在若干异常值中(即密度约为4)是否存在非常接近的等式。1.3 关联规则

关联规则说明了两个数据集之间的关联。此规则常用于购物篮分析。一组事务中的每个事务(购物袋)可能包含多个不同项目,那么如何能够让产品销售有关联呢?常见关联如下所示。● 支持度:这是事务同时包含A和B的百分比。● 置信度:这是事物已经包含A的情况下包含B的百分比(规则正

确)。● 提升度:这是置信度与包含B情况下百分比的比率。请注意:若

提升度为1,则A和B是独立的。关联的挖掘

在关联规则中,R中广泛使用的工具是apriori。1.用法

可调用apriori规则的程序库,如下所示:apriori(data, parameter = NULL, appearance = NULL, control = NULL)

下表对apriori程序库的不同参数进行了说明。参数描述data事务数据存储了挖掘的默认行为,其中支持度为0.1、置信parameter度为0.8、最大长度为10,可相应地改变参数值appearance用于限制规则中出现的项目control用于调整所用算法的性能2.示例

需要加载apriori规则的程序库,如下所示:> install.packages("arules")> library(arules)

加载购物篮数据:> data <- read.csv("http://www.salemmarafi.com/wp-content/uploads/2014/03/groceries.csv")

然后,我们可以从数据中生成规则:> rules <- apriori(data)parameter specification:confidenceminvalsmaxaremavaloriginalSupport support minlenmaxlentarget 0.8 0.1 1 none FALSE TRUE 0.1 110 rules ext FALSEalgorithmic control: filter tree heap memopt load sort verbose 0.1 TRUE TRUE FALSE TRUE 2 TRUEapriori - find association rules with the apriori algorithmversion 4.21 (2004.05.09) (c) 1996-2004 Christian Borgeltset item appearances ...[0 item(s)] done [0.00s].set transactions ...[655 item(s), 15295 transaction(s)] done [0.00s].sorting and recoding items ... [3 item(s)] done [0.00s].creating transaction tree ... done [0.00s].checking subsets of size 1 2 3 done [0.00s].writing ... [5 rule(s)] done [0.00s].creating S4 object ... done [0.00s].

在结果中有若干个突出的点:● 正如从显示中所见,我们使用默认设置(置信度为0.8等)。● 我们发现三个项目中有15295个事务(从655个全部可用项目中

选取)。● 我们生成了五个规则。

我们可以对已生成的规则进行检查,如下所示:> rulesset of 5 rules> inspect(rules)lhsrhs support confidence lift1 {semi.finished.bread=} => {margarine=} 0.2278522 12.5012262 {semi.finished.bread=} => {ready.soups=} 0.2278522 11.8613853 {margarine=} => {ready.soups=} 0.3998039 11.8613854 {semi.finished.bread=,

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载