kNN(k-Nearest Neighbors,k近邻)

  • 规律:计算距离,找到测试数据的k个近邻,根据k个近邻的分类预测测试数据的归类
  • 下k近邻需要用逐条特征转换为一个业内的限制(归一化处理),可以利用min-max标准化(所有值落在0~1范围,新数据=(原数-最小值)/(最老价值-最小值)),也得以用z-score
    标准化(新数据=(原数-均值)/标准差)。
  • 对此名义变量(表示项目),可以进行哑变量编码,其中1代表一个型,0代表其余门类,对于n个类别的名义变量,可以就此n-1个特征进行哑变量编码,比如(高,中,低),可以用大、中点滴近乎的哑变量表示马上三接近(高:1凡是,0
    其它,中:1凡,0,其它)
  • 优点:简单且使得,对数据分布没有要求,训练等很快;
  • 缺点:不起模型,在意识特征之间的关联达成的力有限,分类等大缓慢,需要大量的内存,名义变量和不够数据要格外处理
  • R代码:
    使用class包的knn函数,对于测试数据中之诸一个实例,该函数使用欧氏距离标识k个近邻,然后选出k个近邻中大部分所属的挺看似,如果票数相等,测试实例会为擅自分配。
       dt_pred <- knn(train = dt_train,test = dt_test,class =
    dt_train_labels,k = 3)
    #train:一个涵盖数值型训练多少的数据库;test:一个包含数值型测试数据的数据框;class训练多少列一行分类的一个因子变量;k:标识最近邻数据的一个平头(通常取实例数的平方根);
    该函数返回一个向量,该向量含有测试数据框中各一行的展望分类
      尽管kNN是连不曾进行其他学习之简约算法,但是可能处理及其复杂的任务,比如识别肿瘤细胞的肿块。
  • 对R自带iris数据用kNN进行训练、预测并与实际结果对比

llibrary(class)
library(gmodels)

#prepare data
set.seed(12345) #set random seed in order to repeat the result
iris_rand <- iris[order(runif(150)),]
iris_z <- as.data.frame(scale(iris_rand[,-5])) #z score normalize
train <- iris_z[1:105,]
test <- iris_z[106:150,]
train.label <- iris_rand[1:105,5]
test.label <- iris_rand[106:150,5]

#kNN
pred <- knn(train,test,train.label,k=10)

#comfusion matrix 
CrossTable(pred,test.label,prop.r = F,prop.t = F,prop.chisq = F)

统计 1
  这个结果显示kNN对测试数据全展望是

图直方图表示

上一致步训练取得的字典,是以这同样步对图像特点进行量化。对于同一幅图像而言,我们好提出大方之「SIFT」特征点,但这些特征点仍然属于同一栽浅层(low
level)的表述,缺乏代表性。因此,这同步之目标,是基于字典重新取图像的高层特征。

具体做法是,对于图像遭到之各级一个「SIFT」特征,都可以在字典中找到一个最为相似之
visual word,这样,我们可统计一个 k
维的直方图,代表该图像的「SIFT」特征于字典中的相似度频率。

统计 2

比如说:对于达图立即辆车之图纸,我们配合图片的「SIFT」向量与字典中之 visual
word,统计出极相似的向量出现的次数,最后得这幅图片的直方图向量。

凭监督上算法

用来模式识别(数据里关系的紧密性):关联规则
用以聚类:k均值聚类

教练分类器

当我们赢得各级幅图片的直方图向量后,剩下的立同一步跟往的步调是同等的。无非是冲数据库图片的向量以及图片的竹签,训练分类器模型。然后针对用预测的图形,我们依然比照上述办法,提取「SIFT」特征,再因字典量化直方图向量,用分类器模型对直方图向量进行分类。

R语言机器上算法实现

相似性度量方法

前方对 TF-IDF
的牵线,我们沾一个对立完善的向量表示方法。最后,再略提一下哪根据这向量确定图片中的相似度。

至于向量相似度测量的章程发生不少,最普遍的凡算向量之间的欧几里得距离要曼哈顿相差等。但每当图像检索中,我们采用向量之间的夹角作为相似性度量方法。因为我们获取的向量是各个
visual word 综合作用的结果,对于同样类图片,它们或给几个一律之 visual
word
的震慑比充分,这样它的特征向量大体上都见面对一个倾向。而夹角越小的,证明向量之间应该越来越相似。

测算向量夹角的法门非常简单,可以一直动用余弦定理:
\[ s(\mathbf h, \overline{ \mathbf h})
=\frac{ <\mathbf h, \overline{\mathbf h}> }{ ||\mathbf h||\
||\overline{\mathbf h}||} \]
等式右边,分子表示向量内积,分母是望量模的乘积。

鉴于向量中之各级一个变量都是正数,因此余弦值的取值在 0 和 1
之间。如果余弦值为 0,证明向量夹角为 90
度,则立刻半个向量的相关性很没有,图片中心无一般。如果余弦值靠近
1,证明两只向量的夹角靠近 0 度,则少独向量的相关性很高,图片很相像。

重复多关于向量相似性度量的方,请参见其他文章。吴军先生的《数学的美》中吗出越详实的牵线。

