如果我想把刚刚那个P矩阵用高斯聚类算法分成三类,应该怎么修改代码呢
时间: 2024-03-11 14:48:09 浏览: 122
要将矩阵 `P` 用高斯聚类算法分成三类,可以使用 MATLAB 自带的 `kmeans` 函数。具体操作如下:
1. 将矩阵 `P` 做归一化处理,使得每个特征的均值为 0,方差为 1。这可以使用 MATLAB 自带的 `zscore` 函数实现,具体代码如下:
```
P_norm = zscore(P);
```
2. 使用 `kmeans` 函数将 `P_norm` 分成三类,具体代码如下:
```
[idx, C] = kmeans(P_norm, 3);
```
`idx` 是一个长度为 `size(P,1)` 的向量,表示每个数据点所属的聚类类别。`C` 是一个 3x2 的矩阵,表示三个聚类的中心点坐标。
3. 根据聚类结果,将数据点绘制成散点图。具体操作和之前的代码类似,只需要将颜色列表和标记符号列表改成三种即可。完整代码如下:
```
P_norm = zscore(P);
[idx, C] = kmeans(P_norm, 3);
we1 = ['.r', '.g', '.b'];
we2 = ['xr', 'xg', 'xb'];
for i = 1:size(P, 1)
plot(P(i, 1), P(i, 2), we2(idx(i), :), 'MarkerSize', 12);
hold on;
end
plot(C(:, 1), C(:, 2), 'ko', 'MarkerSize', 10, 'LineWidth', 2);
```
在这段代码中,`we1` 和 `we2` 分别包含三种颜色和三种标记符号,用于绘制三个聚类的数据点。`plot` 函数中的第三个参数使用了 `idx(i)`,表示第 `i` 个数据点所属的聚类类别,从而确定该数据点使用哪种颜色和标记符号。最后,使用 `plot` 函数将三个聚类的中心点绘制成黑色圆圈。
阅读全文