R语言实现行为特征分析(Behavioral Profile,BP)+层次聚类分析(hierarchical agglomerative cluster analysis,HAC)
目录
- 1. 什么是Behavioral Profile?
- 2. BP实现步骤
- 3. 代码
- 4. 参考资料
1. 什么是Behavioral Profile?
行为剖面法(BP)是基于Atkins(1987)和Hanks(1996)的思想,最近Dagmar Divjak、Stefan Th进一步阐述了这一思想。Gries和其他语言学家在一系列研究(如Divjak2003;Divjak&Gries 2006)。
这种方法对于辨别一组近义词或多义词各个含义之间的差异有较好的作用。
2. BP实现步骤
step1:BP方法通常需要一个结构或一个词的许多实例(数据)
step2:对实例中的词性进行标注(探索各种分类维度)
step3:计算多义词的每个含义或者各个近义词在各个分类维度的每个取值上的数量占比,每个含义形成一个向量
step4:计算每个含义间的差异(向量的距离),聚类等
3. 代码
引入需要的包和示例数据,本数据共7列,450行,每行是一个数据,每列是一个分类维度,第一列“Cx”代表数据的词义,有9个取值,BP的主要目的就是分析这9个取值在其他分类维度的表现差异。
install.packages(c("cluster", "pvclust", "vcd"))
library(Rling); library(cluster); library(pvclust); library(vcd)
data(caus)#这里是R自带的数据,可以换成自己的数据:每行是一条数据,列名是各个分类维度
计算每个含义的BP向量,形成BP距离矩阵
be_made_toV <- caus[caus$Cx == "be_made_toV", -1]
cause_toV <- caus[caus$Cx == "cause_toV", -1]
get_toV <- caus[caus$Cx == "get_toV", -1]
get_Ved <- caus[caus$Cx == "get_Ved", -1]
get_Ving <- caus[caus$Cx == "get_Ving", -1]
have_V <- caus[caus$Cx == "have_V", -1]
have_Ved <- caus[caus$Cx == "have_Ved", -1]
have_Ving <- caus[caus$Cx == "have_Ving", -1]
make_V <- caus[caus$Cx == "make_V", -1]
make_V.bp <- bp(make_V)
be_made_toV.bp <- bp(be_made_toV)
cause_toV.bp <- bp(cause_toV)
get_toV.bp <- bp(get_toV)
get_Ved.bp <- bp(get_Ved)
get_Ving.bp <- bp(get_Ving)
have_V.bp <- bp(have_V)
have_Ved.bp <- bp(have_Ved)
have_Ving.bp <- bp(have_Ving)
caus.bp <- rbind(be_made_toV.bp, cause_toV.bp, get_toV.bp, get_Ved.bp, get_Ving.bp, have_V.bp, have_Ved.bp, have_Ving.bp, make_V.bp)#BP距离矩阵
根据BP向量计算各个含义之间的距离,并层次聚类展示
rownames(caus.bp) <- levels(caus$Cx)
caus.dist <- dist(caus.bp, method = "canberra")
max(caus.dist)
min(caus.dist)
caus.hc <- hclust(caus.dist, method = "ward.D2")# 聚类
并画图展示
plot(caus.hc, hang = -1)
如果按照指定聚类簇的数量进行聚类,是否聚类效果更好?
test.clust <- cutree(caus.hc, k = 2)# 按指定簇数量的分类
summary(silhouette(test.clust, caus.dist))$avg.width
asw <- sapply(2:8, function(x) summary(silhouette(cutree(caus.hc,k = x), caus.dist))$avg.width)
asw
可以知道在指定簇数量为4的时候簇间差异最大,效果最好,画图展示
plot(caus.hc, hang = -1)
rect.hclust(caus.hc, k = 4)#cluster number=4时asw最大
查看不同簇在各个分类维度之间的差异性,画图展示
c1 <- caus.bp[c(4,7),]#get_Ved和have_Ved这两个含义
c2 <- caus.bp[-c(4,7),]#其他含义
c1.bp <- colMeans(c1)
c2.bp <- colMeans(c2)
diff <- c1.bp - c2.bp
sort(diff, decreasing = TRUE)
plot(sort(diff)*1.2, 1:length(diff), type = "n", xlab = "cluster 2 < –- > cluster 1", yaxt = "n", ylab = "")
text(sort(diff), 1:length(diff), names(sort(diff)))# 画图看含义之间的差异所在
可以看出,差异最大的是CrSem分类维度下的Anim取值。
同时可以通过统计性检验(输出表格)来查看含义的统计性差异:
cluster <- as.character(caus$Cx)
cluster[cluster == "get_Ved"|cluster == "have_Ved"] = "1"
cluster[cluster != "1"] = "2"
cluster <- as.factor(cluster)
assocstats(table(cluster, caus$CrSem))
程序会输出表格(重点看Likelihood Ratio是否小于0.05)。
还可以通过bootstrap进行更稳定的聚类(含置信度):
caus.pvc <- pvclust(t(caus.bp), method.hclust = "ward.D2", method.dist = "canberra")
plot(caus.pvc, hang = -1)
pvrect(caus.pvc, alpha = 0.95)
从中可以看出包含get_ved和have_ved的簇的置信度为95%,其他簇的置信度也相对较高,说明聚类效果较好。
另外也可以通过K-means聚类,观察指定簇数变化时,WCSS下降最快的点,作为最佳聚类簇数:
test.clust <- kmeans(caus.bp, 4, nstart = 25)
test.clust$cluster
test.clust$tot.withinss
wcss <- sapply(1:8, function(x) kmeans(caus.bp, x, nstart = 25)$tot.withinss)
wcss
plot(1:8, wcss, type = "b", main = "Scree plot of WCSS for n clusters", xlab = "n of clusters", ylab = "WCSS")
从图中可以发现,n=3时K-means聚类效果最佳。
也可以用K-medoids算法进行聚类:
caus.pam <- pam(caus.dist, k = 4)
caus.pam$clustering
caus.pam$medoids
caus.pam$silinfo$avg.width
asw <- sapply(2:8, function(x) pam(caus.dist, k = x)$silinfo$avg.width)
asw
4. 参考资料
Levshina, Natalia. “How to do linguistics with R.” Data Exploration and Statistical Analysis, Amsterdam-Philadelphia (2015).[附百度云盘链接:https://pan.baidu.com/s/1YnWLPiH7oom_dPABWXFKig 提取码:f3nk)
R语言实现行为特征分析(Behavioral Profile,BP)+层次聚类分析(hierarchical agglomerative cluster analysis,HAC)相关推荐
- R语言ggplot2可视化树状图、层次聚类系统树图、树状图根据给定的距离度量将相似点分组在一起、并根据点的相似性将它们组织成树状图链接起来(Hierarchical Dendrogram)
R语言ggplot2可视化树状图.层次聚类系统树图.树状图根据给定的距离度量将相似点分组在一起.并根据点的相似性将它们组织成树状图链接起来(Hierarchical Dendrogram) 目录
- R语言explore包进行探索性数据分析实战(EDA、exploratory data analysis):基于iris数据集
R语言explore包进行探索性数据分析实战(EDA.exploratory data analysis):基于iris数据集 目录
- R语言多元统计包简介:各种假设检验 统计方法 聚类分析 数据处理
转载自:http://blog.csdn.net/duqi_yc/article/details/9446707 www.biostatistic.net/统计分析 生物信息 sas matlab R ...
- 《R语言数据挖掘》读书笔记:五、聚类分析
第五章.聚类分析 0. 聚类算法的系统性介绍 聚类被定义为一个数据集的无监督分类.聚类算法的目的是使用距离或者概率度量对给定数据集(点集或者对象的集合)划分成数据实例或者对象(点)的组.根据距离或相似 ...
- #R# R语言多元统计包简介:各种假设检验 统计方法 聚类分析 数据处理
www.biostatistic.net/ 统计分析 生物信息 sas matlab R语言 Multivariate Statistics (多元统计) 网址: http://cran.r-proj ...
- R语言学习笔记(十四):聚类分析
#聚类分析 par(mfrow=c(1,1)) #计算距离 install.packages("flexclust") data(nutrient,package="fl ...
- r语言 bsda包_使用R语言creditmodel包进行Vintage分析或留存率分析
1 什么是vintage分析? Vintage分析(账龄分析法)被广泛应用于信用卡及信贷行业,这个概念起源于葡萄酒,即不同年份出产的葡萄酒的品质有差异,那么不同时期开户或者放款的资产质量也有差异,其核 ...
- r语言如何写入一个excel_R语言如何进行聚类分析?
点击上方"中国统计网" 设置星标哦! 01 首先介绍下聚类分析中主要的算法: K-均值聚类(K-Means) 十大经典算法 K-中心点聚类(K-Medoids) 密度聚类(DB ...
- R语言--聚类学习笔记
文章目录 聚类分析入门<R语言实战> 聚类分析入门<R语言实战> (1)聚类分析的一般步骤 ① (2)计算距离的方法: ①dist(x,method=) 计算矩阵或行列式中所有 ...
- 使用R语言creditmodel包进行Vintage分析或留存率分析
1 什么是vintage分析? Vintage分析(账龄分析法)被广泛应用于信用卡及信贷行业,这个概念起源于葡萄酒,即不同年份出产的葡萄酒的品质有差异,那么不同时期开户或者放款的资产质量也有差异,其核 ...
最新文章
- Logback学习笔记1
- PHP Countable接口
- ITSM四大管理工具的比较
- 平台信赖度成为双十一影响消费者购买决策的重要因素
- (1)计算机的组成及其功能
- 快速理解shopex模板机制经验教程(一)
- 倒N字形排列java_Java排序8大算法实现
- java+selenium获取整个表格的内容
- 超简单的memcached集群搭建
- ERROR: This version of Android Studio cannot open this project, please retry with Android Studio 3.
- MongoDB最佳实践
- win7玩游戏窄屏变宽频的方法
- 如何把psd格式转为html,将psd转化为HTML网页详情讲解
- 低压无功补偿电容柜浅谈
- python项目之 路由器抓取器
- 【PPPAR】PPPAR入门知识点
- 如何在网页中设置一个定时器计算时间?
- PHP Warning: file_put_contents(..):failed to open stream: Permission denied in...
- ecshop支持mysql_ecshop安装不支持MySQL
- oss文档存储类型:低频、标准、归档、冷归档
热门文章
- 在训练的时候loss增大怎么办
- 个人管理 - 如何演讲
- 程序员制作epub电子书
- sigil 查找替换_使用Sigil提高ePub电子书的质量
- 【bzoj1406】【AHOI2007】【密码箱】【数论】
- Question Answering over Freebase via Attentive RNN with Similarity Matrix based论文解读
- 在线头像制作网站FaceYourManga
- 计算机组成原理试题库(含答案),计算机组成原理试题库(含答案) -
- 手机的内核版本、基带版本等都是什么意思?
- cogs 1752 [BOI2007]摩基亚Mokia(cdq分治+树状数组)