聚类,听起来好像很高大上?
大家好,我是你们的Python小助手,今天我要和大家聊聊一个听起来很高大上,但用起来却很亲民的Python库——HDBSCAN。聚类,这个词听起来是不是感觉像是在说外星语?别急,让我来给你慢慢道来。
聚类,简单来说,就是把一堆东西按照某种规则分到不同的组里。比如,你把衣服按颜色分,把书按大小排,这都是聚类。在数据科学中,聚类就是把数据点根据相似性分到不同的组里。
HDBSCAN,聚类界的“高富帅”
HDBSCAN,全称是Hierarchical Density-Based Spatial Clustering of Applications with Noise,翻译过来就是“带噪声的基于密度的层次空间聚类应用”。听起来是不是有点长,有点拗口?别担心,我们只需要记住它是个聚类算法,而且是个特别厉害的聚类算法。
安装HDBSCAN,简单三步走
首先,我们得把这个“高富帅”请到我们的Python环境中。安装HDBSCAN非常简单,只需要在命令行里输入以下命令:
pip install hdbscan
如果你还没有安装pip,那就先安装pip吧,这个我就不多说了,网上一搜一大把。
案例一:用HDBSCAN分析鸢尾花数据集
接下来,让我们通过一个实际的案例来看看HDBSCAN是怎么工作的。我们先从经典的鸢尾花数据集开始。这个数据集包含了不同种类鸢尾花的花瓣长度和宽度。
import hdbscan
from sklearn import datasets
import matplotlib.pyplot as plt
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
# 使用HDBSCAN进行聚类
clusterer = hdbscan.HDBSCAN(min_cluster_size=5)
clusterer.fit(X)
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=clusterer.labels_)
plt.title('HDBSCAN Clustering')
plt.show()
看,我们用HDBSCAN对鸢尾花数据进行了聚类,并且用matplotlib库把它们画了出来。不同的颜色代表不同的聚类结果。
案例二:用HDBSCAN找出股市中的异常点
聚类可不仅限于生物学,它在金融领域也是大有作为。比如,我们可以用HDBSCAN来找出股市中的异常点。
import pandas as pd
import numpy as np
# 假设我们有一份股票价格数据
data = pd.DataFrame({
'date': pd.date_range(start='1/1/2020', periods=100, freq='D'),
'price': np.random.rand(100) * 100 # 随机生成价格
})
# 计算价格变化率
data['change'] = data['price'].pct_change()
# 使用HDBSCAN找出异常变化率
clusterer = hdbscan.HDBSCAN(min_cluster_size=10)
clusterer.fit(data[['change']])
# 标记异常点
outliers = data[clusterer.outlier_scores_ > 0.5]
print(outliers)
这段代码中,我们首先生成了一份模拟的股票价格数据,然后计算了每天的价格变化率,并用HDBSCAN找出了变化率异常的日子。
案例三:用HDBSCAN分析用户行为
在用户行为分析中,聚类可以帮助我们理解用户群体的特征。比如,我们可以根据用户的购买记录来聚类用户。
# 假设我们有一份用户的购买记录
user_data = pd.DataFrame({
'user_id': range(1, 21),
'category': np.random.choice(['books', 'electronics', 'clothes'], 20),
'amount': np.random.randint(50, 200, 20)
})
# 计算每个用户在每个类别上的花费
user_data['category'] = user_data['category'].astype('category')
user_data = user_data.pivot_table(index='user_id', columns='category', values='amount', aggfunc='sum', fill_value=0)
# 使用HDBSCAN进行聚类
clusterer = hdbscan.HDBSCAN(min_cluster_size=3)
clusterer.fit(user_data)
# 打印每个用户的聚类结果
print(user_data['books'].apply(lambda x: clusterer.labels_[x]))
在这个例子中,我们根据用户在不同商品类别上的花费进行了聚类,从而可以识别出不同的用户群体。
结语:HDBSCAN,聚类界的“亲民英雄”
聚类听起来很复杂,但有了HDBSCAN,一切都变得简单起来。它不仅能帮助我们在数据的海洋中找到宝藏,还能让我们的工作变得更加有趣。希望这篇文章能让你对HDBSCAN有一个全新的认识,也希望你能在你的项目中用到这个强大的工具。记住,聚类不是目的,只是手段,真正的目的还是为了更好地理解数据,发现数据背后的故事。下次见!
原文始发于微信公众号(跟着布布学Python):HDBSCAN,一个牛逼的python库
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/298653.html