【机器学习笔记】KMeans

KMeans是一种无监督学习的聚类算法,通过随机选取聚类中心并迭代更新。文章介绍了算法的基本步骤、距离度量方式、k值选择方法(肘部法和轮廓系数法),以及在sklearn中的实现和参数设置。同时,展示了使用葡萄酒数据集进行聚类任务的示例。
摘要由CSDN通过智能技术生成

简介

Kmeans是无监督学习算法,支持聚类任务,算法通过随机选取聚类中心,定义并更新点到聚类中心的距离,对聚类中心以及点的所属类别进行更新,最终形成较为稳定的K个类别;

定义距离

曼哈顿距离、欧氏距离、切比雪夫距离、闵可夫斯基距离等;
在knn算法笔记中已对上述距离进行公式说明,此处不再赘述;

基本步骤

  1. 随机选取K个聚类中心点,并计算其它点到不同中心点的距离;
  2. 每个点加入最近距离的中心类别,并将类别中样本各特征取均值,作为新的聚类中心点;
  3. 重复1、2步,直至聚类中心点不再变动,或到达迭代阈值;

k值选取

  1. 肘部法:对于不同k,计算各样本点到所属聚类中心的距离平方和s,观察(k,s)散点图中,s突变对应的k值;
  2. 轮廓系数法:略;

优缺点

  1. 优点:算法简单,收敛快;
  2. 缺点:受初始中心点以及离群点影响大,容易收敛到局部最优解;最终的聚类中心点不一定属于样本点;

sklearn实战

重要参数

class sklearn.cluster.KMeans(n_clusters=8
       , init='k-means++'
       , n_init=10
       , max_iter=300
       , tol=0.0001
       , precompute_distances='auto'
       , verbose=0
       , random_state=None
       , copy_x=True
       , n_jobs=None
       , algorithm='auto'):
	# n_cluster			int默认为8		生成的聚类数
	# max_iter			int默认300		迭代更新次数阈值上限
	# init, n_init						聚类中心点初始化方法
	# n_jobs			int默认None		-1表示用上所有cpu来计算
	# tol				float默认1e-4	距离收敛阈值

聚类任务

from sklearn import datasets
from sklearn.cluster import KMeans
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt 

# 葡萄酒数据
data = datasets.load_wine()
X_train, X_test = train_test_split(data["data"], test_size=0.3, random_state=41, shuffle=True)

# 记录不同k下的距离和
def cluster_k(features_input, min_k: int = 1, max_k: int = 10):
    _sse = []  # 存放每次结果的误差平方和
    for k in range(min_k, max_k+1):
        _estimator = KMeans(n_clusters=k)  # 构造聚类器
        _estimator.fit(features_input)
        _sse.append(_estimator.inertia_)
    return _sse

# 肘部法选最优聚类数
sse = cluster_k(X_train, 10)
plt.plot(list(range(1, 11)), sse)
plt.show()

# 聚类模型
model = KMeans(n_clusters=2, random_state=41)
model.fit(X_train)
model.predict(X_test)

参考

https://blog.csdn.net/weixin_43983674/article/detail/129812249?spm=1001.2014.3001.5501

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值