基于鸢尾花数据集的四种聚类算法(kmeans,层次聚类,DBSCAN,FCM)和学习向量量化对比

基于鸢尾花数据集的四种聚类算法(kmeans,层次聚类,DBSCAN,FCM)和学习向量量化对比

注:下面的代码可能需要做一点参数调整,才得到所有我的运行结果。

kmeans算法:

import matplotlib.pyplot as plt # 导入matplotlib的库
import numpy as np # 导入numpy的包
from sklearn import datasets #导入数据集
from sklearn.decomposition import PCA # PCA主成分分析类
from sklearn.metrics import silhouette_score
from sklearn.metrics import calinski_harabasz_score
from sklearn.metrics import davies_bouldin_score
iris = datasets.load_iris() #加载iris数据集
X = iris.data #加载特征数据
# Y = iris.target #加载标签数据
#绘制数据分布图
y = iris.target
X = iris.data
#X.shape
#调用PCA
pca = PCA(n_components=2) # 降到2维
pca = pca.fit(X) #拟合模型
X_dr = pca.transform(X) #获取新矩阵 (降维后的)
#X_dr#也可以fit_transform一步到位
#X_dr = PCA(2).fit_transform(X)#plt.figure()
#plt.scatter(X_dr[y==0, 0], X_dr[y==0, 1], c="red", label=iris.target_names[0]) 
#plt.scatter(X_dr[y==1, 0], X_dr[y==1, 1], c="black", label=iris.target_names[1])
#plt.scatter(X_dr[y==2, 0], X_dr[y==2, 1], c="orange", label=iris.target_names[2])
#plt.legend()
#plt.title('PCA of IRIS dataset')
#plt.show()print("===K-means聚类===")
from sklearn.cluster import KMeans # 引入KMeans模块estimator = KMeans(n_clusters=3).fit(X)  # 构造聚类器
label_pred = estimator.labels_  # 获取聚类标签# 评估指标列表  
silhouette_avg_scores = []  Calinski_Harabasz_scores = []  
Davies_Bouldin_scores = []  
# 遍历不同的n_clusters值  
for n_clusters in range(2, 11):  kmeans = KMeans(n_clusters=n_clusters)  kmeans.fit(X)  labels = kmeans.labels_  silhouette_avg = silhouette_score(X, kmeans.labels_)  print(silhouette_avg)
# 2. Calinski-Harabasz指数calinski_haraba=calinski_harabasz_score(X, kmeans.labels_)print(calinski_haraba)# 3. DB指数(Davies-Bouldin Index)davies_bouldin=davies_bouldin_score(X, kmeans.labels_)Davies_Bouldin_scores.append(davies_bouldin)Calinski_Harabasz_scores.append(calinski_haraba)silhouette_avg_scores.append(silhouette_avg)  # 绘制图形  
plt.plot(range(2, 11), silhouette_avg_scores, marker='o', label='Silhouette Coefficient')  plt.title('Silhouette Coefficient for Different n_clusters-kmeans')  
plt.xlabel('Number of clusters (n_clusters)')  
plt.ylabel('Silhouette Coefficient')  
plt.legend()
plt.show()plt.plot(range(2, 11), Calinski_Harabasz_scores, marker='o', label=' Calinski-Harabasz')  
plt.title(' Calinski-Harabaszfor Different n_clusters-kmeans')  
plt.xlabel('Number of clusters (n_clusters)')  
plt.ylabel('Calinski Harabasz')  
plt.legend()
plt.show()plt.plot(range(2, 11), Davies_Bouldin_scores, marker='o', label='Davies-Bouldin Index')  
plt.title('Davies-Bouldin Index for Different n_clusters-kmeans')  
plt.xlabel('Number of clusters (n_clusters)')  
plt.ylabel('Davies-Bouldin Index')  
plt.legend()
plt.show()

运行结果如下:
在这里插入图片描述

DBSCAN:

