Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Matlab中绘制K-means结果_Matlab_Plot_K Means - Fatal编程技术网

在Matlab中绘制K-means结果

在Matlab中绘制K-means结果,matlab,plot,k-means,Matlab,Plot,K Means,我有3组信号,每个信号包含4个不同的操作状态,我必须在Matlab中使用K均值对每个信号中的状态进行分类。分类是在我使用滤波器平滑原始信号之后完成的。我的输出应该是平滑信号的曲线图,信号的每个部分都有不同的颜色,以表示不同的操作状态 我对Matlab非常陌生,这就是我对分类部分的了解 numClusters = 4; idx_1 = kmeans([X_1 smoothY_1],numClusters,'Replicates', 5); [numDataPoints,numDimensions]

我有3组信号,每个信号包含4个不同的操作状态,我必须在Matlab中使用K均值对每个信号中的状态进行分类。分类是在我使用滤波器平滑原始信号之后完成的。我的输出应该是平滑信号的曲线图,信号的每个部分都有不同的颜色,以表示不同的操作状态

我对Matlab非常陌生,这就是我对分类部分的了解

numClusters = 4;
idx_1 = kmeans([X_1 smoothY_1],numClusters,'Replicates', 5);
[numDataPoints,numDimensions] = size(smoothY_1);
Colors = hsv(numClusters);
for i = 1 : numDataPoints
    plot(X_1(i),smoothY_1(i),'.','Color',Colors(idx_1(i),:))
    hold on
end
我有几个问题

1) 在我看来,Matlab中的kmeans函数在每次运行时都会返回一组任意的集群索引。例如,在同一信号上运行上述代码两次可能会得到聚类索引(10个数据点)
[4 4 2 2 2 1 1 3 3 3]
[2 2 1 1 4 3 3 3]
,从而产生表示每个状态的任意颜色。理想情况下,我希望索引(在某种程度上)有序,并且对应状态的颜色相同,因此说“红色表示操作状态1,蓝色表示状态2,等等”是有意义的。我如何同步这个

我有两张图片来说明这一点。

集合1和集合2是两个数据集。信号的每一级都有不同的颜色。例如,我希望第一段为红色,第二段为青色,第三段为绿色,第四段为紫色

2) 我似乎无法使用说明符“-”绘制图形。当我尝试这样做时没有输出,所以我被迫使用“.”,这不是我想要的。如何在这里绘制连续曲线

3) 现在,我在所有3组数据上独立运行K-means,因此没有训练/测试数据集的概念。我想使用一个数据集进行训练,另外两个数据集进行测试,但我不知道如何在Matlab中使用K-means。我该怎么做

预计到达时间:我注意到平滑后的曲线图的高度大约是原始数据曲线图高度的一半,例如,原始信号中的最高点为y=22,而平滑后的信号中的最高点为y=11,尽管形状保持不变。这是正确的吗


ETA2:我意识到,K-means聚类所做的似乎只是将图形划分为numClusters段(基于X_1值),就这样。我尝试了不同的NumCluster值,每个值都给了我相等的分段。这肯定不对吧?例如,最大峰值后的长段是否更可能属于同一个簇,而不是3个簇?我应该使用K-means吗?

第一个问题:

您可以使用

[~,~,a] = unique(a,'stable');
关于第二个问题:

您可以在此处找到有关LineSpec的所有信息:

如果不添加线等级库,则默认选项为所需的连续线

关于第三个问题:


我不认为你可以训练你的kmean算法(由于该方法),因为它可以与SVM一起训练,但我正在等待专家的意见。

谢谢你的回复!但是,
unique
函数不会删除idx_1中的重复点吗?既然现在idx_1向量的大小小于我的x,y向量,这将如何影响我的绘图?此外,我还尝试了
plot(X_1(I),smoothY_1(I),'Color',Colors(idx_1(I),:)
plot(X_1(I),smoothY_1(I))
,两者都没有返回曲线。
a=unique(a)
删除重复点。但是
[~,~,a]=unique(a,'stable')
只需对向量重新排序:
[2 2 3 3 3 1 1 1]
变成
[1 2 3 3 3 3]
。关于情节,你的代码是正确的,所以它应该工作!但是我怀疑你的X_1和smoothY_1有不止一个维度,你肯定有不止一个参数来计算集群。因此,请尝试类似于
plot(X_1(1,:),smoothY_1(1,:)
plot(X_1(:,1),smoothY_1(:,1))
来绘制第一个参数。谢谢,这个独特的函数工作得非常好。不过,我还是不能把情节搞清楚。我的X_1和Y_1阵列都是“1825x1双精度”。我尝试了
plot(X_1(1,:),smoothY_1(1,:)
但没有绘图,我尝试了
plot(X_1(:,1),smoothY_1(:,1))
并且有一个连续的绘图,但只有一种颜色。和
绘图(X_1(i,1),平滑_1(i,1),“-”,“颜色”,颜色(idx_1_排序(i),:)
仍然没有绘图。我想我必须包括LineSpec,才能根据集群索引使用不同的颜色;jetc=喷射(长度(唯一(a));jeta=jetc(a,:);散布(X_1(:,1),光滑的_1(:,1),25,jeta,'filled')