You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python基于概率聚类(模糊聚类)生成三类温度隶属度特征?

用Python实现温度数据的模糊K均值(概率聚类)

完全可以通过Python实现你的需求,我们可以借助scikit-fuzzy库完成模糊C均值(即软K均值)聚类,生成每个温度点对应冷、适中、热三类的隶属概率,且保证每一行的隶属度之和为1。

实现步骤与代码示例

1. 安装依赖库

首先安装模糊聚类及数据处理所需的库:

pip install scikit-fuzzy numpy pandas

2. 数据准备与聚类实现

import numpy as np
import pandas as pd
import skfuzzy as fuzz

# 替换为你的实际温度数据(这里模拟10万条0-130°F的样本)
np.random.seed(42)
temperatures = np.random.uniform(low=0, high=130, size=100000)
# 转换为scikit-fuzzy要求的输入格式:(特征数, 样本数)
temp_data = temperatures.reshape(1, -1)

# 根据给定区间设置初始聚类中心(取每个区间中点)
init_centers = np.array([[15], [65], [115]])  # 冷:0-30中点15,适中:50-80中点65,热:100-130中点115

# 执行模糊C均值聚类
# 参数说明:c=3聚类数,m=2模糊指数(控制隶属度模糊程度),error=收敛阈值,maxiter=最大迭代次数
cluster_centers, memberships, _, _, _, _, _ = fuzz.cluster.cmeans(
    temp_data,
    c=3,
    m=2,
    error=0.005,
    maxiter=1000,
    init=init_centers
)

# 将隶属度转换为DataFrame,对应冷、适中、热三类
membership_df = pd.DataFrame(memberships.T, columns=['冷', '适中', '热'])
# 添加原始温度列(可选)
membership_df['温度(°F)'] = temperatures

3. 结果验证

以接近39°F的样本为例,查看隶属度情况:

# 找到最接近39°F的样本索引
target_idx = np.argmin(np.abs(temperatures - 39))
sample_temp = round(temperatures[target_idx], 1)
cold = round(membership_df['冷'][target_idx], 2)
moderate = round(membership_df['适中'][target_idx], 2)
hot = round(membership_df['热'][target_idx], 2)

print(f"温度{sample_temp}°F的隶属度:")
print(f"冷: {cold}, 适中: {moderate}, 热: {hot}")
print(f"隶属度之和:{round(cold + moderate + hot, 2)}")

关键参数说明

  • 模糊指数m:通常取2,值越大,不同类别的隶属度越平均;值越小,越接近硬聚类(隶属度趋近于0或1)。
  • 初始聚类中心:手动设置为给定区间的中点,能让聚类结果更贴合你的需求,避免算法随机初始化偏离预期。
  • 性能:10万条数据的计算在普通电脑上仅需几秒,效率完全满足需求。

内容的提问来源于stack exchange,提问作者bluered_earth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 00:25:55