import matplotlib.pyplot as plt # 导入matplotlib的库
import numpy as np # 导入numpy的包
from sklearn import datasets #导入数据集
from sklearn.decomposition import PCA # PCA主成分分析类
from sklearn.metrics import silhouette_score
from sklearn.metrics import calinski_harabasz_score
from sklearn.metrics import davies_bouldin_scorefrom sklearn.cluster import DBSCAN # 引入DBSCAN模块iris = datasets.load_iris() #加载iris数据集
X = iris.data #加载特征数据
# Y = iris.target #加载标签数据
#绘制数据分布图
y = iris.target
X = iris.data
#X.shape
##调用PCA
#pca = PCA(n_components=2) # 降到2维
#pca = pca.fit(X) #拟合模型
#X_dr = pca.transform(X) #获取新矩阵 (降维后的)
##X_dr#也可以fit_transform一步到位
#X_dr = PCA(2).fit_transform(X)#plt.figure()
#plt.scatter(X_dr[y==0, 0], X_dr[y==0, 1], c="red", label=iris.target_names[0]) 
#plt.scatter(X_dr[y==1, 0], X_dr[y==1, 1], c="black", label=iris.target_names[1])
#plt.scatter(X_dr[y==2, 0], X_dr[y==2, 1], c="orange", label=iris.target_names[2])
#plt.legend()
#plt.title('PCA of IRIS dataset')
#plt.show()print("===DBSCAN聚类===")
from sklearn.cluster import KMeans # 引入KMeans模块estimator = KMeans(n_clusters=3).fit(X)  # 构造聚类器
label_pred = estimator.labels_  # 获取聚类标签# 评估指标列表  
silhouette_avg_scores = []  Calinski_Harabasz_scores = []  
Davies_Bouldin_scores = []  
# 遍历不同的n_clusters值  
for n_clusters in range(2, 11):  dbscan = DBSCAN(eps=0.4, min_samples=n_clusters).fit(X) #导入DBSCAN模块进行训练,在一个邻域的半径内min_samples数的邻域eps被认为是一个簇。请记住,初始点包含在min_samples中。label_pred = dbscan.labels_ # labels为每个数据的簇标签,不在任何“高密度”集群中的“noisy”样本返回-1silhouette_avg = silhouette_score(X, dbscan.labels_)  print(silhouette_avg)# 2. Calinski-Harabasz指数calinski_haraba=calinski_harabasz_score(X, dbscan.labels_)print(calinski_haraba)# 3. DB指数(Davies-Bouldin Index)davies_bouldin=davies_bouldin_score(X, dbscan.labels_)Davies_Bouldin_scores.append(davies_bouldin)Calinski_Harabasz_scores.append(calinski_haraba)silhouette_avg_scores.append(silhouette_avg)  # 绘制图形  
plt.plot(range(2, 11), silhouette_avg_scores, marker='o', label='Silhouette Coefficient')  plt.title('Silhouette Coefficient for Different min_samples-DBSCAN-eps=0.4')  
plt.xlabel('Number of min_samples (min_samples)')  
plt.ylabel('Silhouette Coefficient')  
plt.legend()
plt.show()plt.plot(range(2, 11), Calinski_Harabasz_scores, marker='o', label=' Calinski-Harabasz')  
plt.title('Calinski-Harabasz for Different min_samples-DBSCAN-eps=0.4')  
plt.xlabel('Number of min_samples (min_samples)')  
plt.ylabel('Calinski Harabasz')  
plt.legend()
plt.show()plt.plot(range(2, 11), Davies_Bouldin_scores, marker='o', label='Davies-Bouldin Index')  
plt.title('Davies-Bouldin Index for Different min_samples-DBSCAN-eps=0.4')  
plt.xlabel('Number of min_samples (min_samples)')  
plt.ylabel('Davies-Bouldin Index')  
plt.legend()
plt.show()# 评估指标列表  
silhouette_avg_scores = []  Calinski_Harabasz_scores = []  
Davies_Bouldin_scores = []  xindex= [0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,1.1,1.2,1.4,1.6]
for s in xindex:  print(s)dbscan = DBSCAN(eps=s, min_samples=3).fit(X) #导入DBSCAN模块进行训练,在一个邻域的半径内min_samples数的邻域eps被认为是一个簇。请记住,初始点包含在min_samples中。label_pred = dbscan.labels_ # labels为每个数据的簇标签,不在任何“高密度”集群中的“noisy”样本返回-1silhouette_avg = silhouette_score(X, dbscan.labels_)  print(silhouette_avg)# 2. Calinski-Harabasz指数calinski_haraba=calinski_harabasz_score(X, dbscan.labels_)print(calinski_haraba)# 3. DB指数(Davies-Bouldin Index)davies_bouldin=davies_bouldin_score(X, dbscan.labels_)Davies_Bouldin_scores.append(davies_bouldin)Calinski_Harabasz_scores.append(calinski_haraba)silhouette_avg_scores.append(silhouette_avg)  # 绘制图形  
plt.plot(xindex, silhouette_avg_scores, marker='o', label='Silhouette Coefficient')  plt.title('Silhouette Coefficient for Different min_samples-DBSCAN- min_samples=3')  
plt.xlabel('eps')  
plt.ylabel('Silhouette Coefficient')  
plt.legend()
plt.show()plt.plot(xindex, Calinski_Harabasz_scores, marker='o', label=' Calinski-Harabasz')  
plt.title('Calinski-Harabasz for Different min_samples-DBSCAN- min_samples=3')  
plt.xlabel('eps')  
plt.ylabel('Calinski Harabasz')  
plt.legend()
plt.show()plt.plot(xindex, Davies_Bouldin_scores, marker='o', label='Davies-Bouldin Index')  
plt.title('Davies-Bouldin Index for Different min_samples-DBSCAN- min_samples=3')  
plt.xlabel('eps')  
plt.ylabel('Davies-Bouldin Index')  
plt.legend()
plt.show()

运行结果:
在这里插入图片描述
在这里插入图片描述层次聚类:

