R语言做聚类分析用统计量确定类的个数.有什么代码或者包吗

Python016

R语言做聚类分析用统计量确定类的个数.有什么代码或者包吗,第1张

聚类分析有两种主要计算方法,分别是凝聚层次聚类(Agglomerative hierarchical method)和K均值聚类(K-Means)。

层次聚类又称为系统聚类,首先要定义样本之间的距离关系,距离较近的归为一类,较远的则属于不同的类。可用于定义“距离”的统计量包括了欧氏距离 (euclidean)、马氏距离(manhattan)、 两项距离(binary)、明氏距离(minkowski)。还包括相关系数和夹角余弦。 层次聚类首先将每个样本单独作为一类,然后将不同类之间距离最近的进行合并,合并后重新计算类间距离。这个过程一直持续到将所有样本归为一类为止。在计算类间距离时则有六种不同的方法,分别是最短距离法、最长距离法、类平均法、重心法、中间距离法、离差平方和法。 下面我们用iris数据集来进行聚类分析,在R语言中所用到的函数为hclust。

首先提取iris数据中的4个数值变量,然后计算其欧氏距离矩阵。然后将矩阵绘制热图,从图中可以看到颜色越深表示样本间距离越近,大致上可以区分出三到四个区块,其样本之间比较接近。 data=iris[,-5] dist.e=dist(data,method='euclidean') heatmap(as.matrix(dist.e),labRow = F, labCol = F) X 然后使用hclust函数建立聚类模型,结果存在model1变量中,其中ward参数是将类间距离计算方法设置为离差平方和法。

使用plot(model1)可以绘制出聚类树图。如果我们希望将类别设为3类,可以使用cutree函数提取每个样本所属的类别。 model1=hclust(dist.e,method='ward') result=cutree(model1,k=3) 为了显示聚类的效果,我们可以结合多维标度和聚类的结果。先将数据用MDS进行降维,然后以不同的的形状表示原本的分类,用不同的颜色来表示聚类的结果。可以看到setose品种聚类很成功,但有一些virginica品种的花被错误和virginica品种聚类到一起。

R语言之决策树和随机森林

总结决策树之前先总结一下特征的生成和选择,因为决策树就是一种内嵌型的特征选择过程,它的特征选择和算法是融合在一起的,不需要额外的特征选择。

一、特征生成:

特征生成是指在收集数据之时原始数据就具有的数据特征,这些数据特征由收集的数据决定(其实也就是在产品定型时设定的需要收集的数据特征),当然,在数据预处理时,也可以在此基础上构造一些新的数据特征,这些特征越多越好,表示你考虑问题比较周全,具体那些变量有用或没用,这要交给下一步特征选择来决定。

二、特征选择

特征选择是指在原有数据特征的基础上,去除重要性比较低的特征变量,过滤出有用的特征变量。这里比较困难的是搞清楚什么样的特征比较重要?这需要根据具体的问题具体分析,有些变量的选择可以很直观的看出来,但这种直觉也不一定正确。对于常用特征选择方法主要有:过滤型、包装型、内嵌型。

过滤型:是指你可以根据某个统计量的大小排序来选择特征变量,如相关系数、p值、R值等

包装型:是指在一个特征集合中选取最优的特征子集。具体需要考虑:用什么样的算法来选取?选取的最优的标准是什么?

常用的算法是分步回归包括向前搜索、向后删除、双向搜索

向前搜索:每次选取一个能使模型预测或分类效果最好的特征变量进来,进来后不退出,直到模型改善效果不再明显;

向后删除:是指每次从特征全集中每次删除一个特征变量能使模型预测或分类效果最好,退出后不进来,直到模型改善效果不再明显;

双向搜索:是指每次每次删除一个特征变量或加入一个特征变量能使模型预测或分类效果最好,退出的不进来,进来的不退出,直到模型改善效果不再明显;

这里再提一下特征变量选择的几个标准:p值、R值、AIC(越小效果越好)、BIC(越小效果越好)、熵(越小效果越好)

内嵌型:这里应该主要就是像决策树这样的情况,算法内部完成特征变量的选取。

三、决策树

决策的几个要点:1、如何决策?(也就是如何树如何分叉)------熵和信息增益---这里面包含的就是特征的选择?哪个特征变量包含的信息量大,就排在前面,至于最后树的深度就决定特征变量的个数。

当然不同的算法使用的衡量的标准不同,还有:信息增益比、基尼不纯系数

