library(splines) library(Matrix) library(fds) library(rainbow) library(MASS) library(pcaPP) library(RCurl) library(fda) library(ggplot2) data<-read.table("D:/CPCI/ECG200/ECG200_TEST.txt") data <- data[, -1] #导入数据的时候第一列是当时已经分好的类,不需要 M=20 H=10 param=1e-15 k=2#聚类个数 knee= t(data) t=ncol(data) #使用前需要把data转置 #调参#定义B样条和平滑参数 time = seq(0,1,len=t) smoothing.parameter = param #控制平滑程度(原来是1e-15 Lfdobj = int2Lfd(2) kneebasis = create.bspline.basis(nbasis=M) #选择多少个B样条基(原来给的是20个 kneefdPar = fdPar(kneebasis, Lfdobj, smoothing.parameter) #平滑每个函数并进行主成分分析 knee.fd = smooth.basis(time, knee, kneefdPar) kn.pcastr = pca.fd(knee.fd$fd, H, kneefdPar,centerfns=TRUE) kneescoefs = knee.fd$fd$coefs #获取基展开系数 kneescoefs1 = t(kneescoefs) #得到随机生成的k簇=样本点集 coefs_list=list() for (i in 1:k) { idx=sample(1:nrow(kneescoefs1),nrow(kneescoefs1)/k) sub_mat=kneescoefs1[idx,] coefs_list[[i]]=sub_mat name=paste0("coefs",i) assign(name,sub_mat) kneescoefs1=kneescoefs1[-idx,] } coefs_list ##想要引用list里面的每个矩阵就用coefs_list[[i]] i∈[1,k] ori_list=list() ##求初始中心点的基展开系数 for (i in 1:k) { ccc=apply(coefs_list[[i]], 2, mean) ori_list[[i]]=ccc namee=paste0("miumean",i) assign(name,ccc) } ori_list
时间: 2024-03-03 07:52:22 浏览: 139
c++ cubic spline library.zip
根据你提供的代码,这段程序的作用是对ECG200_TEST.txt文件中的数据进行聚类。
具体来说,程序先导入一些需要用到的R包,然后读入ECG200_TEST.txt文件中的数据,将第一列(分类标签)删除,然后将数据转置。
接下来,程序使用B样条基函数和平滑参数来对每个函数进行平滑,并进行主成分分析,得到每个函数的主成分,即基展开系数。然后将基展开系数随机分为k个簇,每个簇的大小相等。
程序接着求出每个簇的初始中心点的基展开系数。
需要注意的是,这段代码中有一些变量未定义,比如data、t等,因此无法判断程序是否完全正确。此外,程序中使用了一些R包和函数,需要提前安装好才能运行。
阅读全文