回归树和模型树
  • 表决树用于数值预测分为两类,第一类称为回归树,第二好像称为模型树。
  • 回归树作为分类回归树的平部分引入,回归树并不曾下线性回归之主意,而是基于到达节点的案例之平均值进行前瞻。
  • 范树,比回归树后几年引入,但是或许功能更是强有力。模型树及回归树因大致相同的艺术生长,但是当每个叶节点,根据达该节点的案例建立多元线性回归模型。根据叶节点的多少,一棵模型树可能会见成立几十独甚至几百独这么的范,这可能会见使模型树更加不便理解,但利益是她或会成立一个尤为可靠的型。
  • 可取:将决策树的助益和数值型数据建立模型的能力相结合;能自行选择特征,允许该办法和大气特性并行使;不需使用者事先指定模型;拟合某些项目的数目或者会见比线性回归好得几近;不求用统计的知识来解释模型。
  • 短:不像线性回归那样时常因此;需要大量的训多少;难以确定单个特征对结果的完好均影响;可能比较回归模型更麻烦讲。
  • 原理:用于数值预测的决策树的建立章程和用于分类的决策树的成立艺术大致相同。从根节点开始,按照特征使用分而治之的国策对数据开展划分,在进行同样坏私分后,将见面招致数据最大化的皆匀增长。而当分拣核定树中,一致性(均匀性)是由熵值来度量的,而对于数值型的数量是无定义之,对于数值型决策树,一致性可以经过统计量(比如方差、标准差或者平均绝对不是)来度量。不同之仲裁树生算法,一致性度量可能会见迥然不同,但原理是基本相同的。
  • 同一种植普遍的剪切标准是正式不是减少,就是原始值的业内各异减去分割后非同类的多少加权后底正式不一,这里的加权就是此类的数据比达到总的数量。决策树已生长后,假如一个案例以特征B进行分,落入某平等组B1面临,那么该案例之预测值将取B1组的平均值。模型树要多移动相同步,使用落入B1组的教练案例和落入B2组的训练案例,建立一个对立于任何特征(特征A)的线性回归模型。
  • R代码:
      于R包rpart(递归划分)中提供了像CART(分类回归树)团队受到所讲述的无限可靠的回归树的兑现,
      m.rpart <- rpart(dv ~ iv, data = mydata) #dv 是mydata
    数据框中需要建模的以变量;iv
    为一个R公式,用来指定mydata数据框中之自变量;data:为涵盖变量dv和变量iv的数据框
      p <- predict(m,test,type=c(“vector”, “prob”, “class”,
    “matrix”))
    #m是有函数rpart训练的一个模;test一个暗含测试数据的数据框,该数据框和用来建立模型的数量有同样之特点;type:给定返回的预测值的品类,prob返回预测的票房价值。matrix返回矩阵的款式包括各类的几率。class返回树的分类。否则回一个向量的结果。
      可以动用R包rpart.plot中rpart.plot函数对回归树结出可视化。
      时型树被极先进的算法是M5’算法,可以通过R包Rweka中M5P函数实现;
      m <- M5P(dv ~ iv, data = mydata) #dv 是mydata
    数据框中需要建模的因变量;iv
    为一个R公式,用来指定mydata数据框中的自变量;data:为带有变量dv和变量iv的数据框
      p <- predict(m,test)
    #m是有函数rpart训练之一个模;test一个暗含测试数据的数据框,该数据框和用来树立模型的数额有同等的性状

library(rpart)
library(RWeka)
library(rpart.plot)

#dummy variable encoding
iris$issetosa <- ifelse(iris$Species=="setosa",1,0)
iris$isversicolor <- ifelse(iris$Species=="versicolor",1,0)

#divided into training sets and test sets
set.seed(12345) #set random seed in order to repeat the result
iris_rand <- iris[order(runif(150)),]
train_dt <- iris_rand[1:105,-5]
test <- iris_rand[106:150,-c(4,5)]
test_value  <- iris_rand[106:150,4]

#rpart
m.rpart <- rpart(Petal.Width ~ Sepal.Length+Sepal.Width+Petal.Length+issetosa+isversicolor,data = train_dt)
summary(m.rpart)
rpart.plot(m.rpart)
pred <- predict(m.rpart,test)
cor(test_value,pred)
mean(abs(pred - test_value)) #rpart MAE
mean(abs(mean(train_dt$Petal.Width) -  test_value)) #mean MAE

#M5P
m.M5P <- M5P(Petal.Width ~ Sepal.Length+Sepal.Width+Petal.Length+issetosa+isversicolor,data = train_dt)
summary(m.M5P)
pred <- predict(m.M5P,test)
cor(test_value,pred)
mean(abs(pred - test_value)) #rpart MAE
mean(abs(mean(train_dt$Petal.Width) -  test_value)) #mean MAE

扭动归树的结果如下
统计 3
rpart.plot结果
统计 4

  相关性到达0.9797762,回归树(MAF0.1242998)明显比直接用都值预测(MAF0.7255238)更接近受真实的Petal.Width
模型树的结果如下
统计 5

  相关系数到达0.9714331,MAF0.1410668,在斯模型树中,只出一个根节点,相应建立了一个线性模型,直接用Sepal.Length
,Sepal.Width
,Petal.Length三个特点进行预测,和lasso回归模型一样,特征前面的系数表示该特征对Petal.Width的幽静影响,注意,这里的咸影响是依赖以目前节点是线性模型中的通通影响,在这线性模型中,每增加一些Sepal.Width和Petal.Length,Petal.Width都见面增加,而系数小于0的Sepal.Length
,意味着每增加一些Sepal.Length,Petal.Width就见面打折扣。从结果好看出,在这案例被,模型树没回归树的效益好。
  此处模型树于未曾转变多单培养节点的情形下,只是对特色做了线性回归,MAF达到0.1410668,和前面对数码作线性回归之lasso模型结果(MAF0.1981803)相比,貌似做的再度好,但其实之前的lasso回归模型我们限制了特点值个数来避免过拟合,如果多特征值数量以及调整labda参数,一样可以达标比较粗的MAF。

参考

  • Bag-of-words model in computer
    vision
  • Bag of Features
    (BOF)图像检索算法
  • 数学的美

参考资料

Brett Lantz:机器上和R语言
薛毅,陈立萍: 统计建模与R软件(下册)
侯澄钧:热门数码挖掘模型应用入门(一): LASSO :
https://cosx.org/2016/10/data-mining-1-lasso
slade_sha的博客 Lasso算法理论介绍
:http://blog.csdn.net/slade_sha/article/details/53164905

Bag of Feature 的缺点

并未呀方法会是十清一色十抖的,Bag of Feature
也存在一个显著的欠缺,那就是其完全无设想到特征之间的职位关系,而位置信息对人口明白图片来说,作用是大醒目的。有成千上万专家为提出了针对该缺点之精益求精,关于改善之主意,这里虽不再介绍了。

