【算法总结】 10+数据挖掘、机器 学习算法R常用函数总结(中)
三、贝叶斯
1、e1071包的naiveBayes函数提供了naive bayes的具体实现,其用法如下:
## S3 method for class'formula'
naiveBayes(formula, data, laplace = 0, …, subset, na.action =na.pass)
## Default S3 method:
naiveBayes(x, y, laplace = 0, …) x:表示数字矩阵或数字变量的数据框;y:表示类向量; laplace 默认为0表示禁用拉普拉斯平滑,正数表示启用拉普拉斯平滑
object:“NaiveBayes”类的对象
predict(object, newdata, type) object:naveBayes模型;newdata:测试数据;type:预测类型,type如果为class代表是分类,如果是raw则代表概率的计算 predict函数分类需要指定type="class"
klaR包中的NaiveBayes()函数:因为该函数比e1071包的naiveBayes()函数增加了两个功能,一个是可以输入先验概率,另一个是在正态分布基础上增加了核平滑密度函数。
predict()预测函数需要指定type="class"来分类
2、tm包通常用于文本的分析:
tm包中的函数Corpus()(或VCorpus):导入数据。函数的用法如下:Corpus(x,readerControl = list(reader = x$DefaultReader, language ="en"),…)
对于这些资料来源(x),tm 包提供了一些相关的函数,比如:DirSource(处理目录)、VectorSource(由文档构成的向量)、 DataframeSource(数据框)等。
tm 包中的tm_map()函数:可以通过maps 方式将转化函数实施到每一个单上。m_map()的主要用法如下:tm_map(x, FUN, …, useMeta = FALSE, lazy = FALSE)
再介绍字符串的处理,分割函数:strsplit。使用格式为:
strsplit(x,split, fixed = FALSE, perl = FALSE, useBytes = FALSE)
主要参数说明:
X:字串向量,每个元素都将单独进行拆分。
Split:为拆分位置的字串向量,默认为正则表达式匹配(fixed=FALSE)fixed=TRUE,表示使用普通文本匹配或正则表达式的精确匹配。
Perl:表示可以选择是否兼容Perl的正则表达式的表述方式。
findFreqTerms(x, lowfreq, highfreq)函数:在文档术语或术语文档矩阵中查找频繁项。x为一个术语文档矩阵;lowfreq为一个数字,表示较低的频繁项;highfreq为一个数字,表示较高的频繁项
3、caret包的函数:(有K近邻算法的函数knn3)
createdatapartition(y, times, p=0.5, list)函数:创建一系列的测试/训练的分区。y为真实分类数据,一个输出的向量,如果是createtimeslices,这些应该是按时间的顺序;times为创建的分区的数目,除非重复实验,否则需要一个就行;p训练集占数据集的比重;list为F是不将结果列在列表中。
createresample()函数:创建一个或多个Bootstrap样本;
Createfolds()函数:将数据分为K组;
createtimeslices()函数:创建交叉验证样本信息可用于时间序列数据。
caret包中的knn3(formula,data, subset, k)函数:K近邻分类算法。formula为模型公式;data为数据集;subset为自数据集;k为选择的近邻个数
caret包中的predict.knn3(object,newdata, type)函数也可以写成predict():K近邻算法的预测函数。object为knn3类对象(K近邻算法模型);newdata为要观测数据的数据框;typetype如果为class代表是分类,如果是prop则代表概率的计算
4、gmodels包的CrossTable(x, y, prop.chisq, prop.t, dnn)函数:独立试验因素的交叉制表。 x为向量或矩阵,如果y指定,必须是一个向量;y为一个矩阵或数据框的向量;prop.chisq为T时,每个单元的卡方贡献将被包括;prop.t为T时,t分布的分布率将被包括;dnn在结果的尺寸中被给予的名称。
四、K近邻(KNN) 算法
1、class包的knn(train, test, cl, k=1)函数:tarin为训练集数据矩阵或数据框;test为测试集数据矩阵或数据框;cl为训练集的真实分类数据,应是因子类型的;k为选择的近邻个数
class包中的knn1(train,test, cl)函数:即 knn 中选择 k = 1 的情况,因此 knn1 是 knn 的一个退化情况。
class包中的knn.cv(train, cl, k, prob):K最近邻交叉验证函数。train为训练集数据;cl为训练集的真实分类因子;k为选择的近邻个数;prob为T时,投票获胜类将以概率返回。
其使用的方法是leave-one-out cross validation。即所有的样本点都算到训练集中去,不设置测试集。对每个训练集中的样本点,都使用剩余的样本点中的 k 个最近邻来进行投票,从而决定该样本点的分类。
2、 R语言里的kknn包也可以实现最邻近算法——使用kknn函数
kknn(formula = formula(train),train, test, na.action =na.omit(), k= 7, distance = 2, kernel ="optimal", ykernel = NULL, scale=TRUE, contrasts= c('unordered' = "contr.dummy",ordered ="contr.ordinal")):为K最近邻算法。其中,formula表示训练集的表达式对象;train为训练集的数据框或矩阵;test为测试集的数据库或矩阵;distance为明科夫斯基距离;na.action 缺失值处理,默认为去掉缺失值;kernel内核使用,可能的选择是“rectangular”(这是标准的加权KNN),"triangular","epanechnikov"(或β(2,2)),"biweight"(或β(3,3)),“triweight”(或β(4,4)),"cos","inv", "gaussian", "rank" and "optimal";k为考虑的邻近数量
sample(x,size, replace=F, prob=NULL):采样函数。x表示要取样的源数据集,为一个向量;size非负整数,要采样的大小;replace表示是否为有返回采用,为F表示不返回采样;prob用于获取被采样的向量的元素的概率权重向量
fitted():提取模型拟合值。
assign(x, value)赋值函数。x为变量名;value要赋值给x的值。assign("x",c(10.4, 5.6, 3.1, 6.4, 21.7)) 与x <-c(10.4,5.6, 3.1, 6.4, 21.7)等价 注意:assign()函数赋值的变量需要用get()函数来读取,例如get(data[1])
list.files(path, ignore.case):列出文件夹或目录中的文件。path表示文件夹或路径;ignore.case为T表示忽略大小写。
read.fwf(file, widths):读取固定格式宽度的文件到一个数据框中。file为要读取的文件;widths给出宽度。
3、MASS包中的lda(x, grouping)函数:线性判别分析。x为包含解释性变量的矩阵或数据框;grouping为一个指定了观测类因子
lad(formula, data, na.action)函数:formula为分类公式;data为需要分类的数据;na.action是否忽略NA值
4、caret包的函数:(有K近邻算法的函数knn3)
createdatapartition(y, times, p=0.5, list)函数:创建一系列的测试/训练的分区。y为真实分类数据,一个输出的向量,如果是createtimeslices,这些应该是按时间的顺序;times为创建的分区的数目,除非重复实验,否则需要一个就行;p训练集占数据集的比重;list为F是不将结果列在列表中。
createresample()函数:创建一个或多个Bootstrap样本;
Createfolds()函数:将数据分为K组;
createtimeslices()函数:创建交叉验证样本信息可用于时间序列数据。
caret包中的knn3(formula,data, subset, k)函数:K近邻分类算法。formula为模型公式;data为数据集;subset为子数据集;k为选择的近邻个数
caret包中的predict.knn3(object,newdata, type)函数也可以写成predict():K近邻算法的预测函数。object为knn3类对象(K近邻算法模型);newdata为要观测数据的数据框;typetype如果为class代表是分类,如果是prop则代表概率的计算
五、决策树:
决策树与随机森林包总结:
party包中的ctree()函数:不能很好的处理缺失值,含有缺失值的实例有时会被划分到左子树中,有时会被划分到右子树中,由替代规则决定。predict()函数:测试集与训练集的分类变量水平不同(因子水平不同时),对测试集的预测会失败。
rpart包中的rpart()函数:构建决策树,允许选择具有最小预测误差的决策树,然后在使用predict函数进行预测。
randomForst包中的randomForest()函数:不能处理带有缺失值的数据;分类水平划分数量最大为32(即因子水平为32)
party包中的cforest()函数:没有限定分类属性的水平划分数(即因子水平数)
1、rpart包的rpart(formula, data, method,control, parms)函数:拟合rpart模型。formula为拟合公式;data为数据集;method:树的末端数据类型选择相应的变量分割方法:连续性method=“anova”,离散型method=“class”,计数型method=“poisson”,生存分析型method=“exp”;parms用来设置三个参数:先验概率、损失矩阵、分类纯度的度量方法(gini和information);control:为rpart算法的控制细节选项;cost我觉得是损失矩阵,在剪枝的时候,叶子节点的加权误差与父节点的误差进行比较,考虑损失矩阵的时候,从将“减少-误差”调整为“减少-损失”
rpart函数用来实现CART(分类回归树)
rpart包的rpart.control(minsplit, minbucket, maxdepth, cp,xval=10)函数:对树进行一些设置。 minsplit是最小分支节点数,这里指大于等于20,那么该节点会继续分划下去,否则停止;minbucket:叶子节点最小样本数;maxdepth:树的深度;cp全称为complexity parameter,指某个点的复杂度,对每一步拆分,模型的拟合优度必须提高的程度,将要被修剪的rpart复杂性参数;xval是10折交叉验证。
rpart.plot包的rpart.plot(x, type,extra, branch)函数:画出rpart(决策树)模型。x为rpart模型;extra在节点上显示额外的信息,不同的数字代表不同的类型(请参考帮助);branch控制分支线的形状,指定一个值在0(V形分支)和1(方形分支),默认情况下(fallen.leaves)为1否则为2;type为画图的类型,分为5种:
0默认。画一个分裂的标签,在叶子的每一个分裂标签和一个节点标签。
1标签所有节点,不只是树叶。
2像1,但绘制的标签下面的节点标签。
3为左、右方向画单独的拆分标签。
4像3,但标签的所有节点,不只是叶子节点,类似于文本。
rpart包的printcp(model)函数:显示优化剪枝后的复杂参数表格。x表示拟合的模型对象。
rpart包的prune(model, cp)函数:选择具有最小xerror的cp(复杂性参数)函数。tree为拟合的模型对象;cp全称为complexity parameter,指某个点的复杂度,对每一步拆分,模型的拟合优度必须提高的程度,将要被修剪的rpart复杂性参数。
2、C50包中的C5.0(x, y, trials=1, costs)函数:x要预测的数据框或矩阵;y为因子类型的预测分类;trials一个整数时为指定的迭代次数,一个值表示一个单一的模型;costs表示与可能出现的错误相关的成本矩阵。该矩阵应具有碳列和行,其中,C是类级别的数
predict()预测函数需要指定type="class"来分类
3、在R中我们使用rpart包中的rpart()函数实现树回归(CART)
使用tree包中的tree()函数实现CART算法
4、party包中的ctree(formula, data, controls)函数:决策树。formula为模型拟合公式;data为训练数据集;controls为树的控制条件,为ctree_control类。
party包中的ctree_control(minsplit,minbucket, maxsurrogate, maxdepth)函数:party包中决策树的控制条件。minsplit控制一个最小权重和的节点以便进行分割;minbusket设置了一个最小权重和的叶子节点;maxsurrogate表示替代分裂点的数量以便用于评估;maxdepth控制决策树的深度。其中,minsplit/minbusket可以设置为训练集的1/100,这些参数的值可以根据商业问题、领域专家的经验、数据、执行算法需要的合理时间以及 决策树的期望规模来设置。
六、随机森林
1、R语言中有两个软件包可以运行随机森林,分别是randomForest(Liaw,2012)和party
randomForest包中的randomForest(formula, data, ntree, nPerm, mtry, proximity,importace)函数:随机森林分类与回归。ntree表示生成决策树的数目(不应设置太小);nPerm表示计算importance时的重复次数,数量大于1给出了比较稳定的估计,但不是很有效(目前只实现了回归);mtry表示选择的分裂属性的个数;proximity表示是否生成邻近矩阵,为T表示生成邻近矩阵;importance表示输出分裂属性的重要性。
函数randomForest()中有两个非常重要的参数,而这两个参数又将影响模型的准确性,它们分别是mtry和ntree。一般对mtry的选择是逐一尝试,直到找到比较理想的值,ntree的选择可通过图形大致判断模型内误差稳定时的值。randomForest包无法处理包含缺失值或者拥有超过32个等级水平的分类变量。
randomForest包中的rfImpute(formula, data)函数:填补缺失值的预测数据使用接近于随机森林。
randomForest包中的varImpPlot(x)函数:变量重要性图,变量的重要性dotchart通过随机森林测量。x为randomForest模型对象。
importance()函数用于计算模型变量的重要性
MDSplot()函数用于实现随机森林的可视化
rfImpute()函数可为存在缺失值的数据集进行插补(随机森林法),得到最优的样本拟合值
treesize()函数用于计算随机森林中每棵树的节点个数
2、party包中的cforest(formula, data,controls)函数:随机森林模型。formula为建模公式;data为训练数据;controls为随机森林生长的参数。
party包中的cforest_unbiased(mtry,ntree)函数:随机森林生长的控制参数。mtry为随机森林算法随机 采样输入的变量数;ntry为随机森林的树数目。
七、支持向量机
1、e1071包中的svm()函数,如下:
svm(formula,data = NULL, …, subset,na.action =na.omit, scale = TRUE)
svm(x, y =NULL, scale = TRUE, type = NULL,kernel ="radial", degree = 3, gamma =if(is.vector(x)) 1 else 1 / ncol(x),coef0 = 0, cost = 1, nu = 0.5,class.weights= NULL, cachesize = 40,tolerance = 0.001, epsilon = 0.1,shrinking = TRUE, cross= 0, probability =FALSE, fitted = TRUE, seed = 1L,…, subset, na.action =na.omit)
主要参数说明:
Formula:分类模型形式,在第二个表达式中使用的的x,y可以理解为y~x。
Data:数据集
Subset:可以指定数据集的一部分作为训练集
Na.action:缺失值处理,默认为删除数据条目
Scale:将数据标准化,中心化,使其均值为0,方差为1.默认自动执行。
Type:SVM的形式,使用可参见上面的SVMformulation,type的选项有:C-classification,nu-classification,one-classification (for noveltydetection),eps-regression,nu-regression。后面两者为利用SVM做回归时用到的,这里暂不介绍。默认为C分类器,使用nu分类器会使决策边界更光滑一些,单一分类适用于所有的训练数据提取自同一个类里,然后SVM建立了一个分界线以分割该类在特征空间中所占区域和其它类在特征空间中所占区域。
Kernel:指的是支持向量机的类型。在非线性可分时,我们引入核函数来做非线性可分,R提供的核介绍如下:线性核linear:使用它的话就成为线性向量机,效果基本等价于Logistic回归。但它可以处理变量极多的情况,例如文本挖掘;多项式核(polynomial):n次多项式核函数,适用于图像处理问题。选择n的好方法是从1(一个线性模型)开始,然后递增至估计误差不再改进为止。通常,相当小的数目就足够了;高斯核(radial):高斯核函数,最流行易用的选择。参数包括了sigma,其值若设置过小,会有过度拟合出现;Sigmoid核(sigmoid):反曲核函数,多用于神经网络的激活函数,默认为高斯核(RBF);
在kernlab包中,可以自定义核函数,实践中,核函数的选择一般并不导致结果准确率的很大差别(也有特例!)。
Degree:多项式核的次数,默认为3
Gamma:除去线性核外,其他的核的参数,默认为1/数据维数
Coef0,:多项式核与sigmoid核的参数,默认为0
Cost:C分类的惩罚项C的取值,是违反约束时的成本函数。
Nu:nu分类,单一分类中nu的取值
Cross:做K折交叉验证,计算分类正确性。
class.weights用来指定各类别的权重(可用在各类数目不相同时)。
probability:是否允许概率预测。
e1071包中的tune(method,train.x, train.y, kernel, ranges)函数:使用网格搜索的参数调整。method为需要调整的函数;train.x/train.y预测的自变量和因变量(可以用formula代替);kernel为模型使用的核函数;ranges为采样空间的参数向量。
e1071包中的tune.svm(formula, data, gamma, cost)函数:调整函数。
fitted(object, …)返回模型在训练集上的预测值。
predict (object, …)返回模型的预测结果。当x是训练集时,pred <- predict(model, x)相当于pred <- fitted(model) predict函数分类需要指定type="class"
klaR包的svmlight()函数也可以实现SVM(支持向量机)算法。
2、kernlab包中的ksvm(formula, data, kernal, type, kpar, C, prob.model)函数:支持向量机模型。C约束违约成本(默认值:1)这是'C'的正规化长期在拉格朗日公式;kernel用于训练和预测的核心功能。这个参数可以被设置为任何函数,类的内核参数,它计算的内部产品在特征空间中的向量参数。kernlab提供最流行的核心功能,可以通过设置内核参数的字符串:
rbfdot径向基核“高斯”
polydot多项式核函数
vanilladot线性核
tanhdot双曲正切核
laplacedot拉普拉斯核
besseldot贝塞尔核
anovadot ANOVA RBF核函数
splinedot样条核
type表示是用于分类还是回归,还是检测,取决于y是否是一个因子。缺省取C-svc或eps-svr。可取值有
• C-svc C classification
• nu-svc nu classification
• C-bsvc bound-constraint svm classification
• spoc-svc Crammer, Singer native multi-class
• kbb-svc Weston, Watkins native multi-class
• one-svc novelty detection
• eps-svr epsilon regression
• nu-svr nu regression
• eps-bsvrbound-constraint svm regression
kpar超参数(核参数)的列表。这是一个列表,其中包含了用于内核函数的参数。对于现有内核的有效参数:
sigma inverse kernelwidth for the Radial Basis kernel function "rbfdot" and the Laplaciankernel "laplacedot".
degree, scale,offset for the Polynomial kernel "polydot"
scale, offset forthe Hyperbolic tangent kernel function "tanhdot"
sigma, order, degreefor the Bessel kernel "besseldot".
sigma, degree forthe ANOVA kernel "anovadot".
length, lambda,normalized for the "stringdot" kernel where length is the length ofthe strings considered, lambda the decay factor and normalized a logicalparameter determining if the kernel evaluations should be normalize
prob.model如果设置为true,建立一个模型类的概率或在回归计算,计算拟合残差的拉普拉斯分布的尺度参数。对输出数据进行拟合,对训练数据进行交叉验证了3倍。默认为F。
二分类问题:
> x <-rbind(matrix(rnorm(120), ,2), matrix(rnorm(120, mean=3), , 2))
> y <-matrix(c(rep(1,60), rep(-1, 60)))
> svp <-ksvm(x, y, type="C-svc", kernel="rbfdot",kpar=list(sigma=2))
> plot(svp)
八、神经网络:
1、nnet包中的class.ind(cl)函数:从一个因子生成类指标矩阵。cl为类的因子或向量。返回值为:除了与类对应的列外,该矩阵为0。生成类别的示性函数
nnet包中的nnet(x,y, size, rang, decay, maxit, skip, Hess, trace)函数:单层的前向神经网络模型。size神经网络隐藏层的神经元个数;rang初始随机权值[-rang,rang];decay经元输入权重的一个修改偏正参数,表明权值是递减的(可以防止过拟合);maxit最大反馈迭代次数;skip是否允许跳过隐藏层;Hess是否输出Hessian值;trace指出是否要最优化。
适用于神经网络的方法有predict,print和summary等,nnetHess函数用来计算在考虑了权重参数下的Hessian矩阵,并且检验是否是局部最小。
2、AMORE包中的newff(n.neurons, learning.rate.global, momentum.global, error.criterium, Stao, hidden.layer, output.layer, method)函数:创建多层前馈神经网络。n.neurons是个数值向量,包含在每个层的神经元的数目,第一个数是输入神经元的数量,最后是输出神经元的数量,其余的都是隐藏层神经元的数量;learning.rate.global全局的学习率;momentum.global全局的动量值(有的学习算法需要设置这个值貌似是步长);error.criterium误差衡量算法,我用误差平方和,所以选“LMS”,“LMLS”为对数平方差,“TAO”为TAO Error;hidden.layer隐藏层激活函数;output.layer输出层激活函数;method学习方法,翻译过来都是梯度下降,不是BP最速下降;Stao 为Taobao错误判断标准。
AMORE包中的train(net,P, T, error.criterium, report, show.step, n.shows)函数:神经网络训练函数。对于一个给定的数据集(训练集),此功能修改的神经网络的权重和偏差的近似的训练集中存在的变量之间的关系。这些可以满足一些需要,即拟合非线性函数。
其中,net为神经网络训练;P为输入的训练集;T为输出的训练集;error.criterium为衡量拟合优度的标准(LMS、LMLS、TAO);report表示训练函数是否保持安静(或应在训练过程中提供图形/文字信息);show.step直到训练函数给出结果的最大值;n.shows报告训练的次数。
AMORE包的sim(net,P)函数:计算给定数据集神经网络的输出值。net模拟神经网络;P输入数据集。
3、neuralnet包中的neuralnet(formula, data,hidden)函数:神经网络训练函数。hidden一个向量的整数,指定在每一层中的隐层神经元(顶点)的数目。hidden=c(3)表示第一个隐藏层的3个隐藏单元;hidden=c(3, 2)分别表示第一、第二隐藏层的3个和2个隐藏单元。
neuralnet包中的compute(x, covariate):神经网络计算一个给定的变量向量。x为NN的模型;covariate用来训练神经网络的数据框或矩阵。相当于predict函数(neuralnet中无predict函数)
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!