2、如何剪枝?-----一般是事后剪枝

3、连续性变量如何离散化?-----阈值的选择

熵:是指信息的混合程度(混乱程度),熵【0-1】越大表示该集合中混合的信息越多,也就表明这次的分叉效果不好还是有很多不同类的信息混在一起

信息增益:熵值的减少量,越大越好

决策树模型特点:模型易于解释;存储空间较小,以树的形式存储,决策树是一个弱分类器,不能完全分类,需要把多个弱分类器通过多数投票法组合在一起。

四、R包实现决策树

library(rpart)

library(rpart.plot)

## rpart.control对树进行一些设置

## xval是10折交叉验证

## minsplit是最小分支节点数,这里指大于等于20,那么该节点会继续分划下去,否则停止

## minbucket:叶子节点最小样本数

## maxdepth:树的深度

## cp全称为complexity parameter,指某个点的复杂度,对每一步拆分,模型的拟合优度必须提高的程度

ct <- rpart.control(xval=10, minsplit=20, cp=0.1)

## kyphosis是rpart这个包自带的数据集

## na.action:缺失数据的处理办法,默认为删除因变量缺失的观测而保留自变量缺失的观测。

## method:树的末端数据类型选择相应的变量分割方法:

## 连续性method=“anova”,离散型method=“class”,计数型method=“poisson”,生存分析型method=“exp”

## parms用来设置三个参数:先验概率、损失矩阵、分类纯度的度量方法(gini和information)

## cost是损失矩阵,在剪枝的时候,叶子节点的加权误差与父节点的误差进行比较,考虑损失矩阵的时候,从将“减少-误差”调整为“减少-损失”

data("Kyphosis")

fit <- rpart(Kyphosis~Age + Number + Start,data=kyphosis, method="class",control=ct,parms = list(prior = c(0.65,0.35), split = "information"))

## 作图有2种方法

## 第一种:

par(mfrow=c(1,3))plot(fit)text(fit,use.n=T,all=T,cex=0.9)

## 第二种,这种会更漂亮一些:

rpart.plot(fit, branch=1, branch.type=2, type=1, extra=102,

shadow.col="gray", box.col="green",

border.col="blue", split.col="red",

split.cex=1.2, main="Kyphosis决策树")

## rpart包提供了复杂度损失修剪的修剪方法,printcp会告诉分裂到每一层,cp是多少,平均相对误差是多少

## 交叉验证的估计误差(“xerror”列),以及标准误差(“xstd”列),平均相对误差=xerror±xstd

printcp(fit)

## 通过上面的分析来确定cp的值

##调用CP(complexity parameter)与xerror的相关图,一种方法是寻找最小xerror点所对应

#的CP值,并由此CP值决定树的大小,另一种方法是利用1SE方法,寻找xerror+SE的最小点对应的CP值。

plotcp(fit)

##利用以下方法进行修剪:

## prune(fit, cp= fit$cptable[which.min(fit$cptable[,"xerror"]),"CP"])

fit2 <- prune(fit, cp=0.01)

#利用模型预测

ndata=data.frame(...)

predict(fit,newdata=ndata)

#案例

str(iris)

set.seed(1234)#设置随机数种子--使每次运行时产生的一组随机数相同,便于结果的重现

#抽样:从iris数据集中随机抽70%定义为训练数据集,30%为测试数据集(常用)

#这里是对行抽样,ind是一个只含1和2的向量

ind <- sample(2, nrow(iris), replace=TRUE, prob=c(0.7, 0.3))

trainData <- iris[ind==1,]

testData <- iris[ind==2,]

f<-Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width

#训练数据

fit<-rpart(f,trainData)

#预测

re<-predict(fit,testData)

#******************或者用其他包********************

library(party)

#建立决策树模型预测花的种类

myFormula <- Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width

iris_ctree <- ctree(myFormula, data=trainData)

# 查看预测的结果

z<-table(predict(iris_ctree), trainData$Species)

#可以根据以上列联表求出预测的正确率---评估模型

#计算准确度

q<-sum(diag(z))/sum(z)

五、机器集成与随机森林法则

前面说过,决策树的一个特点是:弱分类器,分类不完全,需要利用集成投票的方式来增加精确度和稳健性。

机器集成算法:对于数据集训练多个模型,对于分类问题,可以采用投票的方法,选择票数最多的类别作为最终的类别,而对于回归问题,可以采用取均值的方法,取得的均值作为最终的结果。主要的集成算法有bagging和adaboost算法。

