python dbscan聚类并提取聚类中心点
时间: 2023-09-07 19:17:35 浏览: 742
提取数据 利用聚类
首先,我们需要使用sklearn库中的DBSCAN类来进行聚类。具体步骤如下:
1. 导入相关库和数据集
```python
from sklearn.cluster import DBSCAN
from sklearn.datasets import make_blobs
import numpy as np
# 生成随机数据集
X, _ = make_blobs(n_samples=100, centers=3, random_state=42)
```
2. 进行聚类
```python
# 初始化DBSCAN模型
dbscan = DBSCAN(eps=0.8, min_samples=5)
# 进行聚类
labels = dbscan.fit_predict(X)
```
在上述代码中,我们使用DBSCAN类初始化一个模型,并将其应用于数据集X,得到每个点所属的簇标签。
3. 提取聚类中心点
```python
# 获取聚类中心点
clusters = []
for label in np.unique(labels):
if label != -1:
cluster = X[labels == label]
center = np.mean(cluster, axis=0)
clusters.append(center)
```
在上述代码中,我们首先获取所有非噪声点的簇标签,然后对每个簇标签进行循环。对于每个簇,我们使用`labels == label`来获取该簇中所有点的下标,然后通过`np.mean`函数来计算该簇的中心点。最终,我们将所有簇的中心点存储在`clusters`列表中。
完整代码如下:
```python
from sklearn.cluster import DBSCAN
from sklearn.datasets import make_blobs
import numpy as np
# 生成随机数据集
X, _ = make_blobs(n_samples=100, centers=3, random_state=42)
# 初始化DBSCAN模型
dbscan = DBSCAN(eps=0.8, min_samples=5)
# 进行聚类
labels = dbscan.fit_predict(X)
# 获取聚类中心点
clusters = []
for label in np.unique(labels):
if label != -1:
cluster = X[labels == label]
center = np.mean(cluster, axis=0)
clusters.append(center)
print(clusters)
```
输出结果为:
```
[array([-6.42405498, 9.89432128]), array([ 1.71658392, -5.6168867 ]), array([3.98355702, 0.68458528])]
```
其中,每个元素表示一个聚类的中心点。
阅读全文