import matplotlib.pyplot as plt # 导入matplotlib的库
import numpy as np # 导入numpy的包
from sklearn import datasets #导入数据集
from sklearn.decomposition import PCA # PCA主成分分析类
from sklearn.metrics import silhouette_score
from sklearn.metrics import calinski_harabasz_score
from sklearn.metrics import davies_bouldin_scorefrom sklearn.cluster import AgglomerativeClustering
iris = datasets.load_iris() #加载iris数据集
X = iris.data #加载特征数据
# Y = iris.target #加载标签数据
#绘制数据分布图
y = iris.target
X = iris.data
#X.shape
#调用PCA
pca = PCA(n_components=2) # 降到2维
pca = pca.fit(X) #拟合模型
X_dr = pca.transform(X) #获取新矩阵 (降维后的)
#X_dr#也可以fit_transform一步到位
#X_dr = PCA(2).fit_transform(X)#plt.figure()
#plt.scatter(X_dr[y==0, 0], X_dr[y==0, 1], c="red", label=iris.target_names[0]) 
#plt.scatter(X_dr[y==1, 0], X_dr[y==1, 1], c="black", label=iris.target_names[1])
#plt.scatter(X_dr[y==2, 0], X_dr[y==2, 1], c="orange", label=iris.target_names[2])
#plt.legend()
#plt.title('PCA of IRIS dataset')
#plt.show()print("===K-means聚类===")
from sklearn.cluster import KMeans # 引入KMeans模块estimator = KMeans(n_clusters=3).fit(X)  # 构造聚类器
label_pred = estimator.labels_  # 获取聚类标签# 评估指标列表  
silhouette_avg_scores = []  Calinski_Harabasz_scores = []  
Davies_Bouldin_scores = []  
# 遍历不同的n_clusters值  
for n_clusters in range(2, 11):  agg = AgglomerativeClustering( n_clusters=n_clusters)agg.fit(X)  labels = agg.labels_  silhouette_avg = silhouette_score(X, agg.labels_)  
# 2. Calinski-Harabasz指数calinski_haraba=calinski_harabasz_score(X, agg.labels_)# 3. DB指数(Davies-Bouldin Index)davies_bouldin=davies_bouldin_score(X, agg.labels_)Davies_Bouldin_scores.append(davies_bouldin)Calinski_Harabasz_scores.append(calinski_haraba)silhouette_avg_scores.append(silhouette_avg)  # 绘制图形  
plt.plot(range(2, 11), silhouette_avg_scores, marker='o', label='Silhouette Coefficient')  plt.title('Silhouette Coefficient for Different n_clusters-AgglomerativeClustering')  
plt.xlabel('Number of clusters (n_clusters)')  
plt.ylabel('Silhouette Coefficient')  
plt.legend()
plt.show()plt.plot(range(2, 11), Calinski_Harabasz_scores, marker='o', label=' Calinski-Harabasz')  
plt.title(' Calinski-Harabaszfor Different n_clusters-AgglomerativeClustering')  
plt.xlabel('Number of clusters (n_clusters)')  
plt.ylabel('Calinski Harabasz')  
plt.legend()
plt.show()plt.plot(range(2, 11), Davies_Bouldin_scores, marker='o', label='Davies-Bouldin Index')  
plt.title('Davies-Bouldin Index for Different n_clusters-AgglomerativeClustering')  
plt.xlabel('Number of clusters (n_clusters)')  
plt.ylabel('Davies-Bouldin Index')  
plt.legend()
plt.show()

运行结果:
在这里插入图片描述
FCM算法:

代码:

