[ PROMPT_NODE_27362 ]
unsupervised_learning
[ SKILL_DOCUMENTATION ]
# 无监督学习参考
## 概述
无监督学习通过聚类、降维和密度估计发现无标签数据中的模式。
## 聚类
### K-Means
**KMeans (`sklearn.cluster.KMeans`)**
- 基于划分的 K 个簇聚类
- 关键参数:
- `n_clusters`: 簇的数量
- `init`: 初始化方法 ('k-means++', 'random')
- `n_init`: 初始化次数(默认=10)
- `max_iter`: 最大迭代次数
- 使用场景:已知簇的数量,簇形状为球形
- 快速且可扩展
- 示例:
python
from sklearn.cluster import KMeans
model = KMeans(n_clusters=3, init='k-means++', n_init=10, random_state=42)
labels = model.fit_predict(X)
centers = model.cluster_centers_
# 惯性 (到最近中心的平方距离之和)
print(f"惯性: {model.inertia_}")
**MiniBatchKMeans**
- 使用小批量数据的更快速 K-Means
- 使用场景:大数据集,需要更快的训练速度
- 准确度略低于 K-Means
- 示例:
python
from sklearn.cluster import MiniBatchKMeans
model = MiniBatchKMeans(n_clusters=3, batch_size=100, random_state=42)
labels = model.fit_predict(X)
### 基于密度的聚类
**DBSCAN (`sklearn.cluster.DBSCAN`)**
- 基于密度的空间聚类
- 关键参数:
- `eps`: 邻域内两样本的最大距离
- `min_samples`: 形成核心点所需的最小样本数
- `metric`: 距离度量
- 使用场景:任意簇形状,存在噪声/异常值
- 自动确定簇的数量
- 将噪声点标记为 -1
- 示例:
python
from sklearn.cluster import DBSCAN
model = DBSCAN(eps=0.5, min_samples=5, metric='euclidean')
labels = model.fit_predict(X)
# 簇的数量 (排除噪声)
n_clusters = len(set(labels)) - (1 if -1 in labels else 0)
n_noise = list(labels).count(-1)
print(f"簇数量: {n_clusters}, 噪声点: {n_noise}")
**HDBSCAN (`sklearn.cluster.HDBSCAN`)**
- 具有自适应 epsilon 的分层 DBSCAN
- 比 DBSCAN 更鲁棒
- 关键参数:`min_cluster_size`
- 使用场景:不同密度的簇
- 示例:
python
from sklearn.cluster import HDBSCAN
model = HDBSCAN(min_cluster_size=10, min_samples=5)
labels = model.fit_predict(X)
**OPTICS (`sklearn.cluster.OPTICS`)**
- 通过排序点来识别聚类结构
- 类似于 DBSCAN,但不需要 eps 参数
- 关键参数:`min_samples`, `max_eps`
- 使用场景:不同密度,探索