R 笔记

包含命令以及简单的文字说明,巩固记忆,并方便以后检索,包含调用方式一些简短说明。经历包括包括《R语言与机器学习》,夹杂一些《R语言实战》以及参考一些网络大神的博客。


关于model的summary的说明:

星号(***)表示预测能力,显著性水平,星号越多,显著性水平越低,相关的可能越小。

多元R方值(判定系数)代表着从整体上,模型能多大程度上解释因变量的值,类似于相关系数。

F检验:线性模型输出显示中的F统计量是用于检验模型的统计显着性的检验统计量。 ANOVA显示中的F统计值用于评估模型中术语或组分的重要性。

T检验:差异发生的概率,从而比较差异是否显著,越显著相关性越小。

卡方检验:传统卡方检验是检验自变量与因变量的相关关系

其中A是实际频数,T是理论频数。 越大相关可能性越大。

对于缺失值的操作:

              直接排除:简单但是会排除大量数据,剩下的不能代表总体。

              对于分类变量,可添加一个新的水平,并使用哑变量编码。

              插补法:使用真实值来确定缺失值,比如已知年级猜测年龄的大小。

              使用均值

 

基础操作

观察数据分布:str,summary

table(factor等的类别与对应出现次数,

 参数中也可以是两个长度相同的向量,则可以产生一个二维矩阵,

如果统计中想要观察缺失值,可以加入useNA=”ifany”),

 table基础上可以直接用prop.table 产生对应比例

mean(平均值)var(方差), sd(标准差),

quantile(计算分位数),IQR(计算四分位距),median(中位数),

dev.new(开一个绘图窗口),dev.off(关闭一个绘图窗口)

plot.new(开一个新的画板)

boxplot(箱图,观察数据分布),hist(直方图), plot(散点图),curve(绘制曲线)

pairs(绘制散点图矩阵,用于观察多个变量之间的相关性)

在原图上绘制图形需要使用低级绘图命令,如points(x,y)、lines(x,y)、text(x,y)等

pairs.panels(绘制高阶散点图矩阵,包含相关系数,相关椭圆,局部回归平滑,psych)

abline(指定截距与斜率,绘制直线)

image(绘制稀疏矩阵,arules)

expression(生成字符串,可以在绘图中打出数学公式) ?plotmath查看具体表达式

round(四舍五入), 其他见《R语言实战》5.2.1

