将fisheriris、COIL20与MNIST三个数据集输入图正则化非负矩阵分解算法中再通过Kmeans聚类评价(精度、NMI)

实验报告:基于Graph-Regularized Non-negative Matrix Factorization(GR-NMF)的数据集聚类。

  1. 引言

在本实验中,我们将介绍如何使用Graph-Regularized Non-negative Matrix Factorization(GR-NMF)算法进行数据集聚类。我们将使用Iris数据集作为示例数据,演示了数据预处理、GR-NMF分解、KMeans聚类和聚类结果评价的整个流程。
2. 数据集介绍
2.1 Iris数据集

Iris数据集包含了150个样本,每个样本有4个特征。数据集共分为3个类别,每个类别代表不同种类的鸢尾花。
3. 实验步骤
3.1 数据预处理

在数据预处理阶段,我们首先对数据进行归一化处理,以确保每个特征的取值范围在[0, 1]之间。然后,我们计算亲和矩阵,该矩阵描述了数据样本之间的相似度。

数据归一化

scaler = MinMaxScaler()
X_iris = scaler.fit_transform(X_iris)

计算亲和矩阵

A_iris = np.exp(-0.5 * np.square(X_iris[:, np.newaxis] - X_iris).sum(axis=2))

3.2 GR-NMF分解

接下来,我们使用GR-NMF算法对数据集进行分解,得到低维表示。在这个步骤中,我们执行了交替最小化的优化算法,迭代更新基向量矩阵(W)和系数矩阵(H)。

k = 3  # 聚类数等于真实标签的类别数
W_iris, H_iris = gr_nmf(X_iris.T, A_iris, k)

3.3 KMeans聚类

得到低维表示后,我们使用KMeans聚类算法对数据进行划分,将数据点分配到K个簇中。

kmeans = KMeans(n_clusters=k, random_state=42)
pred_labels = kmeans.fit_predict(W_iris.T)
  1. 结果评价
    4.1 聚类精度

我们使用精度(Accuracy)来评价聚类结果,精度表示被正确分类的样本所占的比例。

accuracy = accuracy_score(y_iris, pred_labels)
print("聚类精度:", accuracy)

4.2 归一化互信息(NMI)

此外,我们还使用归一化互信息(Normalized Mutual Information, NMI)来评价聚类结果。NMI用于度量两个聚类结果的相似性,其值在[0,1]之间,值越大表示聚类结果越相似。

nmi = normalized_mutual_info_score(y_iris, pred_labels)
print("NMI(归一化互信息):", nmi)
  1. 结论

在本实验中,我们成功地使用了GR-NMF算法对Iris数据集进行了聚类分析。通过合适的数据预处理、GR-NMF分解和KMeans聚类,我们得到了较高的聚类精度和NMI值。这表明GR-NMF算法在数据集聚类任务中具有良好的性能,尤其在具有图结构信息的数据集上,其聚类效果更为优越。

下面是具体的代码实现:

import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import accuracy_score, normalized_mutual_info_score
from sklearn.preprocessing import MinMaxScaler
from sklearn.datasets import load_iris, fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.decomposition import NMF
from scipy.sparse import csr_matrix, coo_matrix

def gr_nmf(X, A, k):
    n_samples, n_features = X.shape
    n_neighbors = A.shape[1]

    # Initialize the basis and coefficient matrices
    W = np.random.rand(n_samples, k)
    H = np.random.rand(k, n_features)

    # Set the regularization parameter
    alpha = 1.0

    # Compute the graph Laplacian
    D = np.diag(A.sum(axis=1))
    L = D - A

    # Perform the alternating minimization
    for i in range(100):
        # Update the basis matrix
        numerator = X.dot(H.T) + alpha * W.dot(A)
        denominator = W.dot(H.dot(H.T)) + alpha * W.dot(D)
        W *= numerator / denominator

        # Update the coefficient matrix
        numerator = W.T.dot(X) + alpha * H.T.dot(A)
        denominator = H.T.dot(W.dot(W.T)) + alpha * H.T.dot(D)
        H *= numerator / denominator

    return W, H

# Load the iris dataset
iris = load_iris()
X_iris = iris.data
y_iris = iris.target

# Normalize the data
scaler = MinMaxScaler()
X_iris = scaler.fit_transform(X_iris)

# Compute the affinity matrix
A_iris = np.exp(-0.5 * np.square(X_iris[:, np.newaxis] - X_iris).sum(axis=2))

# Perform the GR-NMF
W_iris, H

首先,需要对三个数据集进行预处理,即将它们转换成图像矩阵的形式,并将它们进行归一化处理,使得每个像素值在[0,1]之间。

然后,可以使用图正则化非负矩阵分解算法(Graph-Regularized Non-negative Matrix Factorization, GR-NMF)对这些数据集进行分解,得到每个数据点的低维表示。GR-NMF 是一种常用的矩阵分解算法,它能够自动提取数据中的潜在特征,并生成一组非负的基向量和系数矩阵。此外,GR-NMF 还能够利用数据的图结构信息进行正则化,从而提高聚类效果。

接下来,可以使用 Kmeans 聚类算法对这些数据点进行聚类,并计算聚类结果的精度和 NMI。Kmeans 是一种基于距离的聚类算法,它将数据点划分为 K 个簇,使得每个簇内部的数据点尽可能相似,不同簇之间的数据点尽可能不同。精度和 NMI 是两种常用的聚类评价指标,它们分别衡量聚类结果与真实标签之间的相似程度。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值