import matplotlib.pyplot as plt # 导入matplotlib的库
import numpy as np # 导入numpy的包
from sklearn import datasets #导入数据集
from sklearn.decomposition import PCA # PCA主成分分析类
from sklearn.metrics import silhouette_score
from sklearn.metrics import calinski_harabasz_score
from sklearn.metrics import davies_bouldin_score
from sklearn.cluster import FeatureAgglomeration
from sklearn.cluster import AgglomerativeClustering
iris = datasets.load_iris() #加载iris数据集
X = iris.data #加载特征数据
# Y = iris.target #加载标签数据
#绘制数据分布图
y = iris.target
X = iris.data
#X.shape
#调用PCA
pca = PCA(n_components=2) # 降到2维
pca = pca.fit(X) #拟合模型
X_dr = pca.transform(X) #获取新矩阵 (降维后的)
#X_dr#也可以fit_transform一步到位
#X_dr = PCA(2).fit_transform(X)#plt.figure()
#plt.scatter(X_dr[y==0, 0], X_dr[y==0, 1], c="red", label=iris.target_names[0]) 
#plt.scatter(X_dr[y==1, 0], X_dr[y==1, 1], c="black", label=iris.target_names[1])
#plt.scatter(X_dr[y==2, 0], X_dr[y==2, 1], c="orange", label=iris.target_names[2])
#plt.legend()
#plt.title('PCA of IRIS dataset')
#plt.show()print("===K-means聚类===")
from sklearn.cluster import KMeans # 引入KMeans模块
def FCM(X, c_clusters=3, m=2, eps=10):membership_mat = np.random.random((len(X), c_clusters))   # 生成随机二维数组shape(150,3),随机初始化隶属矩阵# 这一步的操作是为了使Xi的隶属度总和为1membership_mat = np.divide(membership_mat, np.sum(membership_mat, axis=1)[:, np.newaxis])while True:working_membership_mat = membership_mat ** m   # shape->(150,3)# 根据公式计算聚类中心点Centroids.shape->(3,4)Centroids = np.divide(np.dot(working_membership_mat.T, X), np.sum(working_membership_mat.T, axis=1)[:, np.newaxis])# 该矩阵保存所有实点到每个聚类中心的欧式距离n_c_distance_mat = np.zeros((len(X), c_clusters)) # shape->(150,3)for i, x in enumerate(X):for j, c in enumerate(Centroids):n_c_distance_mat[i][j] = np.linalg.norm(x-c, 2)   # 计算l2范数(欧氏距离)new_membership_mat = np.zeros((len(X), c_clusters))# 根据公式计算模糊矩阵Ufor i, x in enumerate(X):for j, c in enumerate(Centroids):new_membership_mat[i][j] = 1. / np.sum((n_c_distance_mat[i][j] / n_c_distance_mat[i]) ** (2 / (m-1)))if np.sum(abs(new_membership_mat - membership_mat)) < eps:breakmembership_mat = new_membership_matreturn np.argmax(new_membership_mat, axis=1)# 评估指标列表  
silhouette_avg_scores = []  Calinski_Harabasz_scores = []  
Davies_Bouldin_scores = []  
# 遍历不同的n_clusters值  
for n_clusters in range(2, 11):  print(n_clusters)fcm =FCM(X, c_clusters=n_clusters)print(len(fcm ))silhouette_avg = silhouette_score(X, fcm)  print(silhouette_avg)
# 2. Calinski-Harabasz指数calinski_haraba=calinski_harabasz_score(X, fcm)print(calinski_haraba)# 3. DB指数(Davies-Bouldin Index)davies_bouldin=davies_bouldin_score(X,fcm)Davies_Bouldin_scores.append(davies_bouldin)Calinski_Harabasz_scores.append(calinski_haraba)silhouette_avg_scores.append(silhouette_avg)  # 绘制图形  
plt.plot(range(2, 11), silhouette_avg_scores, marker='o', label='Silhouette Coefficient')  plt.title('Silhouette Coefficient for Different n_clusters-FCM')  
plt.xlabel('Number of clusters (n_clusters)')  
plt.ylabel('Silhouette Coefficient')  
plt.legend()
plt.show()plt.plot(range(2, 11), Calinski_Harabasz_scores, marker='o', label=' Calinski-Harabasz')  
plt.title(' Calinski-Harabaszfor Different n_clusters-FCM')  
plt.xlabel('Number of clusters (n_clusters)')  
plt.ylabel('Calinski Harabasz')  
plt.legend()
plt.show()plt.plot(range(2, 11), Davies_Bouldin_scores, marker='o', label='Davies-Bouldin Index')  
plt.title('Davies-Bouldin Index for Different n_clusters-FCM')  
plt.xlabel('Number of clusters (n_clusters)')  
plt.ylabel('Davies-Bouldin Index')  
plt.legend()
plt.show()

在这里插入图片描述
lvp算法:

