K-means聚类算法实现 1.生成两组线性均匀分布的数据(完全线性可分)。生成两组线性均匀分布的数据(线性不可分)。生成两组高斯分布的数据(完全线性可分)。生成两组高斯分布的数据(线性不可分)。 2.使用K-means聚类程序进行二分类。
时间: 2024-03-02 18:53:08 浏览: 129
好的,这是您的问题:
首先,我想确认您是否需要我为您提供K-means算法的代码实现以及数据生成代码?
如果是这样,我可以提供Python实现的代码,使用numpy和matplotlib库进行数据的生成和可视化,并使用sklearn库中的KMeans进行聚类。
下面是代码实现:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 生成两组线性均匀分布的数据(完全线性可分)
X1 = np.random.uniform(low=-1, high=1, size=(100, 2))
X2 = np.random.uniform(low=-1, high=1, size=(100, 2)) + 2
# 生成两组线性均匀分布的数据(线性不可分)
X3 = np.random.uniform(low=-1, high=1, size=(100, 2))
X3[:50, :] += 2
X4 = np.concatenate([np.random.uniform(low=-1, high=1, size=(50, 2)),
np.random.uniform(low=2, high=3, size=(50, 2))], axis=0)
# 生成两组高斯分布的数据(完全线性可分)
mean1 = [0, 0]
cov1 = [[1, 0], [0, 1]]
X5 = np.random.multivariate_normal(mean1, cov1, size=100)
mean2 = [3, 3]
cov2 = [[1, 0], [0, 1]]
X6 = np.random.multivariate_normal(mean2, cov2, size=100)
# 生成两组高斯分布的数据(线性不可分)
mean3 = [1, 1]
cov3 = [[1, 0], [0, 1]]
X7 = np.random.multivariate_normal(mean3, cov3, size=100)
mean4 = [-1, -1]
cov4 = [[1, 0], [0, 1]]
X8 = np.random.multivariate_normal(mean4, cov4, size=100)
# 可视化数据
fig, axs = plt.subplots(2, 4, figsize=(14, 6))
axs[0, 0].scatter(X1[:, 0], X1[:, 1])
axs[0, 0].scatter(X2[:, 0], X2[:, 1])
axs[0, 0].set_title("Linear separable uniform data")
axs[0, 1].scatter(X3[:, 0], X3[:, 1])
axs[0, 1].scatter(X4[:, 0], X4[:, 1])
axs[0, 1].set_title("Linear non-separable uniform data")
axs[0, 2].scatter(X5[:, 0], X5[:, 1])
axs[0, 2].scatter(X6[:, 0], X6[:, 1])
axs[0, 2].set_title("Linear separable gaussian data")
axs[0, 3].scatter(X7[:, 0], X7[:, 1])
axs[0, 3].scatter(X8[:, 0], X8[:, 1])
axs[0, 3].set_title("Linear non-separable gaussian data")
# 使用K-means进行聚类
kmeans1 = KMeans(n_clusters=2)
kmeans2 = KMeans(n_clusters=2)
kmeans3 = KMeans(n_clusters=2)
kmeans4 = KMeans(n_clusters=2)
y1 = kmeans1.fit_predict(np.concatenate([X1, X2], axis=0))
y2 = kmeans2.fit_predict(np.concatenate([X3, X4], axis=0))
y3 = kmeans3.fit_predict(np.concatenate([X5, X6], axis=0))
y4 = kmeans4.fit_predict(np.concatenate([X7, X8], axis=0))
axs[1, 0].scatter(X1[:, 0], X1[:, 1], c=y1[:100])
axs[1, 0].scatter(X2[:, 0], X2[:, 1], c=y1[100:])
axs[1, 0].set_title("Linear separable uniform data")
axs[1, 1].scatter(X3[:, 0], X3[:, 1], c=y2[:100])
axs[1, 1].scatter(X4[:, 0], X4[:, 1], c=y2[100:])
axs[1, 1].set_title("Linear non-separable uniform data")
axs[1, 2].scatter(X5[:, 0], X5[:, 1], c=y3[:100])
axs[1, 2].scatter(X6[:, 0], X6[:, 1], c=y3[100:])
axs[1, 2].set_title("Linear separable gaussian data")
axs[1, 3].scatter(X7[:, 0], X7[:, 1], c=y4[:100])
axs[1, 3].scatter(X8[:, 0], X8[:, 1], c=y4[100:])
axs[1, 3].set_title("Linear non-separable gaussian data")
plt.show()
```
这段代码实现了生成4种不同类型的数据,并使用K-means算法进行聚类。最终结果使用matplotlib库进行可视化。
希望这个回答能够解决您的问题!
阅读全文