线性回归

  回归第一关心一个唯一的盖变量(需要预测的价值)和一个要多单数值型自变量之间的关联。

  • 假若光生一个自变量,称为一元线性回归或者简单线性回归,否则,称为多元回归。
  • 原理:对线性参数的估算下最小二趁估计
  • 广义线性回归:它们对准线性模型进行了少于者的扩:通过设定一个一连函数,将响应变量的巴与线性变量相挂钩,以及针对性误差的遍布为出一个误差函数。这些推广允许多线性的计能被用来一般的问题。比如逻辑回归好为此来针对第二初次分类的结果建模;而泊松回归好本着整型的计数数据进行建模。
  • 长:迄今为止,它是数值型数据建模最常用之办法;可适用于几有的数额;提供了特点(变量)之间涉及的强度和大小的估量
  • 缺陷:对数据作出了那个强的如;该型的样式要由使用者事先指定;不可知非常好地拍卖缺失数据;只能处理数值特征,所以分类数据要格外的拍卖;需要一些统计学知识来掌握模型。
  • LASSO回归算法:LASSO回归的表征是在拟合广义线性模型的同时开展变量筛选(只挑对为变量有肯定影响之自变量)和复杂度调整(通过参数控制模型复杂度,避免过度拟合)。它经过办最可怜似然来拟合广义线性模型,正则化路径是通过正则化参数lambda的值的网格上计算lasso或者弹性网络惩戒,lambda越充分对变量较多之线性模型的惩罚力度就更为怪,从而最终获得一个变量较少之范。
  • R代码:
    使R包glmnet中glmnet()函数拟合LASSO回归模型
      glmnet(x, y,
    family=c(“gaussian”,”binomial”,”poisson”,”multinomial”,”cox”,”mgaussian”),
        weights, offset=NULL, alpha = 1, nlambda = 100,
         lambda.min.ratio = ifelse(nobs<nvars,0.01,0.0001),
    lambda=NULL,
         standardize = TRUE, intercept=TRUE, thresh = 1e-07, dfmax =
    nvars + 1,
         pmax = min(dfmax * 2+20, nvars), exclude, penalty.factor =
    rep(1, nvars),
        lower.limits=-Inf, upper.limits=Inf, maxit=100000,
        type.gaussian=ifelse(nvars<500,”covariance”,”naive”),
         type.logistic=c(“Newton”,”modified.Newton”),
         standardize.response=FALSE,
    type.multinomial=c(“ungrouped”,”grouped”))

  x:
输入矩阵,每列表示变量(特征),每行表示一个察向量,也支持输入稀疏矩阵(Matrix中之稀疏矩阵类);
  y:
反应变量,对于gaussian或者poisson分布族,是呼应的量;对于binomial分布族,要求是片品位的因数,或者少排列的矩阵,第一排是计数或者是比例,第二列是目标向分类;对于因子来说,最后之档次是依照字母表排序的分类;对于multinomial分布族,能闹超两水平的因数。无论binomial或者是multinomial,如果y是向量的话,会强制转化为因子。对于cox分布族,y要求凡有限列,分别是time和status,后者是次上前制变两,1意味死亡,0表示截尾,survival包带的Surv()函数可以生出这样的矩阵。对于mgaussian分布族,y是量化的反应变量的矩阵;
  family:
反应类型,参数family规定了回归模型的种类:family=”gaussian”适用于一维接连为变量(univariate)family=”mgaussian”,适用于多维连续以变量(multivariate),family=”poisson”适用于非负次数以变量(count),family=”binomial”适用于次处女离散因变量(binary),family=”multinomial”适用于多元离散因变量(category)
  weights:
权重,观察的权重。如果反应变量是比例矩阵的话,权重是总计数;默认每个观察权重且是1;
  offset:
包含在线性预测中之跟观赛向量同样长度的通向量,在poisson分布族中运用(比如log后底展露时间),或者是于早已拟合的型的还定义(将原来模型的因变量作为向量放入offset中)。默认是NULL,如果提供了价值,该值也得提供于predict函数;
  alpha: 弹性网络混合参数,0 <= a
<=1,惩罚定义为(1-α)/2||β||_2^2+α||β||_1.其中alpha等于1是lasso惩罚,alpha等于0是ridge(岭回归)的惩罚;
  nlambda:lambda值个数;拟合出n个系数不同之范
  lambda.min.ratio:lambda的极致小价,lambda.max的百分比形式,比如整个系数都是0的时节的顶小价。默认值依赖让观察的个数与特色的个数,如果观察个数大于特征个数,默认值是0.0001,接近0,如果观察个数小于特征个数,默认值是0.01。在观察值个数小于特征个数的情事下,非常小之lambda.min.ratio会导致了拟合,在binominal和multinomial分布族性,这个价未定义,如果讲变异百分比总是1的话程序会自动退;
  lambda:用户提供的lambda序列。一个名列前茅的用法基于nlambada和lambda.min.ratio来计算自己lambda序列。如果提供lambda序列,提供的lambda序列会覆盖是。需小心运用,不要提供单个值为lambda(对于CV步骤后底前瞻,应运用predict()函数替代)。glmnet依赖让缓慢开始,并且她用来拟合全路线比计算单个拟合更快;
  standardize:对于x变量是否规范的逻辑标志,倾向被拟合模型序列。
系数总是以老规模返回,默认standardize=TRUE。如果变量已经是一样单位,你恐怕并无克博得想使的原则结果。
  intercept:是否拟合截距,默认TRUE,或者安装为0(FALSE)
  thresh:坐标下降的毁灭域值,每个内部坐标下降一直进展巡回,直到系数更新后的绝深转移值比thresh值乘以默认变异要稍,默认thresh为1E-7;
  dfmax:在模型中的极度要命变量数,对于大气之变量数的模子但我们仅需要有的变量时得打及意向;
  pmax:限制非零变量的无限酷数量;
  exclude:要从模型中清除的变量的目,等同于一个极端的办因子;
  penalty.factor:惩罚因子,分开的惩治因子能够利用至各国一个系数。这是一个数字,乘以lambda来允许不同之抽。对于部分变量来说可以是0,意味着无论收缩,默认对全变量是1,对于列在exlude里面的变量是极其好。注意:惩罚因子是中间针对nvars(n个变量)的与进行重新调整,并且lambda序列将会见影响是改变;
  lower.limits:对于每个系数的再度没有限制的通向量,默认是无穷小。向量的每个值须非正值。也得坐单个值呈现(将见面再也),或者是(nvars长度);
  upper.limit:对于每个系数的再胜似克的于量,默认是无穷大;
  maxit:所有lambda值的数量最特别传递数;
  type.gaussian:支持高斯分布族的星星点点种算法类型,默认nvar <
