R语言中ggplot2中stat=“identity”什么意思

Python09

R语言中ggplot2中stat=“identity”什么意思,第1张

ggplot2包可以用来绘图,其中的geom_text函数可以设置标签: library(plyr) library(ggplot2) library(scales) dtf = 0, 0, 1))) + scale_y_continuous("Anteil in Prozent", labels = percent_format())

向量是 R 语言中最基本的数据类型,在 R 中没有单独的标量(例如 1 本质上是 c(1)) 。

R 中可以用 = 或者 <- 来进行赋值 , <-的快捷键是 alt + - 。

R的下标是从1开始的,和python等不同(python四从0开始的)

当然我们也可以用逻辑进行筛选,例如

负数下标表示不选这个这些下标,例如:

c() 可以合并向量,例如

向量有个比较有趣的性质,当两个向量进行操作时,如果长度不等, 长度比较短的一个会复制自己直到自己和长的一样长。

a 自动变成了 c(3,4,3,4) 然后与b相加 , 得到了下面的结果。

遇到不懂得函数,可以用help("函数")查看函数用法。

矩阵,从本质上来说就是多维的向量,我们来看一看 我们如何新建一个矩阵。

可以看到向量元素变为矩阵元素的方式是按列的,从第一列 到第二列,如果我们想按行输入元素,那么需要加入 byrow = TRUE 的参数:

与向量相似,我们可以用下标来筛选矩阵, 例如:

a[行,列]

当我们对两个矩阵相乘,我们得到的结果是 对应元素两两相乘的结果,例如:

而这不是我们想要的矩阵乘法,在 R 中我们在乘法旁边加两个 百分号来做矩阵乘法:

此外,我们可以用 t() 来求矩阵的转置 , 用 solve() 来求矩阵的逆。

数据框类似矩阵,与矩阵不同的是,数据框可以有不同的数据类型。 一般做数据分析,我们把一个类似 excel 的表格读入 R ,默认的格式 就是数据框 , 可见数据框是一个非常重要的数据结构。

一般来说我们需要分析的数据,每一行代表一个样本,每一列代表一个 变量。

下面我们用 R 内置的数据集 iris 来看一看数据框的使用。

我们用 data 函数调入了 iris 这个数据集 , 然后用 head 函数来看一看这个数据 的前几行 , 可以看到有 sepal 的长度,宽度,petal 的长度和宽度,还有一个变量 Species 来描述样本的类别。

我们可以用 summary 函数来对数据集做大致的了解。

可以直观地看到每个变量的信息,对于几个数值变量,我们可以看到最小值,中位数等等统计信息。而对于 Species 这个分类变量,我们看到的是计数信息。

筛选数据框与矩阵相似,都可以通过数字下标来获取子集,不同地是因为数据框有不同的列名,我们也可以通过列名来获取某一特定列,例如:

我们可以用 names() 函数来获取数据框的列名

并可以通过为其赋值改变列的名字。

列表是一种递归式的向量,我们可以用列表来存储不同类型的数据,比如:

列表有多种索引方式,可以用如下方式获取。

今天我们实验的对象就是一组从原始 R 进化出来的工具链 Tidyverse , 它是由 Hadley Wickham 主导开发的一系列 R 包的集合。 Tidyverse 继承了R语言进行快速统计分析的优势 , 并实现了一些新的理念 , 例如 magrittr 包中的管道操作 , 让线性嵌套的函数组合变得更加清晰易懂;可视化方面中的 ggplot ,使绘图变成搭积木式的图层叠加。

这样的小发明有的改变了分析的运作方式 , 有的改变了使用者的认知方式 , 聚在一起形成了一种新的数据分析的生态链 。具体来看 , Tidyverse 有如下核心组件:

mpg 数据集是刻画不同汽车的排放状况的一个数据集, 总过有 234 个样本 , 11 个变量 。 这 11 个变量分别是:

manufacture: 制造商

model: 车型

dispel: 汽车排放量

year: 制造年度

cyl: 排气管数量

trans: 排放类型

drv: 驱动方式

cty: 每公里耗油量(城市道路)

hwy: 每公里耗油量(高速路)

fl: 油的种类

class: 车的类型

更多数据相关信息可以通过 help(mpg) 指令获取。

在属性映射中加入 color=class 参数后 , 我们可以看到每个点的汽车对应的类型被用 不同颜色表现了出来 , 对于散点图 , 还有 size(大小) , shape(形状) 等等参数 可以用于确定点的属性。

对于条形图的y轴就是数据框中原本的数值时,必须将geom_bar()函数中stat(统计转换)参数设置为’identity’,即对原始数据集不作任何统计变换,而该参数的默认值为’count’,即观测数量。

《深度学习精要(基于R语言)》学习笔记

机器学习主要用于开发和使用那些从原始数据中学习、总结出来的用于进行预测的算法。

深度学习是一种强大的多层架构,可以用于模式识别、信号检测以及分类或预测等多个领域。

神经网络包括一系列的神经元,或者叫作节点,它们彼此连结并处理输入。神经元之间的连结经过加权处理,权重取决于从数据中学习、总结出的使用函数。一组神经元的激活和权重(从数据中自适应地学习)可以提供给其他的神经元,其中一些最终神经元的激活就是预测。

经常选择的激活函数是sigmoid函数以及双曲正切函数tanh,因为径向基函数是有效的函数逼近,所以有时也会用到它们。