CrossTable(交叉表,卡方值表示每个单元格是偶然的可能性大小  gmodels

seq(生成固定步长的向量)

ifelse(根据条件为True或者False返回一个值)

unlist(将一个list结构,简化成向量)

is.na(判断是否为缺失值)

subset(以某种规则筛选矩阵或者向量)

cbind(将一列加入矩阵)

solve(执行矩阵的逆运算)

t(执行矩阵的转置运算)

%*% (矩阵乘法)

%in% (判断某数据结构中的每一个元素是否存在于某数据结构中)

%pin%(部分匹配)

%ain%(完全匹配)

as(格式转换)

read.csv(读取csv,可以读入以逗号为分割的数据),read_csv(读取csv, readr),

read.transactions("groceries.csv", sep =",")将groceries.csv以,为分割读入一个稀疏矩阵当中,arules

write.csv(保存为csv)

paste(合并字符串)

lappy(等价于循环,将函数应用到列表的每一个函数,对矩阵来说是每一个,对数据框来说是每一个变量)

apply(等价于循环,将一个函数应用到一个矩阵的每一行或者每一列)

sample(生成某个范围内的不重复随机整数)

runif(产生0-1的随机数序列)

order(以升序或降序将数据列表进行重新排列)

set.seed(生成随机数种子)

head(查看一个数据框的前几个值)

expend.grid(创建数据框,不一样的是,是对变量的所有组合创建数据框,测试模型参数的时候很有用)

source(调用自定义的.r文件)

body(检查函数的函数体)

formals(检查函数的形参)

args(获得函数的参数列表)

fix(手动修改数据框,可修改变量名称和变量值)

aggregate(Splits the data into subsets,computes summary statistics for each, and returns the

result in aconvenient form.  将数据按照某种规则分割成几部分,分别计算总结性的

统计量,并将结果以一个方便的表返回。

下面的例子中gradyear是因子,操作是按照因子分别求均值,返回一个数据框)

aggregate(data=teens,age~gradyear,mean,na,rm=TRUE)

ave(Subsets of x[] are averaged, where eachsubset consist of those observations with the

same factorlevels.x分割成几部分平均,每一个部分包含了具有同样的因子水平的观察

值。与上类似,返回一个具有重复的组均值向量,长度上等于原始向量)

ave(teens$age, teens$gradyear,FUN= function(x) mean(x, na.rm = TRUE))

system.time(统计运行时间)

随机数

rnorm正态分布

runif均匀分布

rexp

指数分布

rf

F分布

rgamma 

Gamma分布

rgeom

几何分布

rhyper

超几何分布

rlnorm

对数正态分布

rlogis

Logistic分布

rmultinom

多项分布

rnbinom

负二项分布

rpois

泊松分布

rt

t分布

rchisq

卡方分布

 

文本处理

tm,原文见《机器学习与R语言》4.2/Machine Learning with R(P106) 后者更全面

tolower(转换成小写,tm),removeNumbers(去除数字,tm),removeWords(去除某一单词,tm),removePunctuation(去除标点符号,tm),stemDocument(词根,tm)

findFreqTerms(寻找出现次数不少于规定次数的字符串,tm)

DocumentTermMatrix(创建稀疏矩阵,tm)

wordstem(词根,SnowballC

wordcloud(创建词云图——贼炫酷,wordcloud)

paste(合并字符串)

read.transactions()将groceries.csv以sep为分割读入一个稀疏矩阵当中,arules

 

 

标准化方法

min-max,分布在[0,1],需自定义

z-score, 按方差标准化,方差为1,均值为0,scale()

 

 

其他数据预处理

名义特征(factor,character,etc.)的哑变量编码,将一个变量的n 个水平转化为(n-1 ) 个bool值,不用考虑每个因子间的相对距离(knn中可用)

离散化数值特征以便用于分类,可以考虑分位数(朴素贝叶斯中可用)

 

 

近邻分类(kNN)

原理简述:

根据距离待测点的距离判断属于哪一类,k是离得最近的前k个观测点进行投票,其中距离函数自选。

K的选取可以根据训练集案例数量的平方根,多次测试答案最好者;也可以根据距离远近加权;k使用奇数可减少投票票数相等的可能性。

调用方式:

knn(标准knn实现,输出是分类结果,无需使用predict,class

 

 

朴素贝叶斯分类(NB, Naive Bayes)

假设:

              数据集中的所有特征都具有相同的重要性与独立性。(虽然违背了假设还是很好用,hiahiahia,一种解释是只要分类正确,夸张点说,0.51与0.99并无差别 )

原理简述:

              朴素贝叶斯:

垃圾邮件分类中:

先验概率为所有邮件中垃圾邮件的概率,

似然概率为垃圾邮件的前提下某词出现的概率,

边际似然概率为所有邮件中出现此词的概率,

后验概率为出现此词的前提下为垃圾邮件的概率。

很明显有,

              拉普拉斯估计:由于概率是相乘的,所以可能有一项概率为0,导致总体概率为0,因此加一个常数,来避免这种情况。

调用方式:

naiveBayes (调用算法,得出预测模型,可通过predict调用,e1071)

 

 

分而治之——决策树与规则

原理简述:

名义特征

纯度的度量方式:熵

              每一个可能的分割方式所引起的均匀性变化:信息增益

              从一个分割中得到的总熵就是根据案例落入分区中的比例 加权的 个分区的熵值总和。(除去信息增益,也可使用基尼系数卡方统计量增益比

数值特征

              设置阈值,转换为名义特征。

预剪枝,后剪枝,子树提升,子树替换

调用方式:

C5.0(调用决策树模型,使用predict调用,C50)

? C5.0Control(在帮助页面显示如何精细调整模型的细节)

trials (树的数量,自适应增强算法(adaptive boosting)_多个能力弱的算法集合以提升效果,一般能提升使用之前正确率的25%)

costs(添加惩罚因子,错误否定与错误肯定之间代价的衡量)

rule=TRUE(利用分类规则生成模型)

 

 

独立而治之(覆盖算法)——规则学习

原理简述:

              贪婪算法:基于先到先得思想(独立而治之与分而治之都是)

              1R: 单规则分类

RIPPER(RepeatedIncremental Pruning to Produce Error Reduction)

             

调用方式:

OneR(单规则分类,利用predict进行预测,RWeka)

JRip(更复杂的规则学习方法,RWeka)

 

 

预测数值型数据1——回归方法

原理简述:

              线性回归,简单线性回归与多元线性回归,逻辑回归(logisticregression,对二元分类),泊松回归(Poissonregression,对整型数据)

              上述回归以及许多其他回归均属于一类模型——广义线性回归(General Linear Model,GLM),连接函数指定自变量与因变量之间的数学关系。

              普通最小二乘法(Ordinary Least Squares, OLS)

              相关椭圆(correlationellipse):提供变量如何密切相关的可视化信息,位于椭圆中心的点表示x轴变量与y轴变量的均值所确定的点。两个变量之间的相关性由椭圆的形状表示,越拉伸,相关性越强。

              局部回归平滑(loesssmooth):可表示x轴变量与y轴变量之间的一般关系。主要思想是取一定比例的局部数据,在这部分子集中拟合多项式回归曲线,这样我们便可以观察到数据在局部展现出来的规律和趋势。

调用方式:

lm(线性模型;最小二乘法)

cor(计算相关系数矩阵)

pairs(绘制散点图矩阵)

pairs.panels(绘制高阶散点图矩阵,包含相关系数,相关椭圆,局部回归平滑,psych)

说明:

              自变量加不加1一样;

为了添加非线性效果,可以在自变量中添加某因子的多项式;

也可以添加多个变量之间的相互作用,例如:charges~bmi* smoker ócharges~ bmi+ smoker+ bmi:smokers,其中最后一项代表着变量间的相互作用。

 

 

预测数值型数据2——回归树与模型树

原理简述:

例子见《机器学习与R语言》6.3

              回归树(regressiontree)并没有使用线性回归的方法,而是基于到达叶节点的案例的平均值做出预测。

              模型树(Classification and regressiontree)与回归树以大致相同的方式生长,但是在每个节点,根据到达该节点的安理建立多元线性回归模型,可能更难理解,但是能够做到更加精确。

              与熵相对应,回归树的一致性(均匀性)以统计量(方差,标准差,平均绝对值偏差等)来度量。一种常见的分割标准称为标准偏差减少(Standard DeviationReduction,

SDR):

其中, 指标准差,而 是由对一个特征的一次分割产生的值; 指的是集合 中观测值的数量。从本质上讲,公式度量的是,从原始值的标准差减去分割后加权的标准差的减少量。

 

调用方式:

rpart(拟合分类树或者回归树,使用predict预测, rpart)

rpart.plot(将决策树可视化,rpart.plot)

M5P(模型树,使用predict预测,RWeka)

说明:

              Rpart使用predict预测时,第一个参数是模型,第二个参数是测试用数据框,第三个参数是type,共有三个选项,分别是vector(预测数值型数据),class(预测类别),prob(预测分类的概率)

              Rpart.plot有一些控制参数,digits用于控制包含在图中的数字位数,fallen.leaves强制叶节点与图的底部保持一致(对齐),type与extra影响决策和节点被标记的方式。

 

 

黑箱方法1——神经网络

原理简述:

              激活函数(activationfunction)将输入转换为单一输出。阈值激活函数(不常用),S型激活函数(sigmoid/ logistic function ),线性激活函数产生类似于线性回归模型的神经网络,饱和线性激活函数双曲正切函数高斯函数产生径向基函数(Radial basis Function,RBF)网络模型。

网络拓扑(networktopology)描述了神经元的数量以及层数和他们连接的方式。输入结点(Input Node),输出节点(Output Node),(layer),单层网络(single-layer network),多层网络(multilayer network),隐藏层(hiddenlayer),完全连接(fully connected),前馈神经网络(feedforward N),递归神经网络(Recurrent N),反馈神经网络(Feedback N),通用函数逼近器(universal functionapproximator)

训练算法(trainingalgorithm)制定如何设置连接权重,以便抑制或者增加神经元在输入信号中的比重。后向传播算法(Back Propagation),梯度下降法(gradient descent),学习率(learning rate)。

              标准化很重要,否则量级低的变量会被量级高的变量支配。

调用方式:

neuralnet(用于训练数值预测的神经网络,使用compute进行预测,可使用plot进行可视化,图的底部包括误差平方和和步数,neuralnet)

compute(进行计算,第一个参数是模型,第二个参数是数据,返回带有两个分量的列表,$neurons,$net. results, neuralnet

其他添加包: nnet(标准R的一部分,可能最常用),RSNNS(完整的神经网络功能,但是学起来更难)

黑箱方法2——支持向量机

原理简述:

              支持向量机(support vector machines),线性可分的(linearly separable),最大间隔超平面(Maximum Margin Hyperplane,MMH),凸包(convex hull),二次优化(quadratic optimization),非线性可分时,引入松弛变量(slack variable),核技巧(kerneltrick),线性核函数(linear k),多项式核函数(polynomial k),S型核函数(sigmoid/logistic k),高斯RBF核函数(GaussianRBF k)被证明对许多类型的数据都运行的很好。

调用方式:

Ksvm(,调用svm算法,kernlab)

 

 

探寻模式——基于关联规则的购物篮分析

原理简述:

              用于判别事务性数据中商品之间关联的机器学习方法,由于其在零售店之间的广泛使用,所以这种方法通常称为(市场)购物篮分析(market basket analysis),无监督,只能定性确定其正确性。

              Apriori算法:为了减少需要搜索的项集数,而用规则高效的搜索大型数据库的最广泛使用的方法。

              Apriori性质(Aprioriproperty:一个频繁项集的子集必然是频繁的,如:若{苹果,口红}是频繁的,那么{苹果},{口红}也必然是频繁的。

              支持度(support)是指其在数据中出现的频率:

              置信度(confidence)是指该规则的预测能力或者准确度的度量:

              提升度(lift):已知另一类商品被购买,提升度用来度量一类商品相对于他的一般购买率,此时购买的可能性有多大

              稀疏矩阵(sparse matrix)

调用方式:

Read.transactions(创建稀疏矩阵,arules)

Inspect(查看交易数据的内容,groceries[1:5]查看第1-5条交易数据, arules)

ItemFrequency(查看某商品的交易频率,groceries[,1:5]查看第1-5个商品的频率,arules)

itemsFrequencyPlot(绘制商品的频率图,arules)

image(绘制稀疏矩阵,arules

apriori(寻找关联规则,arules)

sort(对规则进行排序,arules)

subset(筛选规则,arules

write(将formalclass rules 写入csv中,arules)

说明:

              对于稀疏矩阵的Summary中第一部分给出了行数与列数以及密度,行是一条交易数据,列是一种种类,密度指非零矩阵单元的比例;第二部分给出了出现最频繁的种类;第三部分给出了长度的分布;最后给出了关于交易规模的统计。即所有种类中,在数据中只出现了一次的有多少,出现了两次的有多少……

              对于apriori算法的summary中包含了规则的数目,规则的长度统计(所有规则中,长度为2的是多少,3的是多少),长度的分位数,支持度、置信度、提升度的分位数,最后一行给出了筛选信息的预定义参数。

 

 

寻找数据的分组——k均值聚类

原理简述:

              寻找超平面,最小化代价。

无监督分类(unsupervisedclassification)。

              半监督学习(semi-supervised learning):一种为先使用无监督学习算法来创建标签,然后采用有监督学习算法来求出最重要的预测指标。

              K的一种取值方法是取 ,n是案例的总数。另一种方法是使用肘部法,类内部同质性上升的肘部点,或者类的异质性下降的肘部点。

调用方式:

kmeans(k均值聚类,需要先标准化,第二个参数指定类的数目,stats)

说明:

              得出的模型其中的两个参数为center,size, cluster前者是聚类中心各个指标值,中者是每一类的案例数量,后者是每一个案例的归类。

 

 

模型性能的评价1——性能评价指标

原理简述:

              类的不平衡问题:当数据中有很大一部分记录属于同一个类别时,可能即使什么都不做,仍然会有很大的正确率,然而却没有任何意义。作为解决方案之一,分而治之——决策树中的惩罚因子是很好的一种。     

              分类问题中,分类的概率也很有用,得到概率的方法是在predict时,可将类型设定为prob,posterior,raw或者probability类型,具体参见模型的文档。

              混淆矩阵(confusion matrix)是一张二维表,(当预测值只有两个水平时好像和交叉表是一个概念),他按照预测值是否匹配数据的真实值来对预测值进行分类第一个维度表示所有可能的类别,第二个维度表示真实的类别。

我们的感兴趣(对,就是这么任性)的类别称为阳性(positive),其他所有类别称为阴性(negative)。

              真阳性(True Positive):正确的分类感兴趣的结果。

              真阴性(True Negative):正确的分类为不感兴趣的结果。

              假阳性(False Positive):错误的分类为感兴趣的类别。

              假阴性(False Negative):错误的被分为不感兴趣的类别。

              准确度(accuracy)=

              错误率(error rate)  

              Kappa统计量:通过解释完全因为巧合而预测正确的概率,它对准确度进行了调整。小于0.2:很差;0.2-0.4:尚可;0.4-0.6:中等;0.6-0.8:不错;0.8-1:灰常好。以下是最常用的一种定义方法:

其中,Pr指的是分类器与真实值之间的真实一致性(a,即正确分类的比例)与期望一致性(e,完全偶然导致预测值和实际值相同的概率,可以假设独立,然后通过概率相乘来进行计算)。

              灵敏度(真阳性率,Sensitivity):度量了阳性样本杯正确分类的比例

              特异性(真阴性率,Specificity):度量了阴性样本杯正确分类的比例。

精确度(阳性预测值,Precision):定义为真阳性在所有预测为阳性案例中的比例。

回溯精确度(Recall):度量了阴性样本杯正确分类的比例。

              F度量(Fmeasure):将精确度与回溯精确度合并为一个单一值,即取其调和平均值

这并不总是是正确,因为这里假设了两者具有相同的权值,更为一般的,有以下的定义。

调用方式:

交叉表可以使用table来绘制,也可以使用CrossTable命令。

caret包提供了大量的对机器学习模型和数据进行准备、训练、评估以及可视化的工具,

它提供了另一个创建稀疏矩阵的函数,语法和table相似,但需要指出阳性的输

出。

confusionMatrix(计算混淆矩阵,计算准确率、错误率、kappa值、灵敏度、特异

性,caret)。

sensitivity(计算灵敏度与特异性、回溯精确度, 需要指定阳性,caret)

posPreValue(计算精确度,caret)

Kappa( 计算kappa,我们主要关注不加权的kappa,加权kappa主要用于存在不同尺度一

致性的情况,如温暖与热的一致性要大于温暖与冷的一致性,vcd)

kappa2(直接应用于数据框中的预测值与世纪分类向量来计算Kappa,irr)

注意:内置的kappa函数与此统计量无关。

 

 

 

模型性能的评价2——性能权衡的可视化

原理简述:

              ROCR提供了一套易于使用的函数用于可视化分类模型性能的统计量。它包含了很多函数用来计算大部分常用的性能度量指标来进行可视化。

              ROC(Receiver Operating Characteristic,受试者工作特征)曲线,纵轴表示真阳性的比例(灵敏度),横轴表示假阳性的比例(1-特异性)。此曲线表示了不同假阳性阈值上的真阳性的比例,分类器的预测值通过模型对阳性类别的估计概率降序排序,从原点开始,每个预测值对应的真阳性与假阳性将分别导致曲线沿纵轴移动或者沿横轴移动,一个示意图如下所示,自己看吧。

离完美分类器越近,说明能够越好的识别阳性值,可以使用ROC曲线下面积(Areaunder the ROC,AUC)来衡量。取值从0.5到1,每个0.1分别被评价为F,D,C,B,A.即无法区分,很差,一般,良好,优秀。

调用方式:

prediction(所有使用ROCR的分类评估都需要用此方法创建一个具有标准格式的对象,需要

两个数据向量,第一个必须包含阳性类别的估计概率,第二个必须包含每个案例的

因子标签率,第三个为可选参数,输入一个向量来指定阳性标签与阴性标签,向量

的第一项为阳性标签,第二项指定阴性标签。,ROCR)

performance(计算预测对象的性能度量值,ROCR)

------------------ROCR: ROC相关-----------------

#计算ROC性能度量值

pred<-performance(pred, measure=”tpr”, x.measure=”fpr”)

plot(pred)

#绘制参考线

abline(a=0,b=1)

#计算AUC

performance(pred, measure=”auc”)

---------------------------------------------------------------

 

 

 

模型性能的评价3——评估未来的性能

简述&调用:

              前面的评价指标提供的都是对模型再代入误差的认识。但是它并不是一个很好的对未来的性能评价的标识器,即对从未见过的数据的模型评价可能不太靠谱。

              保持法(Holdout sampling):将数据划分成训练集与数据集的过程。训练数据集用来生成模型,测试数据集对结果进行评估,比较常见的是1/3用来测试,剩下的用来训练,记得要保证随机分布。

              随机抽样可能有一些问题,不如分层抽样好(原因自己想),caret的creatDataPartition()可以基于分层抽样创建随机划分,需要指定类别的向量,以及样本比例,得出一个包含选出的案例的序号的向量。

因为保持法对未来的性能进行真实的估计,所以绝不允许测试数据集的结果影响模型,如果基于重复测试的结果选择一个最好的模型,那么很容易在不知不觉中违反这个规则。一种典型的解决方案是50%训练集,25%测试集,25%验证数据集。

因为模型在更大的数据集当中进行训练可以得到更好的性能,所以常见做法是选择并评估了最终模型之后,将模型在所有数据上重新训练,以达到最好的效果。

这种方法太过保守,有时候难以包括极端样本,而且大量的数据被用来验证和测试模型,所以一个新的方法来了。

              交叉验证:重复保持法是k折交叉验证(k fold Cross Validation)的基础,k折CV将数据随机的分为k个完全分隔开的部分,被称为折。虽然k可以被设为任意数值,但是最常用的是10折CV,对于每一折,模型对剩下的数据建模,使用剩余的一折进行评估,训练与评估的过程重复10次,然后输出平均指标。

k折的极限为留一交叉验证法(Leave-one-out cross-validation),即每一个样本为1折,但是实用性不大。

我们可以使用caret的creatFlods()来创建交叉验证数据集,该函数与分层随机抽样类似,也尝试在每一折中保持与原始数据类似的各类别比例,返回值是一个列表,包含了k个向量。训练过程可以采用lappy()函数。

也许当前能可靠的估计模型性能的最好标准是重复k折CV(repeated k-fold crossvalidation)。虽然会增加运算的复杂度,但是可以得到稳健的估计。

自助抽样法(bootstrapsampling)创建一些随机选取的仍包含同等数量数据的训练集,然后用来估计模型的统计量。与前面的方法不同的是,这种方法采取的是有放回的抽样方式,每个样本被包含在训练集中的概率为63.2%,即此方法只能代表63.2%的全体。此方法对完整数据的代表性与交叉验证相比更弱。

显然,只利用这么点数据训练的模型可能不太好,有一种特殊的自助方法可以处理这个问题,被称为0.632自助法(0.632bootstrap),通过训练数据集(过于乐观)与测试数据集(过于悲观)的函数来计算最终的性能度量。

此方法有一个优势,对小数据集的效果更好,此外除了性能度量还有别的应用。

 

 

提高模型的性能——调用多个模型来提高性能

原理&命令:

              参数调整:调节模型合适选项的过程。

              caret包中的train支持以下模型与参数的的自动调整

设置parameter的时候在parameter之前要用“.”做前缀,调用结果有输入数据的简单描述,预处理和重抽样方法应用情况的信息,候选模型评估的列表,最佳模型的选择。

caret 的trainControl()用来创建一系列的配置选项,也称为控制对象,与train()一起使用,这些选项考虑到了诸如重抽样策略以及用于选择最佳模型的度量这些模型评价标准的管理,其中两个重要的参数是method和selectionFunction,前者是抽样的方法,具体如下图所示:

              SelectionFunction参数可以设定一函数用来在各个候选者中选择最优的模型,其中包含了3个参数,best函数简单的选择具有最好的某特征度量值的候选者,这也是默认的选项,另外的两个函数用来在最好模型的特定阈值之内选择最节俭的模型。oneSE函数选择最好性能标准差之内最简单的候选者。Tolerance选择某个用户指定比例内的最简单的候选者。

              train()的metric参数用来定义模型评估用到的统计量。

 

提高模型的性能——元学习

原理简述:

              元学习(meta learning):组合与管理多个模型的预测技术。

              集成学习(ensemble):利用类似的创建一个多样性专家组的原理的元学习方法。所有的。

              分配函数(allocation function)决定每个模型接受完整的训练数据集还是某个抽样版本。组合函数(combination function)用来对预测中的不一致进行调节,如投票表决等,或者更加复杂的机制。有时候还建立一个模型来预测组合函数,这种使用多个模型的预测来训练一个仲裁模型的过程称为堆叠(stacking)。

              使用此方法的好处在于:能够节省寻求单一最佳模型的时间,只需要训练一批表现凑活的然后再整合就可以了;另外,他对未来问题有更好的普适性;可以提升大量数据或者少量数据的性能;将不同领域数据合成的能力;对困难学习任务更为细致的了解。

              自助汇聚法(bagging)是最好的集成学习方法之一,使用单一的机器学习算法产生多个模型,然后使用投票(对于分类问题)或者平均(对于数值预测)的方法来组合预测值。它只要使用不稳定学习器(随着数据发生很小变化产生差别很大的模型,如决策树)就能得到很好的效果。

              另一种基于集成学习的受欢迎的方法是boosting,因为他增加弱学习器的性能来获得强学习器的性能,boosting被证明可以经过简单的添加更多的弱学习器来将性能提升到任意阈值。与前者最重要的差异在于,他的重抽样数据集是专门构建用来产生互补的模型,而且所有的选票不是同等重要,会根据性能进行加权。他的算法称为AdaBoost或者自适应boosting该算法产生弱分类器来迭代的学习训练集中很大比例的难以分类的样本,对经常分错的样本进行更多的关注(即给予更大的权重)。

              从未加权的数据开始,第一个分类器尝试对结果建模。预测正确的样本在下一个分类器中出现的可能性比较小,相反地,难以分类的样本将会出现的更加频繁,当下一轮的弱分类器被添加以后,它们用来训练后面更难得样本,该过程会持续进行,直到达到要求的总误差或者性能不再提高。这时,每个分类器的票数会按照他们在建模数据集的准确度进行加权。

              他在决策树中使用的最多。

              大名鼎鼎的随机森林(random forest)来了,它只关注决策树的继承学习,将bagging和随机特征选择结合,对决策树模型提供额外的多样性。在树的集成(森林)产生之后,该模型使用投票的方法来组合预测结果。他更容易使用,也具有更少的过拟合倾向。

              出包错误率(out-of-bag error rate,OBB)也是对测试集错误的一个无偏估计,表示对未来性能的一个合理估计。

调用方式:

bagging(bagging决策树的经典实现,nbagg控制用来投票的决策树的数目,默认是25,

ipred)

train(bagging决策树的实现,method为treebag,与上面相比,可以知道他在未来的性能

方面表现如何,caret,ipred)

bag(提供了通用的bagging实现,他需要三个函数,一个用来拟合模型,一个用来预测,

一个用来聚集投票结果,svmBag提供了我们可以使用的三个函数,我们可以使用它来创建bagControl,然后进行计算,caret还包括了朴素贝叶斯模型(nbBag),决策树(ctreeBag)和神经网络(nnetBag),caret)

boosting(Adaboost.M1算法,adabag)

boosting.cv(Adaboost.M1算法,10折CV,adabag)

train(method=”Adaboost.M1”, Adaboost.M1算法,caret)

randomForest(随机森林算法实现,randForest)

train(method=”rf”,random Forest算法,caret)

 

提高R语言的性能

简述:

ff添加包构建基于磁盘的数据框。bigmemory添加包使用大矩阵,此作者还提供了bigalgebra,biganalysis,bigtabulate三个包,使得简单的分析成为可能,其中biganalysis可以执行bigkmeans()函数。

改进版的数据框(data tableof data.table)在构造子集、连接和分组运算上普遍比数据框快,但他仍然是数据框,所以他的结果对象,能够用到所有接受数据框的R函数中。就是兼容性不降,但是速度给你提上去,这个真的贼棒!

并行运算内核(core),群集(cluster)易并行(embarrasingly parallel)

foreach添加包的foreach可能是最简单的开启并行运算的方法。但是需要先使用doParallel注册。

R︱并行计算以及提高运算效率的方式(parallel包、clusterExport函数、SupR包简介) http://blog.csdn.net/sinat_26917383/article/details/52719232

调用方式:

------------------------使用parallel包来加速------------------------------

library(parallel)

#打开四核,具体核数根据机器的核数决定

cl <- makeCluster(getOption("cl.cores", 4));

system.time({res <- parLapply(cl, 1:5000000,  fun)});

#关闭并行计算

stopCluster(cl);

------------------------------------------------------------------------------------

智能优化算法

粒子群算法pso

模拟退火算法GenSA

遗传算法mcga\genalg\rgenoud

 http://blog.csdn.net/dingming001

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值