【sklearn第二十讲】聚类

本文介绍了scikit-learn中的聚类方法,包括K-means和层次聚类(Hierarchical clustering)。K-means通过最小化类内平方和进行划分,但易受初始中心点影响。层次聚类则通过合并或分割类创建嵌套类别,如Ward、最大链接和平均链接方法。此外,文章还讨论了聚类效果评价指标,如Adjusted Rand index、互信息分数和Homogeneity、Completeness及V-measure。
摘要由CSDN通过智能技术生成

机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)

sklearn.cluster模块用来作聚类分析。每一个聚类算法包括两部分结果:一个执行fit方法的类,它在训练数据上学习类;一个函数,即,给定训练数据,它返回一个整数标签的数组,标签对应每个数据点的聚类结果,保存在labels_属性里。

输入数据

值得注意的是,sklearn.cluster模块执行的聚类算法能够取不同类型的矩阵作为输入。所有的算法都接受[n_samples, n_features]标准矩阵输入。

聚类方法概述

scikit-learn聚类算法比较
![这里写图片描述](https://img-blog.csdn.net/20180718125540840?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dvbmcyMDE2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) ![这里写图片描述](https://img-blog.csdn.net/20180718125602601?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dvbmcyMDE2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

K-means

KMeans算法通过最小化类内平方和,将样本分隔进等方差的组。该算法要求聚类前指定类的个数。

K-means算法要将 N N N 个样本的数据集 X X X 分割成 K K K 个互不相交的类 C 1 , C 2 , … , C K C_1, C_2, \dots, C_K C1,C

K-means聚类是一种常见的无监督机器学习算法,用于将数据集中的点划分为K个簇。K是指聚类的数量,算法的目标是最小化每个点到其所属簇中心(质心)的距离的平方和。 当处理经纬度数据进行聚类时,需要注意经纬度是球面坐标,如果直接使用普通的欧几里得距离计算可能会得到不准确的结果,因为地球是曲面。在实际应用中,可以使用Haversine距离公式来计算地球上两点之间的距离,以获得更准确的聚类结果。 以下是使用Python实现经纬度数据的K-means聚类的一个简要例子: ```python import numpy as np from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler from math import radians, cos, sin, asin, sqrt def haversine(lon1, lat1, lon2, lat2): # 将十进制度数转换为弧度 lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2]) # Haversine公式计算两点间距离 dlon = lon2 - lon1 dlat = lat2 - lat1 a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2 c = 2 * asin(sqrt(a)) r = 6371 # 地球平均半径,单位为公里 return c * r # 假设data是一个包含经纬度的numpy数组,其中第一列是经度,第二列是纬度 data = np.array([ [116.46, 39.92], [117.19, 39.13], # ... 更多经纬度数据 ]) # 使用Haversine公式计算距离 X = np.array([haversine(row[0], row[1], data[:, 0], data[:, 1]) for row in data]) # 数据标准化 scaler = StandardScaler() X_scaled = scaler.fit_transform(X.reshape(-1, 1)) # 应用K-means算法 kmeans = KMeans(n_clusters=3, random_state=0).fit(X_scaled) # 输出聚类结果 print(kmeans.labels_) # 聚类中心点 print(kmeans.cluster_centers_) ``` 在实际应用中,需要根据数据的具体情况调整K值,即聚类的数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值