import matplotlib.pyplot as plt # 导入matplotlib的库
import numpy as np # 导入numpy的包
from sklearn import datasets #导入数据集
from sklearn.decomposition import PCA # PCA主成分分析类
from sklearn.metrics import silhouette_score
from sklearn.metrics import calinski_harabasz_score
from sklearn.metrics import davies_bouldin_score
from sklearn.cluster import FeatureAgglomeration
from sklearn.cluster import AgglomerativeClustering# 使用LVQ进行聚类
from sklearn_lvq import GlvqModeliris = datasets.load_iris() #加载iris数据集
X = iris.data #加载特征数据
# Y = iris.target #加载标签数据
#绘制数据分布图
y = iris.target
X = iris.data
#X.shape
#调用PCA
pca = PCA(n_components=2) # 降到2维
pca = pca.fit(X) #拟合模型
X_dr = pca.transform(X) #获取新矩阵 (降维后的)
#X_dr#也可以fit_transform一步到位
#X_dr = PCA(2).fit_transform(X)#plt.figure()
#plt.scatter(X_dr[y==0, 0], X_dr[y==0, 1], c="red", label=iris.target_names[0]) 
#plt.scatter(X_dr[y==1, 0], X_dr[y==1, 1], c="black", label=iris.target_names[1])
#plt.scatter(X_dr[y==2, 0], X_dr[y==2, 1], c="orange", label=iris.target_names[2])
#plt.legend()
#plt.title('PCA of IRIS dataset')
#plt.show()
def FCM(X, c_clusters=3, m=2, eps=10):membership_mat = np.random.random((len(X), c_clusters))   # 生成随机二维数组shape(150,3),随机初始化隶属矩阵# 这一步的操作是为了使Xi的隶属度总和为1membership_mat = np.divide(membership_mat, np.sum(membership_mat, axis=1)[:, np.newaxis])while True:working_membership_mat = membership_mat ** m   # shape->(150,3)# 根据公式计算聚类中心点Centroids.shape->(3,4)Centroids = np.divide(np.dot(working_membership_mat.T, X), np.sum(working_membership_mat.T, axis=1)[:, np.newaxis])# 该矩阵保存所有实点到每个聚类中心的欧式距离n_c_distance_mat = np.zeros((len(X), c_clusters)) # shape->(150,3)for i, x in enumerate(X):for j, c in enumerate(Centroids):n_c_distance_mat[i][j] = np.linalg.norm(x-c, 2)   # 计算l2范数(欧氏距离)new_membership_mat = np.zeros((len(X), c_clusters))# 根据公式计算模糊矩阵Ufor i, x in enumerate(X):for j, c in enumerate(Centroids):new_membership_mat[i][j] = 1. / np.sum((n_c_distance_mat[i][j] / n_c_distance_mat[i]) ** (2 / (m-1)))if np.sum(abs(new_membership_mat - membership_mat)) < eps:breakmembership_mat = new_membership_matreturn np.argmax(new_membership_mat, axis=1)# 评估指标列表  
silhouette_avg_scores = []  Calinski_Harabasz_scores = []  
Davies_Bouldin_scores = []  
from sklearn.datasets import make_blobs# 遍历不同的n_clusters值  
for n_clusters in range(2, 11):  print(n_clusters)zX, y_true = make_blobs(n_samples=150, centers=n_clusters, cluster_std=0.6, random_state=0)lvq = GlvqModel()lvq.fit(X, y_true)# 可视化聚类结果fcm = lvq.predict(X)print(len(fcm ))silhouette_avg = silhouette_score(X, fcm)  print(silhouette_avg)
# 2. Calinski-Harabasz指数calinski_haraba=calinski_harabasz_score(X, fcm)print(calinski_haraba)# 3. DB指数(Davies-Bouldin Index)davies_bouldin=davies_bouldin_score(X,fcm)Davies_Bouldin_scores.append(davies_bouldin)Calinski_Harabasz_scores.append(calinski_haraba)silhouette_avg_scores.append(silhouette_avg)  # 绘制图形  
plt.plot(range(2, 11), silhouette_avg_scores, marker='o', label='Silhouette Coefficient')  plt.title('Silhouette Coefficient for Different n_clusters--lvp')  
plt.xlabel('Number of clusters (n_clusters)')  
plt.ylabel('Silhouette Coefficient')  
plt.legend()
plt.show()plt.plot(range(2, 11), Calinski_Harabasz_scores, marker='o', label=' Calinski-Harabasz')  
plt.title(' Calinski-Harabaszfor Different n_clusters--lvp')  
plt.xlabel('Number of clusters (n_clusters)')  
plt.ylabel('Calinski Harabasz')  
plt.legend()
plt.show()plt.plot(range(2, 11), Davies_Bouldin_scores, marker='o', label='Davies-Bouldin Index')  
plt.title('Davies-Bouldin Index for Different n_clusters-lvp')  
plt.xlabel('Number of clusters (n_clusters)')  
plt.ylabel('Davies-Bouldin Index')  
plt.legend()
plt.show()

在这里插入图片描述
最后我们还做了一个所有算法最优参数汇总的代码:

