机器学习 谱聚类 无监督分类算法 实列

谱聚类简介

谱聚类是从图论中演化出来的算法,后来在聚类中得到了广泛的应用。它的主要思想是把所有的数据看作空间中的点,这些点之间可以用边连接起来。距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高,通过对所有数据点组成的图进行切图,让切图后不同的子图间边权重和尽可能的低,而子图内的边权重和尽可能的高,从而达到聚类的目的。

谱聚类原理

谱聚类算法是一个使用起来较为容易但是从原理上不是那么容易理解的算法。对于谱聚类算法我们可以归纳为以下的步骤:
输入:样本集D=(x1,x2,…,xn),相似矩阵的生成方式, 降维后的维度k1, 聚类方法,聚类后的维度k2
输出: 簇划分C(c1,c2,…ck2).

  1. 根据输入的相似矩阵的生成方式构建样本的相似矩阵S
    2)根据相似矩阵S构建邻接矩阵W,构建度矩阵D
    3)计算出拉普拉斯矩阵L
    4)构建标准化后的拉普拉斯矩阵D−1/2LD−1/2
    5)计算D−1/2LD−1/2最小的k1个特征值所各自对应的特征向量f
  2. 将各自对应的特征向量f组成的矩阵按行标准化,最终组成n×k1维的特征矩阵F
    7)对F中的每一行作为一个k1维的样本,共n个样本,用输入的聚类方法进行聚类,聚类维数为k2。
    8)得到簇划分C(c1,c2,…ck2).

谱聚类算法总结

谱聚类的主要优点

  1. 谱聚类只需要数据之间的相似度矩阵,因此对于处理稀疏数据的聚类很有效。这点传统聚类算法比如K-Means很难做到
  2. 由于使用了降维,因此在处理高维数据聚类时的复杂度比传统聚类算法好。

谱聚类的主要缺点

  1. 如果最终聚类的维度非常高,则由于降维的幅度不够,谱聚类的运行速度和最后的聚类效果均不好。
  2. 聚类效果依赖于相似矩阵,不同的相似矩阵得到的最终聚类效果可能很不同。
# 导入相关模块和导入数据集
import numpy as np
from sklearn.cluster import spectral_clustering
from sklearn.datasets import make_blobs
from sklearn import metrics
# 生成样本数据
centers = [[1, 1], [-1, -1], [1, -1]]
X, _ = make_blobs(n_samples=10000, centers=centers, cluster_std=0.6)
#变换成矩阵,输入必须是对称矩阵
metrics_metrix = (-1 * metrics.pairwise.pairwise_distances(X)).astype(np.int32)
metrics_metrix += -1 * metrics_metrix.min()
#设置谱聚类函数
n_clusters_= 4
labels = spectral_clustering(metrics_metrix,n_clusters=n_clusters_)
import matplotlib.pyplot as plt
from itertools import cycle
# 设置输出中文
# plt.rcParams['font.sans-serif']=['SimHei']
# plt.rcParams['axes.unicode_minus'] =False 
# 对算法聚类结果进行可视化
colors = cycle('bgrcmykbgrcmykbgrcmykbgrcmyk')
for k, col in zip(range(n_clusters_), colors):
    #根据lables中的值是否等于k,重新组成一个True、False的数组
    my_members = labels == k
    #X[my_members, 0] 取出my_members对应位置为True的值的横坐标
    plt.plot(X[my_members, 0], X[my_members, 1], col + '.')
plt.title("ll")
plt.show()

在这里插入图片描述

from sklearn.cluster import spectral_clustering
from sklearn.datasets import make_blobs
from sklearn import metrics
import matplotlib.pyplot as plt
import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import scale
from sklearn.datasets import load_iris  
iris = load_iris()
from pandas import DataFrame
df = DataFrame(iris.data,columns = iris.feature_names)
df['type'] = iris.target
df #查看数据

在这里插入图片描述

data = scale(iris.data)
reduced_data = PCA(n_components=2).fit_transform(iris.data)
metrics_metrix = (-1 * metrics.pairwise.pairwise_distances(reduced_data)).astype(np.int32)
metrics_metrix += -1 * metrics_metrix.min()

labels = spectral_clustering(metrics_metrix,n_clusters=3)
import matplotlib.pyplot as plt
color = ['r','g','b']
for i in range(len(labels)):
    plt.plot(reduced_data[i, 0], reduced_data[i, 1],c = color[labels[i]] , marker='.' )
plt.title("SpectralClustering",size = 16)
plt.show()


在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值