随机森林:随机森林就是利用机器集成多个决策树,主要有两个参数,一个是决策树的个数,一个是每棵树的特征变量个数。

随机森林特点:精确度高、稳健性好,但可解释性差。(可以知道各个变量的重要性)

R包实现机器集成算法:

#adabag包均有函数实现bagging和adaboost的分类建模

#利用全部数据建模

library(adabag)

a<-boosting(Species~.,data=iris)

z0<-table(iris[,5],predict(a,iris)$class)

#计算误差率

E0<-(sum(z0)-sum(diag(z0)))/sum(z0)

barplot(a$importance)

b<-errorevol(a,iris)#计算全体的误差演变

plot(b$error,type="l",main="AdaBoost error vs number of trees") #对误差演变进行画图

a<-bagging(Species~.,data=iris)

z0<-table(iris[,5],predict(a,iris)$class)

#计算误差率

E0<-(sum(z0)-sum(diag(z0)))/sum(z0)

barplot(a$importance)

b<-errorevol(a,iris)#计算全体的误差演变

plot(b$error,type="l",main="AdaBoost error vs number of trees") #对误差演变进行画图

#5折交叉验证

set.seed(1044) #设定随机种子

samp=c(sample(1:50,25),sample(51:100,25),sample(101:150,25)) #进行随机抽样

a=boosting(Species~.,data=iris[samp,]) #利用训练集建立adaboost分类模

z0<-table(iris[samp,5],predict(a,iris[samp,])$class)#训练集结果

z1<-table(iris[-samp,5],predict(a,iris[-samp,])$class)#测试集结果

E0<-(sum(z0)-sum(diag(z0)))/sum(z0)

E1<-(sum(z0)-sum(diag(z0)))/sum(z1)

a=bagging(Species~.,data=iris[samp,]) #利用训练集建立adaboost分类模

z0<-table(iris[samp,5],predict(a,iris[samp,])$class)#训练集结果

z1<-table(iris[-samp,5],predict(a,iris[-samp,])$class)#测试集结果

E0<-(sum(z0)-sum(diag(z0)))/sum(z0)

E1<-(sum(z0)-sum(diag(z0)))/sum(z1)

R包实现随机森林:

#随机森林法则

library(randomForest)

library(foreign)

data("iris")

#抽样数据

ind<-sample(2,nrow(iris),replace = TRUE,prob=c(0.7,0.3))

traning<-iris[ind==1,]

testing<-iris[ind==2,]

#训练数据

rf <- randomForest(Species ~ ., data=traning, ntree=100, proximity=TRUE)

#预测

table(predict(rf),traning$Species)

table(predict(rf,testing),testing$Species)

#查看预测的效果

print(rf)

plot(rf)

#查看重要性

importance(rf)

varImpPlot(rf)

常用的系统建模方法的适用范围和局限性?系统建模方法

2.1系统抽象与数学描述

2.1.1 实际系统的抽象

本质上讲,系统数学模型是从系统概念出发的关于现实世界的一小部分或几个方面的抽象的“映像”。

为此,系统数学模型的建立需要建立如下抽象:输入、输出、状态变量及其间的函数关系。这种抽象过程称为模型构造。抽象中,必须联系真实系统与建模目标,其中描述变量起着很重要的作用,它可观测,或不可观测。

从外部对系统施加影响或干扰的可观测变量称为输入变量。 系统对输入变量的响应结果称为输出变量。

输入、输出变量对的集合,表征着真实系统的“输入-输出”性状(关系)。

综上述,真实系统可视为产生一定性状数据的信息源,而模型则是产生与真实系统相同性状数据的一些规则、指令的集合,抽象在其中则起着媒介作用。系统数学建模就是将真实系统抽象成相应的数学表达式(一些规则、指令的集合)。

- 1 -

(可观测)

输入变量 (可观测) 输出变量

ωt) 黑箱

1/18页

灰箱

白箱 ω(t)、ρ(t)---输入输出变量对

真实系统建模的抽象过程

- 2 -

2.1.2 系统模型的一般描述及描述级(水平)

2.1.2.1 系统模型的一般描述:

一个系统的数学模型可以用如下七元组集合来描述:

S??T,X,?,Q,Y,?,??

其中:

T:时间基,描述系统变化的时间坐标,T为整数则称为离散时间系统,为实数则称为连续时间系统