500用”covariance“,并且保留所有中计算的结果。这种方法比”naive”快,”naive”通过对nobs(n个观察)进行巡回,每次内部计算一个结果,对于nvar
>> nobs或者nvar > 500之情景下,后者往往还快捷;
  type.logistic:如果是”Newton“,会使规范之hessian矩阵(默认),当用的是”modified.Newton“时,只使用hession矩阵的上界,会重复快;
  standardize.response:这个参数时对于”mgaussian“分布族来说的,允许用户标准化应答变量;
  type.multinomial:如果是”grouped”,在多项式系数的变量使用分布lasso惩罚,这样能管它统统在同,默认是”ungrouped”。

glmnet返回S3类,”glmnet”,”*”,”*”可以是elnet,lognet,multnet,fishnet(poisson),merlnet
  call:产生这目标的调用;
  a0:截距;
  beta:对于elnet, lognet,
fishnet和coxnet模型,返回稀疏矩阵格式的系数矩阵(CsparseMatrix),对于multnet和mgaussian模型,返回列表,包括各国一样像样的矩阵;
  lambda:使用的lambda值的其实序列;当alpha=0时,最深之lambda值并无单独等于0系数(原则达成labda等于无穷大),相反以alpha=0.01的lambda,由此导出lambda值;
  dev.ratio:表示是因为模型解释的朝三暮四的百分比(对于elnet,使用R-sqare)。如果在权重,变异计算会加入权重,变异定义为2x(loglike_sat-loglike),loglike_sat是饱和模型(每个观察值具有自由参数的模子)的log似然。因此dev.ratio=1-dev/nulldev;越接近1说明模型的呈现越来越好
  nulldev:NULL变异(每个观察值),这个定义为2*(loglike_sat-loglike(Null));NULL模型是依靠截距模型,除了Cox(0
模型);
  df:对于每个lambda的非零系数的多少。对于multnet这是对部分看似的变量数目;
  dfmat:仅适用于multnet和mrelnet。一个包各国一样近乎的非零向量数目的矩阵;
  dim:系数矩阵的维度;
  nobs:观察的数码;
  npasses:全部lambda值加和的数额的到底的通量;
  offset:逻辑变量,显示模型中是否含有偏移;
  jerr:错误标记,用来警戒及报错(很大部分用以中调整试验)
  而直接显示的结果发生三列,分别是df,%Dev
(就是dev.ratio),lambda是每个模型对应的λ值

predict(object,newx,s=NULL,type=c(“link”,”reponse”,”coefficients”,”nonzero”,”class”),exact=FALSE,offset,…)
  coef(object,s=NULL,exact=FALSE)
  object:glmnet返回的目标;
  newx:用来预测的矩阵,也堪是系数矩阵;这个参数不可知用来type=c(“”coefficents”,”nonzero”);
  s:惩罚参数lambda的价,默认是故来创造模型的布满lambda值;
  type:预测值的花色;”link”类型为”binomial”,“multinomial”,”poisson”或者”cov”模型线性预测的值,对于”gaussian”模型给起草合值。”response”类型,对于”binominal“和”multinomial”给拟合的票房价值,对于”poisson“,给拟合的均值,对于”cox”,给拟合的对立不跟;对于”gaussion”,response等同于”link“类型。”coefficients”类型对急需的s值计算系数。注意,对于”binomial”模型来说,结果单对因子对的第二单水平的接近归。“class”类型仅仅使用被”binomial”和”multinomial“模型,返回最酷可能的归类标签。”nonzero”类型对每个s中的价值返回一个列表,其中蕴涵非0参数的目;
  exact:这个参数就对用于预测的s(lambda)值不同让老模型的拟合的价经常,这个参数起及意向。如果exact=FALSE(默认),预测函数使用线性解释来针对被的s(lambda)值进行展望。这时一个不行类似的结果,只是微微有接触粗糙。如果exact=TRUE,这些不同之s值和拟合对象的lambda值进行sorted和merged,在作出预测之前开展模型的双重拟合。在这种气象下,强烈建议提供原始之数据x=和y=作为额外的命名参数为perdict()或者coef(),predict.glmnet()需要升级型,并且要用于创造接近其的数码。尽管未提供这些额外的参数它呢会见运行的坏好,在调用函数中以嵌套序列非常可能会见半途而废。
  offset:如果下offset参数来拟合,必须提供一个offset参数来发预计。除了项目”coefficients”或者”nonzero“
  …:可以供参数其它参数的体制,比如x=when exact=TRUE,seeexact参数。

library(glmnet )
library(psych)

#dummy variable encoding
iris$issetosa <- ifelse(iris$Species=="setosa",1,0)
iris$isversicolor <- ifelse(iris$Species=="versicolor",1,0)
iris_dt <- iris[,-5]
pairs.panels(iris_dt) #scatterplot matrix

统计 6

  pairs.panel画起散点图矩阵,对角线上方显示的凡变量之间的相关系数,每个散点图备受上椭圆形的对象称为相关椭圆,它提供平等种变量之间是哪密切相关的可视化信息。位于椭圆中间的的接触表示x轴变量和y轴变量的均值所规定的触及。两个变量之间的相关性由椭圆的形状表示,椭圆越让拉伸,其相关性就更加强。散点图中绘制的曲线称为局部回归平滑,它意味着x轴和y轴变量之间的相似涉及。iris数据画生底散点图矩阵中之相关系数和散点图曲线都可见Petal.Length和Petal.Width有着高的相关性,而从散点图曲线也可观望,似乎Sepal.Length超出一定阈值后,Sepal.Length增加,Petal.Length也多,并且也同档次是setosa或者versicolor也有涉及。以Petal.Width作为以变量作线性回归。

library(glmnet )

