You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

skfuzzy模糊C均值聚类中聚类中心维度错误问题咨询

解决skfuzzy模糊C均值聚类的维度错误问题

嘿,我帮你梳理下这个常见的踩坑点——skfuzzy的cmeans函数对输入数据的维度要求和scikit-learn的模型刚好相反,这大概率是你遇到聚类中心维度错误的核心原因!

先把你的代码片段整理出来方便分析:

import pandas as pd
import numpy as np
from os import listdir
from sklearn.model_selection import train_test_split
from skfuzzy.cluster import cmeans, cmeans_predict
from sklearn.metrics import classification_report,confusion_matrix

def find_csv_filenames( path_to_dir, suffix=".csv" ):
    filenames = listdir(path_to_dir)
    return [ path_to_dir+filename for filename in filenames if filename.endswith( suffix ) ]

listFiles = find_csv_filenames(...)  # 这里是你读取文件的逻辑
# 后续应该是读取数据、处理后传入cmeans

核心问题:数据维度要求差异

scikit-learn的聚类模型(比如KMeans)接受的输入是**(样本数, 特征数)的格式,但skfuzzy的cmeans要求输入数据是(特征数, 样本数)**的形状。如果直接把常规格式的数据传进去,就会出现聚类中心维度不匹配的错误。

具体修正步骤

  1. 检查并转置数据
    假设你读取并整理后的特征数据是X(形状为(n_samples, n_features)),需要先转置成skfuzzy要求的格式:

    # 假设X是你的特征数据,比如从CSV中读取的数值部分
    X_transposed = X.T  # 转置后形状变为(n_features, n_samples)
    
  2. 正确调用cmeans函数
    转置后再传入cmeans,同时确保聚类数c等参数设置合理:

    # 执行模糊C均值聚类
    cntr, u, u0, d, jm, p, fpc = cmeans(
        data=X_transposed,
        c=3,  # 根据你的需求设置聚类数量
        m=2.0,  # 模糊系数,默认2.0即可
        error=0.005,  # 收敛阈值
        maxiter=1000,  # 最大迭代次数
        init=None  # 自动初始化聚类中心
    )
    
  3. 预测时保持维度一致
    如果用训练好的聚类中心做预测,新数据同样需要转置:

    # 假设new_data是待预测的样本,形状为(n_new_samples, n_features)
    new_data_transposed = new_data.T
    u_pred, _, _, _, _, _ = cmeans_predict(
        data=new_data_transposed,
        cntr_trained=cntr,
        m=2.0,
        error=0.005,
        maxiter=1000
    )
    # u_pred的每一列对应一个样本的聚类隶属度
    

额外建议

  • 数据标准化:模糊C均值对数据尺度很敏感,建议先对特征做标准化处理(比如用sklearn.preprocessing.StandardScaler),避免尺度大的特征主导聚类结果。
  • 验证聚类数:可以通过模糊划分系数fpc(返回值中的最后一个)来评估聚类效果,fpc越接近1表示聚类效果越好,帮助你选择合适的c值。

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

火山引擎 最新活动