X:输入集,代表外部环境对系统的作用。

?:输入段集,描述某个时间间隔内的输入模式,是?X,T?的一个子集。

Q:内部状态集,描述系统内部状态量,是系统内部结构建模的核心。 ?:状态转移函数,定义系统内部状态是如何变化的,是一个映射。 Y:输出集,系统通过它作用于环境。

?:输出函数,是一个映射,给出了一个输出段集。

2.1.2.2 系统模型描述级(水平):

按照系统论的观点,实际系统可在某种级(水平)上被分解,因此系统的数学模型可以有不同的描述级(水平):

? 性状描述级

性状描述级或称为行为描述级(行为水平)。在此级上描述系统是将

2/18页

系统堪称黑箱,并施加输入信号,同时测得输出响应,结果是得出一个输入-输出对:(ω,ρ) 及其关系Rs={(ω,ρ):Ω,ω,ρ}。 - 3 -

因此,系统的性状级描述只给出输入-输出观测结果。其模型为五元组集合结构:

S=(T,X,Ω,Y, R)

当ω,ρ满足ρ =f(ω)函数关系时,其集合结构变为: S=(T,X,Ω,Y, F)

黑箱

? 状态描述级

在状态结构级(状态结构水平)上,系统模型不仅能反映输入-输出关系,而且应能反映出系统内部状态,以及状态与输入、输出间的关系。即不仅定义了系统的输入与输出,而且定义了系统内部的状态集及状态转移函数

系统的数学模型对于动态结构可用七元组集合来描述:

S=(T,X,Ω,Q,Y,δ,λ)

对于静态结构有:

S=(X,Q,Y,λ)

白箱

? 复合结构级

系统一般由若干个分系统组成,对每个分系统都给出行为级描述,被视为系统的一个“部件”。这些部件有其本身的输入、输出变量,以及部件间的连接关系和接口。于是,可以建立起系统在复合结构级(分解结构

3/18页

级)上的数学模型。

这种复合结构级描述是复杂系统和大系统建模的基础。

应该强调:

? 系统分解为复合结构是无止境的,即每个分系统还会有自己的复合结构

? 一个有意义的复合结构描述只能给出唯一的状态结构描述, - 4 -

而一个有意义的状态结构描述本身只有唯一的性状(行为)描述

? 系统上述概念必须允许分解停止,又允许进一步分解,既包含递归可分解性。

灰箱

- 5 -

2.2 相似概念简介

2.2.1 相似概念及含义

仿真的理论依据:相似论。

自然界中广泛存在着“相似”概念,最普遍的是:

几何相似:最简单、最直观,如多变形、三角形相似

现象相似:几何相似的拓展,如物理量之间存在的比例关系。 采用相似技术来建立实际系统的相似模型,这是相似理论在系统仿真中基础作用的根本体现。

2.2.2 相似分类

绝对相似:两个系统(如系统原型与模型)全部几何尺寸和其他相应参数在时空域上产生的全部变化(或全部过程)都是相似的

4/18页

完全相似:两个系统在某一相应方面的过程上相似,如发电机的电流电压问题,模型与原型在电磁现象方面是完全相似即可,而无需考虑热工和机械方面的相似

不完全相似(局部相似):仅保证研究部分的系统相似,而非研究和不要求部分的过程可能被歪曲,为研究目的所允许

近似相似:某些简化假设下的现象相似,数学建模要保证有效性。

不同领域中的相似有各自的特点,对领域的认识水平也不一样: 环境相似(几何相似、参量比例相似等):结构尺寸按比例缩小得到的模型-缩比模型,如风洞、水洞实验所用的模型。

离散相似:差分法、离散相似法把连续时间系统离散化为等价的离散时间系统。

性能相似(等效、动力学相似、控制响应相似等):数学描述相同或者频率特性相同,用于构造各类仿真的相似原则。

感觉相似(运动感觉、视觉、音响感觉等):耳、眼、鼻、舌、 - 6 -

身等感官和经验,MIL仿真把感觉相似转化为感觉信息源相似,培训仿真器、VR均是利用这种相似原则。

思维相似:逻辑思维相似和形象思维相似(比较、综合、归纳等),专家系统、人工神经元网络。

系统具有内部结构和外部行为,因此系统的相似有两个基本水平:结构水平和行为水平。

同构必具有行为等价的特性,但行为等价的两个系统并不一定具有同构关系。

5/18页