import matplotlib.pyplot as plt # 导入matplotlib的库
import numpy as np # 导入numpy的包
from sklearn import datasets #导入数据集
from sklearn.decomposition import PCA # PCA主成分分析类
iris = datasets.load_iris() #加载iris数据集
X = iris.data #加载特征数据
# Y = iris.target #加载标签数据
#绘制数据分布图
y = iris.target
X = iris.data
#X.shape
#调用PCA
pca = PCA(n_components=2) # 降到2维
pca = pca.fit(X) #拟合模型
X_dr = pca.transform(X) #获取新矩阵 (降维后的)
#X_dr#也可以fit_transform一步到位
X_dr = PCA(2).fit_transform(X)plt.figure()
plt.scatter(X_dr[y==0, 0], X_dr[y==0, 1], c="red", label=iris.target_names[0]) 
plt.scatter(X_dr[y==1, 0], X_dr[y==1, 1], c="black", label=iris.target_names[1])
plt.scatter(X_dr[y==2, 0], X_dr[y==2, 1], c="orange", label=iris.target_names[2])
plt.legend()
plt.title('PCA of IRIS dataset')
plt.show()print("===K-means聚类===")
from sklearn.cluster import KMeans # 引入KMeans模块
estimator = KMeans(n_clusters=3).fit(X)  # 构造聚类器
label_pred = estimator.labels_  # 获取聚类标签
#绘制k-means结果
x0 = X_dr[label_pred == 0]# 获取聚类标签等于0的话,则赋值给x0
x1 = X_dr[label_pred == 1]# 获取聚类标签等于1的话,则赋值给x1
x2 = X_dr[label_pred == 2]# 获取聚类标签等于2的话,则赋值给x2
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label 0')#画label 0的散点图
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label 1')#画label 1的散点图
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='+', label='label 2')#画label 2的散点图
plt.xlabel('K-means')# 设置X轴的标签为K-means
# plt.legend(loc=2)# 设置图标在左上角
plt.title("kmeans+PCA")
plt.show()x0 = X[label_pred == 0]# 获取聚类标签等于0的话,则赋值给x0
x1 = X[label_pred == 1]# 获取聚类标签等于1的话,则赋值给x1
x2 = X[label_pred == 2]# 获取聚类标签等于2的话,则赋值给x2
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label 0')#画laplt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label 1')#画label 1的散点图
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='+', label='label 2')#画label 2的散点图
plt.xlabel('K-means')# 设置X轴的标签为K-means
# plt.legend(loc=2)# 设置图标在左上角
plt.title("kmeans-features[0:2]")
plt.show()#密度聚类之DBSCAN算法
print("===DBSCAN聚类===")
from sklearn.cluster import DBSCAN # 引入DBSCAN模块
dbscan = DBSCAN(eps=1.0, min_samples=3).fit(X) #导入DBSCAN模块进行训练,在一个邻域的半径内min_samples数的邻域eps被认为是一个簇。请记住,初始点包含在min_samples中。
label_pred = dbscan.labels_ # labels为每个数据的簇标签,不在任何“高密度”集群中的“noisy”样本返回-1x0 = X[label_pred == 0] # 获取聚类标签等于0的话,则赋值给x0
x1 = X[label_pred == 1] # 获取聚类标签等于1的话,则赋值给x1
x2 = X[label_pred == 2] # 获取聚类标签等于2的话,则赋值给x2
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label0') # 画label 0的散点图
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label1') # 画label 1的散点图
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='+', label='label2') # 画label 2的散点图
plt.xlabel('DBSCAN')# 设置X轴的标签为DBSCAN
plt.legend(loc=2)# 设置图标在左上角
plt.title("DBSCAN-features[0:2]")
plt.show()x0 = X_dr[label_pred == 0]# 获取聚类标签等于0的话,则赋值给x0
x1 = X_dr[label_pred == 1]# 获取聚类标签等于1的话,则赋值给x1
x2 = X_dr[label_pred == 2]# 获取聚类标签等于2的话,则赋值给x2
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label 0')#画label 0的散点图
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label 1')#画label 1的散点图
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='+', label='label 2')#画label 2的散点图
plt.xlabel('DBSCAN')# 设置X轴的标签为K-means
# plt.legend(loc=2)# 设置图标在左上角
plt.title("DBSCAN+PCA")
plt.show()
from sklearn_lvq import GlvqModelimport numpy as np
from matplotlib import pyplot as plt
from scipy.cluster.hierarchy import dendrogram
from scipy.cluster.hierarchy import linkage, dendrogram
def getLinkageMat(model):children = model.children_cs = np.zeros(len(children))N = len(model.labels_)for i,child in enumerate(children):count = 0for idx in child:count += 1 if idx < N else cs[idx - N]cs[i] = countreturn np.column_stack([children, model.distances_, cs])from sklearn.cluster import AgglomerativeClustering
from sklearn.datasets import make_blobsmodel = AgglomerativeClustering( n_clusters=3)model = model.fit(X)label_pred = model.labels_ # labels为每个数据的簇标签,不在任何“高密度”集群中的“noisy”样本返回-1Z = linkage(X, method='ward', metric='euclidean')
p = dendrogram(Z, 0)
plt.show()x0 = X_dr[label_pred == 0]# 获取聚类标签等于0的话,则赋值给x0
x1 = X_dr[label_pred == 1]# 获取聚类标签等于1的话,则赋值给x1
x2 = X_dr[label_pred == 2]# 获取聚类标签等于2的话,则赋值给x2
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label 0')#画label 0的散点图
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label 1')#画label 1的散点图
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='+', label='label 2')#画label 2的散点图
plt.xlabel('AgglomerativeClustering')# 设置X轴的标签为K-means
# plt.legend(loc=2)# 设置图标在左上角
plt.title("AgglomerativeClustering+PCA")
plt.show()def FCM(X, c_clusters=3, m=2, eps=10):membership_mat = np.random.random((len(X), c_clusters))   # 生成随机二维数组shape(150,3),随机初始化隶属矩阵# 这一步的操作是为了使Xi的隶属度总和为1membership_mat = np.divide(membership_mat, np.sum(membership_mat, axis=1)[:, np.newaxis])while True:working_membership_mat = membership_mat ** m   # shape->(150,3)# 根据公式计算聚类中心点Centroids.shape->(3,4)Centroids = np.divide(np.dot(working_membership_mat.T, X), np.sum(working_membership_mat.T, axis=1)[:, np.newaxis])# 该矩阵保存所有实点到每个聚类中心的欧式距离n_c_distance_mat = np.zeros((len(X), c_clusters)) # shape->(150,3)for i, x in enumerate(X):for j, c in enumerate(Centroids):n_c_distance_mat[i][j] = np.linalg.norm(x-c, 2)   # 计算l2范数(欧氏距离)new_membership_mat = np.zeros((len(X), c_clusters))# 根据公式计算模糊矩阵Ufor i, x in enumerate(X):for j, c in enumerate(Centroids):new_membership_mat[i][j] = 1. / np.sum((n_c_distance_mat[i][j] / n_c_distance_mat[i]) ** (2 / (m-1)))if np.sum(abs(new_membership_mat - membership_mat)) < eps:breakmembership_mat = new_membership_matreturn np.argmax(new_membership_mat, axis=1)fcm =FCM(X, c_clusters=3)x0 = X_dr[fcm == 0]# 获取聚类标签等于0的话,则赋值给x0
x1 = X_dr[fcm == 1]# 获取聚类标签等于1的话,则赋值给x1
x2 = X_dr[fcm == 2]# 获取聚类标签等于2的话,则赋值给x2
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label 0')#画label 0的散点图
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label 1')#画label 1的散点图
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='+', label='label 2')#画label 2的散点图
plt.xlabel('FCM')# 设置X轴的标签为K-means
# plt.legend(loc=2)# 设置图标在左上角
plt.title("FCM+PCA")
plt.show()zX, y_true = make_blobs(n_samples=150, centers=2, cluster_std=0.6, random_state=0)
lvq = GlvqModel()
lvq.fit(X, y)# 可视化聚类结果
lvqp = lvq.predict(X)x0 = X_dr[lvqp == 0]# 获取聚类标签等于0的话,则赋值给x0
x1 = X_dr[lvqp == 1]# 获取聚类标签等于1的话,则赋值给x1
x2 = X_dr[lvqp == 2]# 获取聚类标签等于2的话,则赋值给x2
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label 0')#画label 0的散点图
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label 1')#画label 1的散点图
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='+', label='label 2')#画label 2的散点图
plt.xlabel('lvq')# 设置X轴的标签为K-means
# plt.legend(loc=2)# 设置图标在左上角
plt.title("lvq+PCA")
plt.show()

