python实现从excel表格中使用第二列第三列中的前六个数据为聚类中心,并对通过idle输入的二维数据进行聚类,将聚类后的点模糊判断到前六个点上某个聚类中心的k-means聚类,并根据聚类的类别给出对应表格中第四列和第五列的数据,并使其可视化的算法
时间: 2024-02-22 18:54:55 浏览: 129
k-means_K-Means算法实现_K._聚类可视化_数据可视化、_
5星 · 资源好评率100%
这个问题的解决方案和前一个问题的解决方案类似,只需要将Excel表格的读取替换为从IDLE中输入数据即可。
代码示例:
```python
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 从IDLE中输入数据
data = []
for i in range(10):
x, y = input(f"Enter the coordinates of point {i+1}: ").split()
data.append([float(x), float(y)])
# 将输入数据转换为NumPy数组
data = np.array(data)
# 提取第二列和第三列的前六个数据作为聚类中心
centers = data[0:6, :]
# 使用KMeans算法进行聚类
kmeans = KMeans(n_clusters=6, init=centers).fit(data)
# 将聚类后的点模糊判断到前六个点上某个聚类中心
labels = []
for i in range(len(data)):
label = kmeans.predict(data[i, :].reshape(1, -1))[0]
center = centers[label]
if np.linalg.norm(data[i, :] - center) < 0.1:
labels.append(label)
else:
labels.append(-1)
# 根据聚类的类别给出对应表格中第四列和第五列的数据
column4 = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
column5 = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
result = np.zeros((10, 5))
result[:, 0] = np.arange(1, 11)
result[:, 1:3] = data
result[:, 3] = column4
result[:, 4] = column5
result = result.astype(str)
for i in range(len(result)):
if labels[i] != -1:
result[i, 3] = np.mean(result[result[:, 0] != str(i+1), 3][labels == labels[i]])
result[i, 4] = np.mean(result[result[:, 0] != str(i+1), 4][labels == labels[i]])
# 可视化数据
colors = ['blue', 'green', 'red', 'cyan', 'magenta', 'yellow']
plt.scatter(data[:, 0], data[:, 1], c=[colors[label] if label != -1 else 'black' for label in labels])
plt.show()
# 输出聚类结果
print("ID\tX\tY\tColumn4\tColumn5")
for i in range(len(result)):
print("\t".join(result[i, :]))
```
需要注意的是,这个代码中没有使用pandas库读取Excel表格,而是手动构造了一个结果数组来存储聚类结果,并且输出结果时也没有使用pandas库的格式化输出。另外,这个代码中输入数据的数量是固定的,如果需要处理不同数量的输入数据,需要对代码进行相应修改。
阅读全文