权重是从每个隐藏单元到每个输出的路径,对第i个的输出通过(w_i)表示。如创建隐藏层的权重,这些权重也是从数据中学习得到的。分类会经常使用一种最终变换,softmax函数。线性回归经常使用恒等(identity)函数,它返回输入值。权重必须从数据中学习得到,权重为零或接近零基本上等同于放弃不必要的关系。

R中神经网络相关包:

一旦集群完成初始化,可以使用R或本地主机(127.0.0.1:54321)提供的Web接口与它连接。

如果数据集已经加载到R,使用as.h2o()函数:

如果数据没有载入R,可以直接导入到h2o中:

也可以直接导入网络上的文件:

导入基于图片识别手写体数字,数据集的每一列(即特征),表示图像的一个像素。每张图像都经过标准化处理,转化成同样的大小,所以所有图像的像素个数都相同。第一列包含真实的数据标签,其余各列是黑暗像素的值,它用于分类。

使用caret包训练模型:

生成数据的一组预测,查看柱状图:

跟训练集数据柱状图对比,很明显模型不是最优的。

通过混淆矩阵检查模型性能:

No Information Rate(无信息率)指不考虑任何信息而仅仅通过猜测来决定最频繁的类的准确度期望。在情形“1”中,它在11.16%的时间中发生。P值(P-Value [Acc >NIR])检验了观测准确度(Accuracy : 0.3674)是否显著不同于无信息率(11.16%)。

Class: 0的灵敏度(Sensitivity)可以解释为:89.07%的数字0被正确地预测为0。特异度(Specificity)可以解释为:95.14%的预测为非数字0被预测为不是数字0。

检出率(Detection Rate)是真阳性的百分比,而最后的检出预防度(detection prevalence)是预测为阳性的实例比例,不管它们是否真的为阳性。

平衡准确度(balanced accuracy)是灵敏度和特异度的平均值。

接下来我们通过增加神经元的个数来提升模型的性能,其代价是模型的复杂性会显著增加:

隐藏神经元的数量从5个增加到10个,样本内性能的总准确度从36.74% 提升到了 65.4%。我们继续增加隐藏神经元的数量:

增加到40个神经元后准确度跟10个神经元的一样,还是65.4%。如果是商业问题,还需要继续调节神经元的数量和衰变率。但是作为学习,模型对数字9的表现比较差,对其他数字都还行。

RSNNS包提供了使用斯图加特神经网络仿真器(Stuttgart Neural Network Simulator , SNNS)模型的接口,但是,对基本的、单隐藏层的、前馈的神经网络,我们可以使用mlp()这个更为方便的封装函数,它的名称表示多层感知器(multi-layer perceptron)。

RSNNS包要求输入为矩阵、响应变量为一个哑变量的 矩阵 ,因此每个可能的类表示成矩阵列中的 0/1 编码。

通过decodeClassLabels()函数可以很方便的将数据转换为哑变量矩阵。

预测结果的值为1-10,但是实际值为0-9,所以在生成混淆矩阵时,需要先减去1:

RSNNS包的学习算法使用了相同数目的隐藏神经元,计算结果的性能却有极大提高。

函数I()有两个作用:

1.在对data.frame的调用中将对象包含在I()中来保护它,防止字符向量到factor的转换和名称的删除,并确保矩阵作为单列插入。

2.在formula函数中,它被用来禁止将“+”、“-”、“*”和“^”等运算符解释为公式运算符,因此它们被用作算术运算符。

从RSNNS包返回的预测值(pred.ml4)中可以看到,一个观测可能有40%的概率成为“5”,20%的概率成为“6”,等等。最简单的方法就是基于高预测概率来对观测进行分类。RSNNS包有一种称为赢者通吃(winner takes all,WTA)的方法,只要没有关系就选择概率最高的类,最高的概率高于用户定义的阈值(这个阈值可以是0),而其他类的预测概率都低于最大值减去另一个用户定义的阈值,否则观测的分类就不明了。如果这两个阈值都是0(缺省),那么最大值必然存在并且唯一。这种方法的优点是它提供了某种质量控制。

但是在实际应用中,比如一个医学背景下,我们收集了病人的多种生物指标和基因信息,用来分类确定他们是否健康,是否有患癌症的风险,是否有患心脏病的风险,即使有40%的患癌概率也需要病人进一步做检查,即便他健康的概率是60%。RSNNS包中还提供一种分类方法称为“402040”,如果一个值高于用户定义的阈值,而所有的其他值低于用户定义的另一个阈值。如果多个值都高于第一个阈值,或者任何值都不低于第二个阈值,我们就把观测定性为未知的。这样做的目的是再次给出了某种质量控制。

“0”分类表示未知的预测。

通常来说,过拟合指模型在训练集上的性能优于测试集。过拟合发生在模型正好拟合了训练数据的噪声部分的时候。因为考虑了噪声,它似乎更准确,但一个数据集和下一个数据集的噪声不同,这种准确度不能运用于除了训练数据之外的任何数据 — 它没有一般化。

使用RSNNS模型对样本外数据预测:

模型在第一个5000行上的准确度为85.1%,在第二个5000行上的准确度减少为80%,损失超过5%,换句话说,使用训练数据来评价模型性能导致了过度乐观的准确度估计,过度估计是5%。

这个问题我们后面再处理。