Python 机器学习 聚类算法

聚类算法是机器学习中一种重要的无监督学习算法,它的目的是将一组数据分成几个簇,使得同一个簇内的数据点之间相似度高,而不同簇内的数据点相似度低。聚类算法广泛应用于数据挖掘、图像分割、市场细分等领域。选择合适的聚类算法通常取决于数据的特性和分析目标。

参考文档:Python 机器学习 聚类算法-CJavaPy

1、K-均值聚类(K-Means Clustering)

K-均值聚类(K-Means Clustering)是一种广泛使用的机器学习算法,它属于无监督学习算法。这种算法试图将数据分成预先指定数量的簇,使得同一簇内的数据点相似度高,而不同簇内的数据点相似度低。

初始化过程中,通过随机选择K个数据点作为起始的簇中心(质心)开始。接着,在分配阶段,每个数据点会被分配给与其距离最小的簇中心,确保每个数据点归属于最近的簇。随后的更新阶段要求对每个簇重新计算中心,通常采取簇内所有点的均值作为新的簇中心。此过程不断重复,即不停地执行分配和更新步骤,直到满足结束条件:簇中心不再发生显著变化,或者变化非常小,或者达到了预先设置的迭代次数上限。此过程是很多聚类算法中的核心步骤,可以通过不断优化簇中心的位置,来提高聚类的准确性和效率。

K-均值聚类算法的关键参数是K,即预先设定的簇的数量。选择合适的K值是实现好的聚类效果的关键。不同的K值会导致聚类结果的显著不同,通常需要依据具体问题和数据集的特性来决定。有多种方法可以帮助确定最佳的K值,如肘方法(Elbow Method)和轮廓系数(Silhouette Coefficient)。Python 的scikit-learn 库中,K-means 算法由 KMeans 类提供,它有多个参数可以调整算法的行为。常用参数如下,

参数

类型

描述

n_clusters

整数

要形成的簇的数量,

也即是中心点的数量。

这是最重要的参数,

直接影响聚类的结果。

init

字符串或 ndarray

初始化中心点的方法。

可以是 'k-means++'、

'random' 或者传递一个 ndarray。

'k-means++' 通过一种智能方式加速收敛,

而 'random' 则从数据中随机选择初始中心。

n_init

整数

算法运行带不同质心种子的次数。

默认为 10

算法将运行 n_init 次并选择误差平方

和(SSE)最低的作为最终结果。

max_iter

整数

最大迭代次数,

如果在达到最大次数之前已经收敛,

则提前停止。默认值为 300

tol

浮点数

收敛的容忍度。

如果簇中心的移动距离小于此值,

则认为算法已经收敛。默认值为 1e-4

precompute_distances

废弃

(已废弃)是否提前计算距离。

这个参数已在较新版本中废弃。

verbose

整数

控制算法的冗余级别。

较高的值表示更多的信息输出。

random_state

整数或 RandomState 实例

随机数生成器的种子。

用于结果的可重现性。

algorithm

字符串

执行 K-means 算法的方法。

可选 'auto'、'full' 或 'elkan',

其中 'auto' 会根据数据的特性自动

选择最适合的算法。

使用示例,

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

# 生成样本数据
n_samples = 300
random_state = 42
X, _ = make_blobs(n_samples=n_samples, random_state=random_state)

# 设置KMeans聚类
kmeans = KMeans(n_clusters=3,            # 聚类中心的数量
                init='k-means++',        # 初始化中心点的方法
                n_init=10,               # 不同质心种子的运行次数
                max_iter=300,            # 最大迭代次数
                tol=1e-4,                # 收敛的容忍度
                random_state=random_state)# 随机数种子,确保可重复性

# 对数据进行聚类
kmeans.fit(X)

# 预测每个样本的簇标签
labels = kmeans.labels_

# 获取聚类中心
centers = kmeans.cluster_centers_

# 绘制样本和聚类中心
plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis')
plt.scatter(centers[:, 0], centers[:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值