nCluster = 9 kmodel = KMeans(n_clusters=nCluster, random_state=728) kmodel.fit(pred_images) kpredictions = kmodel.predict(pred_images) shutil.rmtree('D:/wjd/15') for i in range(nCluster): os.makedirs("D:/wjd/15/cluster" + str(i)) for i in range(len(paths)): shutil.copy2(paths[i], "D:/wjd/15/cluster" + str(kpredictions[i]))
时间: 2024-04-09 10:31:53 浏览: 60
根据你提供的代码,这段代码的功能是使用K均值聚类算法对`pred_images`进行聚类,并将每个样本分配到相应的聚类簇中。然后,根据聚类结果将原始图片文件拷贝到不同的目录中,以便于后续对聚类结果进行分析或展示。
具体而言,代码中的步骤如下:
1. 定义了聚类的簇数`nCluster`为9,并创建了一个KMeans对象`kmodel`,使用随机种子`random_state=728`进行初始化。
2. 使用`kmodel.fit(pred_images)`对`pred_images`进行聚类,得到每个样本的聚类标签。
3. 创建了一个目录`D:/wjd/15`,如果该目录已存在,则先删除该目录及其下的所有文件和子目录。
4. 使用循环创建了9个目录`D:/wjd/15/cluster0`、`D:/wjd/15/cluster1`、...、`D:/wjd/15/cluster8`,用于存放每个聚类簇的图片文件。
5. 根据每个样本的聚类标签,将对应的图片文件从原始路径`paths`复制到相应的聚类簇目录中,命名方式为`D:/wjd/15/clusterX/imageY`,其中X为聚类簇的索引,Y为图片在原始路径中的索引。
这段代码的效果是将聚类结果可视化,将每个聚类簇的图片文件分别存放在不同的目录中,方便进一步分析和观察聚类结果。
相关问题
逐句注释import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score import pandas as pd data = pd.read_csv('xigua.csv') # 加载数据 print(data) print(data.shape) X = data.iloc[: ,1:3].values print(X) print(X.shape) plt.scatter(X[:, 0], X[:, 1], c = "red", marker = 'o', label = 'None') plt.ylabel('Sugar content') plt.xlabel('density') plt.legend(loc = 2) plt.show() #运用数学方法计算k的取值 score = [] for i in range(10): model = KMeans(n_clusters = i + 2) model.fit(X[:, 1:3]) #计算轮廓系数,系数取值范围[-1,1],越接近1的,k的值越好 score.append(silhouette_score(X[:, 0:2], model.labels_, metric = 'euclidean')) plt.figure(figsize = (5, 4)) plt.plot(range(2, 12, 1), score) plt.show() #n_clusters表示k的取值,也就是聚成簇的数量 #fit()函数:做的就是模型训练 kmeans = KMeans(n_clusters = 3, random_state = 0, ).fit(X[:, 1:3]) label_pred = kmeans.labels_#获取聚类标签 print(label_pred) centroids = kmeans.cluster_centers_ #获取聚类簇心 print(centroids) #绘制结果 x0 = X[label_pred == 0] x1 = X[label_pred == 1] plt.scatter(x0[:, 0], x0[:, 1], c = "red", marker = 'o', label = 'label0') plt.scatter(x1[:, 0], x1[:, 1], c = "green", marker = '*', label = 'label1') plt.ylabel('Sugar content') plt.xlabel('density') plt.legend(loc = 2) plt.show()
这份代码主要是对西瓜数据集进行聚类分析,下面是逐行的注释:
```
import matplotlib.pyplot as plt # 导入绘图库
from sklearn.cluster import KMeans # 导入kmeans聚类算法
from sklearn.metrics import silhouette_score # 导入轮廓系数评价指标
import pandas as pd # 导入数据处理库
data = pd.read_csv('xigua.csv') # 加载数据
print(data) # 打印数据
print(data.shape) # 打印数据的形状
X = data.iloc[:, 1:3].values # 取第2列和第3列作为特征
print(X) # 打印特征
print(X.shape) # 打印特征的形状
plt.scatter(X[:, 0], X[:, 1], c="red", marker='o', label='None') # 绘制散点图
plt.ylabel('Sugar content') # y轴标签
plt.xlabel('density') # x轴标签
plt.legend(loc=2) # 图例位置
plt.show() # 显示图像
score = [] # 初始化轮廓系数列表
for i in range(10): # 循环计算轮廓系数
model = KMeans(n_clusters=i + 2) # 聚类模型
model.fit(X[:, 1:3]) # 训练模型
# 计算轮廓系数,系数取值范围[-1,1],越接近1的,k的值越好
score.append(silhouette_score(X[:, 0:2], model.labels_, metric='euclidean'))
plt.figure(figsize=(5, 4)) # 创建图像
plt.plot(range(2, 12, 1), score) # 绘制轮廓系数图像
plt.show() # 显示图像
kmeans = KMeans(n_clusters=3, random_state=0).fit(X[:, 1:3]) # 聚类模型
label_pred = kmeans.labels_ # 获取聚类标签
print(label_pred) # 打印聚类标签
centroids = kmeans.cluster_centers_ # 获取聚类簇心
print(centroids) # 打印聚类簇心
x0 = X[label_pred == 0] # 获取第一类样本
x1 = X[label_pred == 1] # 获取第二类样本
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label0') # 绘制第一类样本的散点图
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label1') # 绘制第二类样本的散点图
plt.ylabel('Sugar content') # y轴标签
plt.xlabel('density') # x轴标签
plt.legend(loc=2) # 图例位置
plt.show() # 显示图像
```
这段代码的目的是对西瓜数据集进行聚类分析,首先通过读取数据集获取特征,然后绘制散点图观察数据的分布情况,接着通过计算轮廓系数来确定最优的聚类簇数,再利用KMeans算法进行聚类分析,并绘制聚类结果的散点图。
实验目的: 会用Python创建KMeans聚类分析模型; 使用KMeans模型对航空公司客户价值进行聚类分析; 会对聚类结果进行分析。 实验内容: 使用sklearn.cluester的KMeans类对航空公司客户数据进行聚类分析,把乘客分到不同的类别中。 数据集:air_data.csv 数据集大小:62052条不重复数据 原数据有40个属性,为了大家训练模型方便,本实验使用预处理后的标准化数据,该数据有5个属性。 数据说明: ZL:入会至当前时长,反应可能的活跃时间 ZR:最近消费时间间隔,反应最近一段时间活跃程度 ZF:消费频次,反应客户忠诚度 ZM:消费里程总额,反应客户对乘机的依赖程度 ZC:舱位等级对应折扣系数,一般舱位等级越高,折扣系数越大 载入训练数据、显示读入数据的前5行 训练KMeans聚类模型,把数据聚成5类 from sklearn.cluster import KMeans k = 5 model = … KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300, n_clusters=5, n_init=10, n_jobs=None, precompute_distances='auto',random_state=None, tol=0.0001,verbose=0) 检查每个聚类类别样本数、每个聚类类别中心点,统计聚类个数及中心点 画出5个聚类中心点在每个维度上的散点图,并按统一类别把聚类中心用线连接起来 分析聚类结果
以下是Python代码实现:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
# 载入数据
data = pd.read_csv('air_data.csv')
# 数据预处理
data = data[['ZL', 'ZR', 'ZF', 'ZM', 'ZC']]
data = data.dropna()
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)
# 训练KMeans模型
k = 5
kmeans = KMeans(n_clusters=k, init='k-means++', max_iter=300, n_init=10, random_state=0)
pred_y = kmeans.fit_predict(data_scaled)
# 统计每个聚类类别样本数、每个聚类类别中心点
labels = kmeans.labels_
centers = kmeans.cluster_centers_
n_samples_per_cluster = np.bincount(labels, minlength=k)
print("Number of samples per cluster:", n_samples_per_cluster)
print("Centers of each cluster:", centers)
# 统计聚类个数及中心点
plt.scatter(data_scaled[:, 0], data_scaled[:, 1], c=pred_y)
plt.scatter(centers[:, 0], centers[:, 1], s=300, marker='*', c='red')
plt.title('KMeans Clustering')
plt.xlabel('ZL')
plt.ylabel('ZR')
plt.show()
# 画出5个聚类中心点在每个维度上的散点图
fig, ax = plt.subplots()
colors = ['r', 'g', 'b', 'y', 'm']
for i in range(k):
points = np.array([data_scaled[j] for j in range(len(data_scaled)) if labels[j] == i])
ax.scatter(points[:, 0], points[:, 1], s=7, c=colors[i])
ax.scatter(centers[:, 0], centers[:, 1], marker='*', s=200, c='#050505')
plt.title('KMeans Clustering')
plt.xlabel('ZL')
plt.ylabel('ZR')
plt.show()
# 按统一类别把聚类中心用线连接起来
fig, ax = plt.subplots()
for i in range(k):
points = np.array([data_scaled[j] for j in range(len(data_scaled)) if labels[j] == i])
ax.scatter(points[:, 0], points[:, 1], s=7, c=colors[i])
ax.scatter(centers[:, 0], centers[:, 1], marker='*', s=200, c='#050505')
for i, c in enumerate(centers):
ax.plot([c[0], centers[(i+1)%k, 0]], [c[1], centers[(i+1)%k, 1]], 'k--')
plt.title('KMeans Clustering')
plt.xlabel('ZL')
plt.ylabel('ZR')
plt.show()
# 分析聚类结果
# 可以根据聚类结果,分析出不同类别的客户特征和行为习惯,为航空公司制定针对性的市场策略和服务方案提供依据。
```
首先,载入数据,并对数据进行预处理,只保留了5个属性,并进行了标准化处理。然后,使用KMeans算法将数据聚成5类,并统计每个聚类类别样本数和每个聚类类别中心点。接着,画出5个聚类中心点在每个维度上的散点图,并按统一类别把聚类中心用线连接起来。最后,根据聚类结果进行分析,可以得到不同类别客户的特征和行为习惯,为航空公司制定市场策略和服务方案提供依据。
阅读全文