用PyTorch训练一个简单的K-means无监督算法机器学习模型

K-means 是一种无监督学习算法,常用于聚类分析。在 PyTorch 中,可以自己实现 K-means 算法。以下是一个简单的例子,展示如何使用 PyTorch 实现 K-means。
 

import torch
import torch.nn as nn

class KMeans(nn.Module):
    def __init__(self, n_clusters, n_features):
        super(KMeans, self).__init__()
        self.n_clusters = n_clusters
        self.centers = nn.Parameter(torch.randn(n_clusters, n_features))

    def forward(self, x, max_iter=100):
        for _ in range(max_iter):
            # 计算每个样本到聚类中心的距离
            distances = torch.cdist(x, self.centers)

            # 找到每个样本距离最近的聚类中心
            _, labels = torch.min(distances, dim=1)

            # 更新聚类中心为每个簇内样本的均值
            for i in range(self.n_clusters):
                cluster_points = x[labels == i]
                if len(cluster_points) > 0:
                    self.centers[i] = torch.mean(cluster_points, dim=0)

        return labels

# 生成一些示例数据
data = torch.randn(100, 2)

# 创建 KMeans 模型
kmeans = KMeans(n_clusters=3, n_features=2)

# 运行 K-means 算法
cluster_labels = kmeans(data)

# 打印聚类结果
print("Cluster Labels:", cluster_labels)

这个简单的实现中,`KMeans` 类继承自 `nn.Module`,它有两个参数,`n_clusters` 表示簇的数量,`n_features` 表示每个样本的特征数。在 `forward` 方法中,通过迭代更新聚类中心,最终得到每个样本所属的簇。 

print(data)

用于打印 PyTorch 张量 `data` 的值。当你运行这行代码时,它将在控制台或输出窗口中显示 `data` 张量的内容,以便你可以查看它的值。

如果 `data` 是一个二维张量,这个语句会打印出张量的每一行。如果 `data` 是一个更高维度的张量,它将显示相应的结构。

例如,如果 `data` 是一个形状为 (100, 2) 的张量,它将打印出类似以下的内容:

tensor([[value11, value12],
        [value21, value22],
        ...
        [value100, value101]])

其中 `value11`、`value12` 等表示张量中的具体数值。

猜你喜欢

转载自blog.csdn.net/qq_50942093/article/details/134720804
今日推荐