python自编程实现k-means聚类模型并画出图像
好的,下面是Python自编程实现k-means聚类模型并画出图像的步骤:
1. 导入必要的库
```python
import numpy as np
import matplotlib.pyplot as plt
```
2. 生成数据集
```python
# 生成数据集
np.random.seed(42)
X = np.random.randn(100, 2)
```
3. 定义k-means聚类模型
```python
class KMeans:
def __init__(self, k=2, max_iter=100):
self.k = k
self.max_iter = max_iter
def fit(self, X):
# 随机初始化聚类中心
self.centers = X[np.random.choice(len(X), self.k, replace=False)]
for i in range(self.max_iter):
# 计算每个样本到聚类中心的距离
distances = np.sqrt(((X - self.centers[:, np.newaxis])**2).sum(axis=2))
# 分配样本到最近的聚类中心
labels = np.argmin(distances, axis=0)
# 更新聚类中心
for j in range(self.k):
self.centers[j] = X[labels == j].mean(axis=0)
self.labels = labels
```
4. 使用k-means聚类模型进行聚类
```python
# 使用k-means聚类模型进行聚类
kmeans = KMeans(k=3)
kmeans.fit(X)
```
5. 可视化聚类结果
```python
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels)
plt.scatter(kmeans.centers[:, 0], kmeans.centers[:, 1], marker='*', s=200, c='r')
plt.show()
```
完整代码如下:
```python
import numpy as np
import matplotlib.pyplot as plt
class KMeans:
def __init__(self, k=2, max_iter=100):
self.k = k
self.max_iter = max_iter
def fit(self, X):
# 随机初始化聚类中心
self.centers = X[np.random.choice(len(X), self.k, replace=False)]
for i in range(self.max_iter):
# 计算每个样本到聚类中心的距离
distances = np.sqrt(((X - self.centers[:, np.newaxis])**2).sum(axis=2))
# 分配样本到最近的聚类中心
labels = np.argmin(distances, axis=0)
# 更新聚类中心
for j in range(self.k):
self.centers[j] = X[labels == j].mean(axis=0)
self.labels = labels
# 生成数据集
np.random.seed(42)
X = np.random.randn(100, 2)
# 使用k-means聚类模型进行聚类
kmeans = KMeans(k=3)
kmeans.fit(X)
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels)
plt.scatter(kmeans.centers[:, 0], kmeans.centers[:, 1], marker='*', s=200, c='r')
plt.show()
```
免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。