运行结果:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/7295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音视频开发3 视频基础,图片基础

图片像素&#xff08;Pixel&#xff09; 一张图片是由多少个 像素 构成的。 例如一张图片是由60x50组成的。 位深度 bit depth RGB表示法 红&#xff08;Red&#xff09;、绿&#xff08;Green&#xff09;、蓝&#xff08;Blue&#xff09; 除了24bit&#xff0c;常见的位深…

electron 通信总结

默认开启上下文隔离的情况下 渲染进程调用主进程方法&#xff1a; 主进程 在 main.js 中&#xff0c; 使用 ipcMain.handle&#xff0c;添加要处理的主进程方法 const { ipcMain } require("electron"); 在 electron 中创建 preload.ts 文件&#xff0c;从 ele…

在Linux上使用Selenium驱动Chrome浏览器无头模式

大家好&#xff0c;我们平时在做UI自动化测试的时候&#xff0c;经常会用到Chrome浏览器的无头模式&#xff08;无界面模式&#xff09;&#xff0c;并且将测试代码部署到Linux系统中执行&#xff0c;或者平时我们写个爬虫爬取网站的数据也会使用到&#xff0c;接下来和大家分享…

Elasticsearch初步认识

Elasticsearch初步认识 ES概述基本概念正向索引和倒排索引IK分词器ik_smart最少切分ik_max_word为最细粒度划分 ES索引库基本操作对索引库操作对文档操作 ES概述 Elasticsearch&#xff0c;简称为 ES&#xff0c;是一款非常强大的开源的高扩展的分布式全文检索引擎&#xff0c…

神经网络中的归一化

我们今天介绍一下神经网络中的归一化方法~ 之前学到的机器学习中的归一化是将数据缩放到特定范围内&#xff0c;以消除不同特征之间的量纲和取值范围差异。通过将原始数据缩放到一个特定的范围内&#xff0c;比如[0,1]或者[-1,1]&#xff0c;来消除不同特征之间的量纲和取值范围…

【前沿模型解析】一致性模型CM(一)| 离散时间模型到连续时间模型数学推导

文章目录 1 离散时间模型2 连续时间模型 得到 SDE 随机微分方程2.1 从离散模型到SDE的推理步骤 3 补充&#xff1a;泰勒展开近似 1 − β i \sqrt{1-\beta_i} 1−βi​ ​ CM模型非常重要 引出了LCM等一系列重要工作 CM潜在性模型的数学公式推导并不好理解 一步一步&#xf…

Springboot框架web开发实用功能-02

