生成随机的称重数据进行聚类剔除异常值的Python程序并进行可视化
时间: 2024-03-05 14:54:31 浏览: 69
好的,以下是生成随机的称重数据进行聚类剔除异常值的Python程序并进行可视化:
```python
import random
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 生成随机数据
data = []
for i in range(100):
data.append(random.uniform(0, 10))
# 聚类算法
kmeans = KMeans(n_clusters=2).fit(np.array(data).reshape(-1, 1))
labels = kmeans.labels_
# 获取每个簇的中心点
centers = []
for i in range(2):
cluster = np.where(labels == i)[0]
center = np.mean(np.array(data)[cluster])
centers.append(center)
# 计算异常值
outliers = []
for i in range(len(data)):
if abs(data[i] - centers[0]) > abs(data[i] - centers[1]):
outliers.append(data[i])
# 可视化
plt.scatter(range(len(data)), data, c=labels)
plt.plot(range(len(data)), [centers[0]]*len(data), 'r--', label='Center 1')
plt.plot(range(len(data)), [centers[1]]*len(data), 'g--', label='Center 2')
plt.plot(range(len(data)), [np.mean(data)]*len(data), 'b--', label='Mean')
plt.plot(range(len(data)), [max(data)]*len(data), 'k--', label='Max')
plt.plot(range(len(data)), [min(data)]*len(data), 'c--', label='Min')
plt.scatter([np.where(data == outlier)[0][0] for outlier in outliers], outliers, marker='x', color='r', label='Outliers')
plt.legend()
plt.show()
# 输出结果
print("随机数据:", data)
print("聚类结果:", labels)
print("异常值:", outliers)
```
该程序与之前的程序相似,不同之处在于它使用matplotlib将数据和结果进行可视化。可视化中,数据点通过颜色表示其所属的簇,红色和绿色虚线表示每个簇的中心点,蓝色虚线表示数据的平均值,黑色虚线表示数据的最大值,青色虚线表示数据的最小值,并在图中标记了异常值。
请注意,由于数据是随机生成的,因此每次运行程序时结果可能会有所不同。
阅读全文