#dummy variable encoding
iris$issetosa <- ifelse(iris$Species=="setosa",1,0)
iris$isversicolor <- ifelse(iris$Species=="versicolor",1,0)

#divided into training sets and test sets
set.seed(12345) #set random seed in order to repeat the result
iris_rand <- iris[order(runif(150)),]
train <- iris_rand[1:105,-c(4,5)]
test <- iris_rand[106:150,-c(4,5)]
train_value  <- iris_rand[1:105,4]
test_value  <- iris_rand[106:150,4]

#lasso
m_lasso <- glmnet(as.matrix(train),train_value,family = "gaussian")

plot(data.frame(df=m_lasso$df,dev.ratio=m_lasso$dev.ratio),type="b",cex=0.6)
coef(m_lasso, s=0.0497000)  #min df

统计 7

统计 8

翻变量个数与范解释变异百分比的点图,发现于df=1时就初步和,已经得以说明93%底变异。因此取df=1的可说最老形成的lambda,0.0452800,查看系数发现以了简单单特征,其中一个系数大小,并无是我们用的,因此lambda改吧第二个讲最要命形成的lambda,0.0497000.
于是coef取出参数如下
lambda=0.0452800
统计 9

lambda=0.0497000
统计 10
之所以选出的lambda值进行前瞻

pred <- predict(m_lasso,newx=as.matrix(test),s=0.0497000)
summary(pred)
summary(test_value)
cor(test_value,pred)
MAE <- mean(abs(pred - test_value))
mean(abs(mean(train_value) - test_value))

发现预测值和真实值范围大相近
统计 11
相关系数高
统计 12

MAE(平均绝对误差,反映预测值和真实值的差别)仅为0.1981803,如果只是以训练集的均值预测的话,MAE高及0.6551746)
统计 13

综上所述上述之心地标准,说明我们的型预测的正确性。

Bag of Words 模型

假定了解「Bag of Feature」,首先要了解「Bag of Words」。

「Bag of Words」
是文件分类中平等种植通俗易懂的方针。一般来讲,如果我们若询问一截文本的重要性内容,最行之有效之策略是抓取文本中的严重性词,根据重大词起的效率确定这段文本的核心思想。比如:如果相同尽管新闻中经常出现「iraq」、「terrorists」,那么,我们可以当当下虽然新闻应该跟伊拉克之恐怖主义有关。而一旦相同虽新闻备受起于多之首要词是「soviet」、「cuba」,我们还要足以猜这虽新闻是关于冷战的(见下图)。

统计 14

此间所说的重点词,就是「Bag of words」中的 words
,它们是区分度较高之单词。根据这些 words
,我们得高速地识别出文章的始末,并飞速地指向文章进行分拣。

「Bag of
Feature」
否是以史为鉴了这种思路,只不过在图像遭到,我们抽出的不再是一个个「word」,而是图像的主要特性「Feature」,所以研究人员将它们改名为「Bag
of Feature」。

机器上一般步骤

  • 募集数据,将数据转发为符分析的电子数码
  • 追究和准备数据,机器上着有的是光阴花在数量探索受到,它如果读书又多之数码信息,识别它们的一线区别
  • 因数据训练模型,根据你一旦上啊的考虑,选择而只要采取的相同种植或多算法
  • 评说模型的特性,需要基于一定的查看标准
  • 精益求精模型的性能,有时候要动用还尖端的方式,有时候用转移模型

Bag of Feature 算法过程

「Bag of Feature」大概分为四步:

  1. 提图像特点;
  2. 针对特色进行聚类,得到同统字典( visual vocabulary );
  3. 据悉字典将图纸表示成向量(直方图);
  4. 教练分类器(这同一步严格来讲不属于「Bag of
    Feature」,但为了系统提一下分类流程,我以它富含进来)。

下,我们简要分析一下各个一样步之落实过程。

有监督上算法

用于分类:k近邻,朴素贝叶斯,决策树,规则学习,神经网络,支持为量机
用以数值预测:线性回归,回归树,模型树,神经网络,支持于量机

TF-IDF

本着 TF-IDF 的垂询,我参考了吴军的《数学的美》一挥毫。下面的解说,基本也是
copy 了书上的情。

TF-IDF
最早是在文献检索领域受到叫提出的,下面我们就算就此一个文本检索的例子来询问
TF-IDF。

而我们只要寻找有关「原子能的使用」的篇章,最简便易行的做法就是将查询分解为「原子能」、「的」、「应用」,然后统计每首稿子中就三独词出现的频率。比如,如果一致篇稿子的终究词数是
1000 ,其中「原子能」、「的」、「应用」分别出现了 2 次、35 次和 5
次,那么其的词频就各自是 0.002、0.035、0.005。将立即三只数相加,总与
0.042
就是该篇关于「原子能的使用」的「词频」。一般的话,词频越强,文章的相关性就更为强。TF-IDF
中之 TF 也即是词频(Term Frequency)的意思。

可是这种方式来一个肯定的尾巴,就是有的跟主题不系的乐章可能占较充分的百分比。比如上面例子中之「的」一词,占据了究竟词频的
80% 以上,而以此词对主题的物色几乎没图。这种词我们叫「停止词(Stop
Word)」,表明以量相关性时未考虑其的效率。忽略「的」之后,我们的词频变为
0.007,其中「原子能」贡献了 0.002,「应用」贡献了 0.007。

除了这之外,这个优化后底结果还存在任何一些供不应求。在华语中,「应用」是个坏通用的歌词,「原子能」是专业性很强的乐章,而后者对主题的物色比前者作用还老。

综上所述以上两点不足,我们要对各国一个歌词受一个权重。而且以此权重必须满足以下简单个条件:

  1. 一个歌词对主题预测能力进一步强,权重越怪;
  2. 停止词权重呢 0;

观一下咱们就见面发觉,如果一个重点词就以深少之稿子中冒出,通过它便爱锁定搜索目标,它的权重就应当再要命。反之,如果一个乐章在大气篇中多次出现,看到它们仍然不亮堂要物色什么内容,它的权重就相应有些。