在些模块中汇总了一些web开发常用的配置和功能。 涉及的模块 springboot-common-config&#xff0c; 端口号&#xff1a;17000 Springboot框架web开发常用功能 Restful接口定义 查询参数 Data public class QueryParam {private String key;private String value; }Control…

C#上位机源程序 下位机单片机实现控制电机

基于C#的上位机编程程序&#xff0c;通过上位机控制下位机实现电脑操作控制步进电机的转动 程序 #include<reg52.h>#define uchar unsigned char#define uint unsigned int#include "2401.h"#include "delay.h"#include "ds18b20.h"sbit I…

力扣每日一题110:平衡二叉树

题目 简单 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,3,3,null,null,4,4] 输出&#xff1a;false示例 3&#xff1a; …

python从0开始学习(四)

目录 前言 1、算数运算符 1.1 //:整除运算符 1.2 %:取模操作 1.3 **&#xff1a;幂运算 2、赋值运算符 3、比较运算符 4、逻辑运算符 5、位运算符 5.1 &&#xff1a;按位与 5.2 |&#xff1a;按位或 5.3 ^&#xff1a;按位异或 5.4 ~&#xff1a;按位取反 5.5…

Linux学习笔记(3)---- Debian测试网速指令及查看是否千兆网卡

测试网速指令 在Debian系统中&#xff0c;测网速的指令主要有以下几种方法&#xff1a; 使用speedtest-cli工具&#xff1a; speedtest-cli是一个常用的网络速度测试工具&#xff0c;可以通过命令行进行安装和运行。首先&#xff0c;需要安装speedtest-cli&#xff1a; sud…

工业物联网技术在生产流程中的应用及优势与挑战——青创智通

工业物联网解决方案-工业IOT-青创智通 随着科技的不断发展&#xff0c;物联网技术逐渐渗透到各个行业中&#xff0c;尤其是在工业领域&#xff0c;工业物联网的应用正在逐步重塑生产流程。本文将探讨工业物联网如何影响生产流程&#xff0c;并分析其带来的优势和挑战。 一、工…

k8s保持pod健康

存活探针 Kubemetes 可以通过存活探针 (liveness probe) 检查容器是否还在运行。可以为 pod 中的每个容器单独指定存活探针。如果探测失败&#xff0c;Kubemetes 将定期执行探针并重新启动容器。 Kubemetes 有以下三种探测容器的机制&#xff1a; HTTP GET 探针对容器的 IP 地…

java学习记录最后一篇

面向对象编程 封装 该露的露&#xff0c;该藏的藏 我们程序设计要追求“高内聚&#xff0c;低耦合”。高内聚就是类的内部数据细节由自己完成&#xff0c;不允许外部干涉&#xff1b;低耦合&#xff1a;仅暴露少量的方法给外部使用。 封装&#xff08;数据的隐藏&#xff0…

AI部署指南

部署指南 建议大家尽可能的自己去部署&#xff0c;如果实在懒得搞&#xff0c;可以找我来帮你部署&#xff0c;详情参考 服务器代部署说明。 由于时间仓促&#xff0c;文档可能尚未详尽&#xff0c;我将在后续逐步补充详细的说明文档。 架构草图 项目依赖 必选依赖 MySQ…

5月3日江苏某厂冷却塔清洗工作汇报-智渍洁

5月3日 施工人员&#xff1a;张能超&#xff0c;张伟&#xff0c;刘平&#xff0c;曾巧 施工事项&#xff1a;空冷器脱脂 今日工作进度&#xff0c;清洗6台遇到的问题&#xff0c;就是那个喷雾器不经用&#xff0c;一会儿又坏了 重庆智渍洁环保科技有限公司专注于工业清洗&…

记录创建项目java version 没有8的问题

问题&#xff1a; 解决方案 java版本选择21&#xff08;21可以兼容jdk8&#xff09; SpringBoot选择3.2.5 进入项目后手动在pom.xml中修改版本

安卓手机原生运行 ARM Ubuntu 24.04 桌面版(一)

本篇文章&#xff0c;聊一聊尝试让安卓手机原生运行 Ubuntu&#xff0c;尤其是运行官方未发布过的 ARM 架构的 Ubuntu 24.04 桌面版本。 写在前面 最近的几篇文章&#xff0c;都包含了比较多的实操内容、需要反复的复现验证&#xff0c;以及大量的调试过程&#xff0c;为了不…

Sy9-dhcp/dns服务配置

前言、 课程需要&#xff08;进入服务器综合配置使用阶段了&#xff09;&#xff0c;这里还是沿用桌面版的ubuntu来配置dhcp和dns&#xff0c;这里updated了新的版本。2024.5 server端环境&#xff1a; Win11VMS&#xff1a;192.168.105.1192.168.105.128 &#xff08;ubuntu…

vivado UltraScale 比特流设置

下表所示 UltraScale ™ 器件的器件配置设置可搭配 set_property <Setting> <Value> [current_design] Vivado 工具 Tcl 命令一起使用。