天天看点

《R的极客理想—工具篇》—— 1.8 caTools:一个奇特的工具集

本节书摘来自华章出版社《r的极客理想—工具篇》一 书中的第1章,第1.8节,作者:张丹,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

问题

r除了统计,还能干什么?

《R的极客理想—工具篇》—— 1.8 caTools:一个奇特的工具集

引言

r语言生来就是自由的,不像java和php等有统一的规范约束。r语言不仅命名、语法各包各异,就连功能也是各种混搭。catools库就是这种混搭库,包括了不相关的几组函数工具集,有图片处理的,有编解码的,有分类器的,有向量计算的,有科学计算的,而且都很好用!以至于我都不知道如何用简短的语言去描述这个包了!唯有用“奇特”来概括它的特点。

catools是一个基础的工具包,包括移动窗口(moving window)统计,二进制图片读写,快速计算曲线的面积auc,logitboost分类器,base64的编码器/解码器,快速计算舍入、误差、求和、累计求和等函数。下面分别介绍catools包中的api。

(1)二进制图片读写

read.gif & write.gif: gif格式图片的读写。

read.envi & write.envi: envi格式图片的读写,如gis图片。

(2)base64的编码器/解码器:

base64encode: 编码器。

base64decode: 解码器。

注 base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个位元为一个单元,对应某个可打印字符。

(3)快速计算曲线的面积auc

colauc: 计算roc曲线的面积(auc)。

combs: 向量元素的无序组合。

trapz: 数值积分形梯形法则。

(4)logitboost分类器

logitboost: logitboost分类算法。

predict.logitboost: 预测logitboost分类。

sample.split: 把数据切分成训练集和测试集。

(5)快速计算工具

runmad: 计算向量中位数。

runmean: 计算向量均值。

runmin & runmax: 计算向量最小值和最大值。

runquantile: 计算向量位数。

runsd: 计算向量标准差。

sumexact, cumsumexact: 无误差求和,针对编程语言关于double类型的精度优化。

本节使用的系统环境是:

linux: ubuntu server 12.04.2 lts 64bit

r: 3.0.1 x86_64-pc-linux-gnu

注 catools同时支持windows 7环境和linux环境。

安装catools包非常简单,只需要一条命令就可以完成。

在r环境中,加载catools类库:

二进制图片读写gif

(1)写一个gif图片

(2)读一个gif图片到内存,再从内存输出

如图1-19所示

(3)创建一个git动画

在当前的操作目录,会生成一个 wave.gif 的文件,如图1-20所示。动画演示效果参见本书在线资源中的文件wave.gif。

《R的极客理想—工具篇》—— 1.8 caTools:一个奇特的工具集

我们看到,catools与谢益辉的animation包有一样的gif输出动画功能。但使用catools做gif动画,不需要依赖其他软件库。而animation的savegif函数需要依赖于imagemagick或者graphicsmagick等第三方软件。

base64的编码器/解码器

base64常用于处理文本数据的场合,表示、传输、存储一些二进制数据,包括mime的email、email via mime、在xml中存储复杂数据。base64的编码解码,只支持向量(vector)类型,不支持data.frame和list类型。把一个boolean向量编解码,代码如下:

roc曲线

roc曲线就是接收者操作特征曲线(receiver operating characteristic curve)的简称,这是一种坐标图式的分析工具,主要用于选择最佳的信号侦测模型、舍弃次佳的模型和在同一模型中设定最佳阈值。roc曲线首先由二战中的电子工程师和雷达工程师发明,用来侦测战场上的敌军载具(飞机、船舰等),即信号检测,之后很快就被引进心理学来进行信号的知觉检测。数十年来,roc分析被用于医学、无线电、生物学、犯罪心理学等领域,而且最近在机器学习(machine learning)和数据挖掘(data mining)领域也得到了很好的发展。

取mass::cats数据集,3列分别是sex(性别)、bwt(体重)、hwt(心脏重量)。

从auc判断分类器(预测模型)优劣的标准:

auc = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。在绝大多数预测的场合,不存在完美分类器。

0.5 < auc < 1,优于随机猜测。这个分类器(模型)如果妥善设定阈值的话,能有预测价值。

auc = 0.5,跟随机猜测一样(例如丢硬币),模型没有预测价值。

auc < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

从图1-21我们看到bwt和hwt都在(0.5,1)之间,因此,cats的数据集是一个真实有效数据集。如果cats的数据集,是一个通过分类预测的数据集,用auc对数据集的评分,就可以检验分类器的好坏了。

《R的极客理想—工具篇》—— 1.8 caTools:一个奇特的工具集

向量元素的无序组合

combs(v,k)函数,用于创建无序的组合的矩阵,矩阵的列表示以几种元素进行组合,矩阵的行表示每种不同的组合。参数v是向量;k是数值,小于等于v的长度[1:length(v)]。

数值积分梯形法则

梯形法则原理:将被积函数近似为直线函数,被积的部分近似为梯形。

logitboost分类器

取datasets::iris数据集,5列分别是sepal.length(花萼长)、 sepal.width((花萼宽)、 petal.length(花瓣长)、petal.width(花瓣宽)、species(种属)。

前6条数据,lab列表示数据属于分类1,即setosa。其他3列setosa、versicolor、virginica,分类表示属于该分类的概率是多少。下面设置迭代次数,比较分类结果与实际数据结果。

从上面3次测试结果可以看出,迭代次数越多模型分类越准确。下面随机划分训练集和测试集,并分类预测。

快速计算工具runmean

均线在股票交易上非常流行,是一种简单、实用的看盘指标。下面我们对时间序列数据取均线,输出结果如图1-22所示。

《R的极客理想—工具篇》—— 1.8 caTools:一个奇特的工具集

我们从图1-22中看到6条线, 黑色是原始数据,其他各种颜色线代表不同单位的均线。比如,红色(red)线表示3个点的平均,绿色(green)线表示8个点的平均。

快速计算工具组合

对数据集取最大路径(runmax)、最小路径(runmin)、均值路径(runmean)和中位数路径(runmed),输出结果如图1-23所示。

《R的极客理想—工具篇》—— 1.8 caTools:一个奇特的工具集

无误差求和

各种编程语言,用计算机做小数计算的时候,都会出现计算误差的情况,r语言也有这个问题。首先用sum()函数求和。

我们对向量x求和,各组值加起来正好为0。但是sum()函数,结果是-1e+20,这是由于编程精度的问题造成的计算误差。通过sumexact()函数修正后,就没有误差了。下面用cumsum()函数累积求和。

cumsum()函数同样出现了精度的误差,需要用cumsumexact()函数来修正。

最后还是要用“奇特”来概括这个工具集,相信你也发现了它的奇特。