连地开口,假得一个重中之重词 \(w\) 在
\(D_w\) 篇文章被冒出过,那么 \(D_w\) 越大,\(w\)
的权重越聊,反之亦然。在信息搜索中,使用最多的权重是「逆文本频率指数」,也就是
TF-IDF 中的 IDF(Inverse Document Frequency)。它的公式为 \(log(\frac{D}{D_w})\),其中,\(D\) 是全部稿子数。假定文章总数是 \(D=10\)
亿,停止词「的」在享有网页遭到都出现了,即 \(D_w=10\)亿,那么 它的 IDF = log(10亿 /
10亿) = log(1) = 0。假如「原子能」在 200万 篇稿子中冒出了,即 \(D_w=200\)万,那么其的 IDF = log(500) =
8.96。又使通用词「应用」出现于 5亿 篇稿子被,它的权重 IDF = log(2) =
1。

运 IDF,我们收获一个更为合理的相关性计算公式:
\[ TF_1 * IDF_1+TF_2 *
IDF_2+…+TF_N * IDF_N \]

单规则(1R)算法
  • ZeroR,一个规则学习算法,从字面上看无规则学习,对于一个无标记的案例,不用考虑她的特征值就会见拿它们预测为无限常见的接近
  • 单规则算法(1R或OneR)在ZeroR的功底及加加一个条条框框。像K近邻一样虽然简单,但是频繁表现的可比你预期的协调。
  • 长:可以生成一个十足的、易于掌握的、人类可读的涉法则(大拇指法则);表现往往特别之好;可以当作再复杂算法的一个条件;
  • 缺陷:只以了一个十足的特征;可能会见超负荷简短
  • R代码:
    应用R包RWeka中OneR()函数来实现1R算法
      m <- OneR(class ~ predictors,data = mydata)
    #class:是mydata数据框中需要预测的那么一列;predictors:为一个公式,用来指定mydata数据框中因故来进行预测的特点;data:为带有一个class和predictors所求的数码的数据框;该函数返回一个1R模型对象,该目标会用于预测
      p <- predict(m,test)
    #m:由函数OneR()训练的一个模型;test:一个含有测试数据的数据框,该数据框和用来创造分类器的教练多少有所相同之特色;该函数返回一个分包预测的门类的向量

library(RWeka)
library(gmodels)

set.seed(12345) #set random seed in order to repeat the result
iris_rand <- iris[order(runif(150)),]
train <- iris_rand[1:105,]
test <- iris_rand[106:150,-5]
test.label <- iris_rand[106:150,5]

m <- OneR(Species ~ .,data=train)
pred <- predict(m,test)
CrossTable(pred,test.label,prop.r = F,prop.t = F,prop.chisq = F)

翻看转的规则,按照Petal的幅度,分成三类,正确分类了105单里头的101单
统计 15
对测试数据的混合矩阵如下
统计 16
可见只下了一个条条框框也克,也落成了不错的职能

Bag of Feature 算法

起地方的讨论中,我们好窥见,「Bag of
Feature」的真面目是提出同样种图像的特性表示法

论「Bag of
Feature」算法的思量,首先我们要找到图像遭到的重要性词,而且这些重点词要持有比较高的区分度。实际过程遭到,通常会以「SIFT」特征。

发矣特征之后,我们会将这些特点通过聚类算法得出很多聚类中心。这些聚类中心日常拥有较高的代表性,比如,对于人脸来说,虽然不同人之眸子、鼻子等风味都不尽相同,但它往往有共性,而这些聚类中心便代表了即类似共性。我们将这些聚类中心组合在一起,形成一致管辖字典(CodeBook)

对于图像中的每个「SIFT」特征,我们会以字典中找到最相似的聚类中心,统计这些聚类中心涌出的次数,可以获得一个向量表示(有些文章称「直方图」),如本文开篇的图片所示。这些向量就是所谓的「Bag」。这样,对于不同档次的图,这个向量应该有比较生之区别度,基于此,我们得训练有有分拣型(SVM等),并为此那对图片进行分拣。

  机器上之研讨世界是说明计算机算法,把数据变化也智能行为。机器上和数据挖掘的别可能是机上侧重于行一个一度清楚之职责,而数发掘是在异常数目中找寻出价之物。

训练字典( visual vocabulary )

领取了特征后,我们见面使局部聚类算法对这些特征向量进行聚类。最常用的聚类算法是
k-means。至于 k-means 中的 k
如何赢得,要依据具体情况来确定。另外,由于特性的多寡或蛮庞大,这个聚类的历程也会见怪悠久。

统计 17

聚类完成后,我们就是获得了当下 k 个向量组成的字典,这 k
个为量来一个通用的发挥,叫 visual word

