生成两组线性均匀分布的数据(完全线性可分)。 生成两组线性均匀分布的数据(线性不可分)。 生成两组高斯分布的数据(完全线性可分)。 生成两组高斯分布的数据(线性不可分)。 2.分别使用 K-means聚类程序进行二分类。并进行可视化
时间: 2024-03-02 12:50:00 浏览: 13
好的,以下是完整的代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 生成两组线性均匀分布的数据(完全线性可分)
n = 50
x1 = np.random.uniform(-1, 1, (n, 2))
x2 = np.random.uniform(-1, 1, (n, 2))
w = np.array([1, 2])
b = 0.5
y1 = np.sign(np.dot(x1, w) + b)
y2 = np.sign(np.dot(x2, w) + b)
# 生成两组线性均匀分布的数据(线性不可分)
x1_noise = np.random.normal(0, 0.2, (n, 2))
x2_noise = np.random.normal(0, 0.2, (n, 2))
x1 = np.concatenate([x1, x1_noise])
x2 = np.concatenate([x2, x2_noise])
y1 = np.concatenate([y1, np.ones(n)])
y2 = np.concatenate([y2, -np.ones(n)])
# 生成两组高斯分布的数据(完全线性可分)
n = 50
x1 = np.random.normal(0, 1, (n, 2))
x2 = np.random.normal(2, 1, (n, 2))
w = np.array([1, 2])
b = 0.5
y1 = np.sign(np.dot(x1, w) + b)
y2 = np.sign(np.dot(x2, w) + b)
# 生成两组高斯分布的数据(线性不可分)
x1_noise = np.random.normal(0, 0.5, (n, 2))
x2_noise = np.random.normal(0, 0.5, (n, 2))
x1 = np.concatenate([x1, x1_noise])
x2 = np.concatenate([x2, x2_noise])
y1 = np.concatenate([y1, np.ones(n)])
y2 = np.concatenate([y2, -np.ones(n)])
# 合并数据并打标签
X = np.concatenate([x1, x2])
y = np.concatenate([y1, y2])
# 使用 KMeans 进行聚类
kmeans1 = KMeans(n_clusters=2)
kmeans1.fit(x1)
kmeans2 = KMeans(n_clusters=2)
kmeans2.fit(x2)
# 得到聚类结果
y_pred1 = kmeans1.labels_
y_pred2 = kmeans2.labels_
# 输出准确率
accuracy1 = np.mean(y_pred1 == y1)
accuracy2 = np.mean(y_pred2 == y2)
print('Accuracy1:', accuracy1)
print('Accuracy2:', accuracy2)
# 可视化
fig, ax = plt.subplots(1, 2, figsize=(10, 5))
ax[0].scatter(x1[:, 0], x1[:, 1], c=y_pred1)
ax[1].scatter(x2[:, 0], x2[:, 1], c=y_pred2)
plt.show()
```
运行结果可能不同,但是你应该可以看到两个二分类的可视化结果。其中左边的图是第一组数据聚类的结果,右边的图是第二组数据聚类的结果。