R语言哪些包可用来做聚类分析

Python010

R语言哪些包可用来做聚类分析,第1张

聚类的包,cluster包,里面包含了pam,agnes等函数,可以十分方便进行聚类计算。另外有系统自带的stats包,hclust,kmeans等函数。fpc包做聚类分析,也是可以的。另外,如果需要例子,这些包自带的文档里面都有使用的实例,是很好的学习案例。

(1)定义每一个观测值为一类;

(2)计算每一类和其它各类的距离;

(3)把“距离”最短的两类合并成一类,这样类的个数就减少一个;

(4)重复步骤1和步骤2,直到包含所有观测值的类合并成单个类为止。

基于5种营养标准含量(变量)的27种食物(观测)进行层次聚类分析,探索不同食物的相同点与不同点,并分成有意义的类。此处层次聚类算法以平均联动(average)为例。

(1)数据预处理--归一化

(2)计算欧几里得距离

(3)平均联动层次聚类分析

(1)确定聚类个数

NbClust包提供了众多的指数来确定在一个聚类分析里类的最佳数目。

(2)获取最终的聚类方案

由上图,尝试解释每类变量的含义:

K均值聚类为最常见的划分方法。

(1)选择K个中心点(随机选择K个观测),K数值就是我们预期的聚类数。

(2)把每个数据点分配给离它最近的中心点;第一次中心点是随机选择的,但也可以设置参数,选择最优的初始值。

(3)重新计算每类中的点到该类中心点距离的平均值;此时的中心点应该为每一类的均值中心点,对异常值敏感(之后都是如此)

(4)分配每个数据到它最近的中心点;

(5)重复步骤3、4,直到所有的观测值不在被分配或是达到最大的迭代次数(默认10次)

(1)数据预处理:去除第一列干扰数据,并归一化数据。

(2)确定待提取的聚类个数,同样可用NbClust包判断(顺序与层次聚类分析不同,如前所述,层次聚类分析在最后才确定聚类个数)

(3)K均值聚类分析

(4)最后将聚类结果与原始数据标准结果(第一列数据)进行比对,看看分析质量如何。

兰德指数接近0.9,看来K均值聚类算法还不错~

K均值法对均值异常敏感,相比来说,PAM为更稳健的方法。

(1)随机选择K个观测(每个都称为中心点);

(2)计算观测值到各个中心的距离;

(3)把每个观测值分配到最近的中心点;

(4)计算每个中心点到每个观测值的距离的总和(总成本);

(5)选择一个该类中不是中心的点,并和中心点互换;

(6)重新把每个点分配到距它最近的中心点;

(7)再次计算总成本;

(8)若新的总成本比步骤4计算的总成本少,就把新的点作为中心点;

(9)重复步骤5-8,直到中心点不变。

R语言常用数学函数

sum()、max()、min()、mean()、median()

prod(x) 对x中的元素都连乘

which.max(x) 返回x中最大元素的下标

which.min(x) 返回x中最小元素的下标

range(x) 值域

rev(x) 对x中的元素取逆序

sort(x) 将x中的元素将升序排列

pmin(x,y) 返回一个向量,它的第i个元素是x[i],y[i] 中最小值

pmax(x,y) 返回一个向量,它的第i个元素是x[i],y[i] 中最大值

cumsum(x) 求累积和,返回一个向量,第i个元素等于x[1]到x[i]的和

cumprod(x) 求累积(从左到右)乘积

cummin(x) 求累积最小值(从左到右)

cummax(x) 求累积最大值(从左到右)

match(x,y) 返回一个和x的长度相同的向量,第i个元素表示y中与x[i]相同的元素的位置(没有则返回NA)

na.omit(x) 函数忽略有缺失值(NA)的观察数据(如果x是矩阵或数据框则忽略相应的行)

na.fail(x) 如果x包含至少一个NA则返回一个错误消息

which() 返回符合条件的元素的下标

choose 组合数,二项式,例choose(4,2) 返回6

rep(x,y) 将x重复y次

unique(x) 去掉重复的元素,只取一个

table(x) 返回一个列表,给出y中重复元素的个数列表

subset(x,条件) 返回x中满足特定条件的子集