决策树

  • 原理:以树形结构建立模型。使用相同种植叫做递归划分的探索法。这种措施一般号称分而治之,因为其使特色的值将数据说明为有着相似类的可比小的子集。从象征全数据集的数结点开始,该算法选择最为能够预测目标类的性状,然后,这些案例用被划分到及时同一特性的非同值的组中,这等同决定形成了第一组树枝。该算法继续分而治之其他结点,每次挑最佳的候选特征,直到上停止的正统。如果一个节点停止,它可能拥有下列情形:节点上有着(几乎所有)的案例都属同一类,没有剩余的特性来划分辩案例之间的界别,决策树已经高达了事先定义的轻重缓急限制。
  • C5.0算法,时最好有名的裁决树算法之一,单线程版本的源代码是堂而皇之之,R中发生编制好的欠次。C5.0算法都化为转变决策树的行业标准,因为其适用于多数品类的题材,并且可一直运用。与其他先进的机上型(神经网络和支撑于量机)相比,一般呈现的几乎一模一样,并且更便于掌握与布局
  • 慎选最佳的剪切,需要树立分割的正统,有消息增益,基尼系数,卡方统计量,和增益比,C5.0算法使用信息增益
  • 修决策树:如果决策树增长了大,将会如决策过于具体,模型将会晤过度拟合训练多少,解决此问题的同样栽办法是如达一定数额之表决,或者决定节点才包含微量底案例,我们尽管停树之滋长,这叫做提前停止法,或者预剪枝决策树法。分为预剪枝(提前确定树的轻重缓急)和后剪枝(一旦培养生的了大,就根据节点处的错误率使用修剪准则将裁定树减少及再也确切的深浅,通常比预剪枝更使得)。
  • 自从适应加强算法:进行多软尝试,在裁定树中是白手起家多决策树,然后这些决策树通过投票表决的章程呢每个案例选择最佳的归类。
  • 长:一个适用于大部分问题的通用分类器;高度自动化的念过程,可以处理数值型数据、名义特征以及缺乏数据;只行使最要之性状;可以用来只有相对比较少教练案例的数目还是来一定多训练案例之数码;没有数学背景啊只是讲一个模子的结果(对于比较小的养);比其他复杂的范更使得
  • 症结:决策树模型在冲所有大量水准的特色进行分割时反复是生偏的;很爱过于拟合或者无克尽拟合模型;因为据让轴平行分割,所以在针对部分涉嫌成立模型时会见时有发生不便;训练多少遭到的小变化或者造成决策逻辑的于生之更动;大的表决树可能难以明白,给起底仲裁可能拘留起违反直觉。
  • R代码:
    使用R包C50的函数C5.0
      m <- C5.0(train,class,trials=1,costs=NULL)
    #train:一个含训练多少的数据框;class:包含训练多少列一行的归类的一个因子;trials:为一个不过卜数值,用于控制打适应加强循环的次数(默认值为1),一般用10,因为研究表明,这会退关于测试数据大约25%的概率;costs:为一个可选矩阵,用于给出同各种类型错误相呼应的本,和混淆矩阵稍微不同,行用来代表预测值,列用来表示实际值);函数返回一个C5.0模型对象,该目标会用于预测
      p <- predict(m,test,type=”class”)
    #m:有函数C5.0()训练的一个模型;test:一个暗含训练多少的数据框,该数据框和用来创造分类其的多寡框有同样的特色;type:取值为”class”或者”prob”,表识预测是绝可能的类别值或者是原之预计概率;该函数返回一个向量,根据参数type的取值,该向量含有预测的类别值或者原有预测的概率值

library(C50)
library(gmodels)

set.seed(12345) #set random seed in order to repeat the result
iris_rand <- iris[order(runif(150)),]
train <- iris_rand[1:105,-5]
test <- iris_rand[106:150,-5]
train.label <- iris_rand[1:105,5]
test.label <- iris_rand[106:150,5]

#C50
m <- C5.0(train,train.label,trials = 10)
pred <- predict(m,test,type="class") 

#comfusion matrix 
CrossTable(pred,test.label,prop.r = F,prop.t = F,prop.chisq = F)

统计 18

加权 BOF

TF-IDF
是由此加权重的道,凸显出重要的根本信息。同样的,在图像检索中,为了更精确地量相似性,我们为以原来直方图向量的根基及,为向量的诸一样起增加权重。

现实的,按照点信息搜索的办法,我们需要吃字典里的每个向量(visual
word)设置权重。权重的盘算办法要有一致主意:IDF = \(log(\frac{N}{f_j})\),其中,\(N\) 是图片总数,\(f_j\) 表示字典向量 j 在
多少张图纸及冒出了。仿照上面的事例,我们好这么懂:假设我们只要摸汽车图片,而汽车一般是位于地面上的,也就是说,在众好像图片中,地面对应的
visual word
应该会经常出现,而这种特征于咱们探寻汽车而言是不曾帮的,所以,用 IDF
公式,我们可以将此权重减多少到忽略不计的程度,这样就算管汽车本身的风味凸显出来。

而我们随前面 BOF 算法的长河已经获取一致布置图片的直方图于量 \(\mathbf h = {h_j} (j = 0, 1, …,
k)\),那么,加权 BOF 的计算公式为:\(h_j = (h_j / \sum_{i}{h_i})
log(\frac{N}{f_j})\)。公式右边后同样有些即是点所摆到之 IDF,而
\((h_j / \sum_{i}{h_i})\)
就是词频 TF。

省吃俭用贝叶斯分类

  • 规律:基于节约贝叶斯定理,根据先验概率计算预测实例的属不同类型的毕竟似然,再将有型的似然除以不同门类似然的及获得预测实例在某某项目的票房价值
  • 应用节省贝叶斯算法每个特征必须是分类变量,对于数值型变量,可以将数值型特征离散化(分段),可以依据直方图查看数据显然的分隔点,如果无强烈的分隔点,可以动用三细分位数,四分位数,五分位数,分段太少会把重点消息丢失
  • 拉普拉斯估价:对于某些从来不曾起的票房价值为0的,会影响概率的估量,拉普拉斯估价本质上是于概率表的每个计数加上一个较小之屡屡,这样保证各一样类似吃每个特征有的几率是未零底。
  • 可取:简单、快速、有效;能处理噪声数据和缺少数据;需要因此来训练之例子相对比较少,但一样会处理好大方底例证;很容易获取一个预测的估算概率值;
  • 症结:依赖让一个常用之左而,即同的重大与独立特征;应用在大气数值特征的数目集时连无可以;概率的估计值相对于预测的类而言更加不可靠。
  • R代码:
    行使维也纳理工大学统计有关出之e1071添加包中的naiveBayes
      m <- naiveBayes(train,class,laplace=0)
    #train:数据框或者隐含训练多少的矩阵,class:包含训练多少列一行的归类的一个因子向量,laplace:控制拉普拉斯估价的一个数值,可以开展调试看是否会增长型性能;该函数返回一个俭朴贝叶斯模型对象,该目标会用于预测
       p <- predict(m,test,type=”class”) #m:由函数naiveBays(
    )训练之一个型
    ,test:数据框或者隐含测试数据的矩阵,包含与用来树立分类器的训多少的同等特征;type:值也”class”或者”raw”,标识预测向量最可能的类别值或者原有预测的几率值

library(e1071)
library(gmodels)

set.seed(12345) #set random seed in order to repeat the result
iris_rand <- iris[order(runif(150)),]
train <- iris_rand[1:105,-5]
test <- iris_rand[106:150,-5]
train.label <- iris_rand[1:105,5]
test.label <- iris_rand[106:150,5]

#tranform numerical variable to classified variable
conver_counts <- function(x){
  q <- quantile(x)
  sect1 <- which(q[1] <= x & x<= q[2])
  sect2 <- which(q[2 ]< x & x <= q[3])
  sect3 <- which(q[3]< x & x <= q[4])
  sect4 <- which(q[4]< x & x <= q[5])
  x[sect1] <- 1
  x[sect2] <- 2
  x[sect3] <- 3
  x[sect4] <- 4
  return(x)
}
train <- apply(train,2,conver_counts)

#naiveBayes
m <- naiveBayes(train,train.label,laplace=1)
pred <- predict(m,test,type="class") 

#comfusion matrix 
CrossTable(pred,test.label,prop.r = F,prop.t = F,prop.chisq = F)

统计 19

足见对第一类似(setosa)分类及预计错误率很高,这也许体现了省吃俭用贝叶斯算法的欠缺,对于拍卖大量数值特征数据集时连无漂亮

Bag of Feature 是一律种图像特征提取方法,它借鉴了文件分类的思路(Bag of
Words),从图像抽象出许多享代表性的「关键词」,形成一个字典,再统计每张图被出现的「关键词」数量,得到图片的特征向量。

RIPPER算法

  对于复杂的职责,只考虑单个规则可能过于简单,考虑多只元素的复复杂的规则学习算法可能会见有因此,但也说不定就此会变换得越来越难理解。早期的规则学习算法速度缓慢,并且于噪声数据往往不纯粹,后来起增量减少误差修剪算法(IREP),使用了转复杂规则的预剪枝和晚剪枝方法的组合,并当案例从全体数目集分离之前开展修理。虽然当时提高了性能,但是还是决定树表现的再度好。直到1995年面世了重新增量修剪算法(RIPPER),它对IREP算法进行改善后再生成规则,它的特性及决策树相当,甚至逾越决策树。

  • 规律:可以笼统的晓为一个老三步过程:生长,修剪,优化。生长过程采用独立设看病之术,对规则贪婪地丰富条件,直到该规则能够全分开出一个多少子集或者没性能用于私分。与核定树类,信息增益准则而用来确定下一个私分的性能,当多一个特指的条条框框而熵值不再减少时,该规则需要就修剪。重复第一步和亚步,直到上一个住准则,然后,使用各种探索法对整个的平整进行优化。
  • 可取:生成易于了解的、人类可读之平整;对运据集和噪音数据中;通常较决策树起的模子更简便
  • 症结:可能会见促成违反常理或立即专家知识的规则;处理数值型数据或许无绝美好;性能有或未苟复杂的范
  • R代码:
    动R包RWeka中JRip()函数,是基于Java实现的RIPPER规则学习算法
      m<JRip(class ~ predictors,data = my data)
    #class:是mydata数据框中需要预测的那么一列;predictors:为一个R公式,用来指定mydata数据框中因故来拓展展望的风味;data:为涵盖class和predictors所求的数据的数据框;该函数返回一个RIPPER模型对象,该目标会用于预测。
      p <- predict(m , test)
    #m:由函数JRip()训练的一个模型;test:一个含测试数据的数据框,该数据框和用来创造分类器的训多少来同一的性状;该函数返回一个蕴含预测的类别值的向量。

library(RWeka)
library(gmodels)

set.seed(12345) #set random seed in order to repeat the result
iris_rand <- iris[order(runif(150)),]
train <- iris_rand[1:105,]
test <- iris_rand[106:150,-5]
test.label <- iris_rand[106:150,5]

m <- JRip(Species ~ .,data=train)
pred <- predict(m,test)
CrossTable(pred,test.label,prop.r = F,prop.t = F,prop.chisq = F)

统计 20
这次用了三独规则,(Petal.Width >= 1.8乎virginica ,Petal.Length
>= 3啊versicolor,其它为setosa
统计 21
可见虽然长了平整可连没增长型的属性

Bag of Feature 在检索中的用

「Bag of
Feature」虽然是对准图像分类提出的算法,但它同样可以据此到图像检索中。检索和分类本质上是同的,但每当细节及会见来不同,事实上,我更乐于将检索当成平种精细分类,即获得图片的大体分类后,再以斯分类中搜索有极端相似的图纸。

「Bag of
Feature」在摸索中之算法流程以及归类几乎完全一样,唯一的分别在,对于原之
BOF 特征,也就是直方图向量,我们引入 TF-IDF 权值。

前瞻数值型数据

统计 22

规则学习分类

  • 规律:规则学习算法使用了一致栽名叫独立而治之的探索法。这个过程包括确定训练多少被蒙一个案例子集的平整,然后还从剩余的数额遭到分别有拖欠分区。随着规则之多,更多的数据子集会于分开,直到满数据集都被遮住,不再发生案例残留,独立而治之和决策树的分而治之区别很有些,决策树的每个决策节点会遭遇过去决策历史的影响,而规则学习不有这么的沿。随着规则的增,更多之数据子集会于分手,知道合数据集都被埋,不再发生案例为封存

领取图像特点

特色必须具备比高的区分度过,而且要满足旋转不变性以及尺寸不变性等,因此,我们司空见惯还见面下「SIFT」特征(有时为了降低计算量,也会见使用其他特色,如:SURF
)。「SIFT」会于图纸及领取出多特征点,每个特征点都是 128
维的朝量,因此,如果图片足够多以来,我们见面领取出一个英雄的特征向量库。

机上算法

版权声明:本文也博主原创文章,转载请注明出处

小结

  本文主要谈了机上之片基本概念,还有一些机器上方法的基本原理及R语言实现。包括用于分类的机上道:k近邻,朴素贝叶斯,决策树,规则学习;用于数值预测的机器上方法:lasso回归,回归树,模型树,它们还属于监督上。下篇文章会说到监督上中的神经网络和支撑于量机,还产生其它未监督上的有主意。
  本文可以当一个速查和简易的入门,一些函数只列举了一些要害的参数,具体的使用参数可以由此查看R里面的帮助获得。另外如一旦用于实施,还亟需了解一些K折交叉检查,kappa统计量,ROC曲线内容,以对范的习性进行评价与针对性不同的型进行比。