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

使用TimeSeriesKMeans时间序列模型生成聚类归属向量的方法咨询

实现方法

预处理逻辑修正

你现有代码的预处理环节存在逻辑错误:按公司分组完成后,直接将my_dict覆盖为全数据集的滚动均值,丢失了按公司拆分的独立时间序列结构,需要先修正该部分才能正确完成聚类和向量生成。

完整实现代码

import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler, OneHotEncoder
from tslearn.clustering import TimeSeriesKMeans
from sklearn.model_selection import train_test_split

# 读取数据集,仅保留需要字段
df = pd.read_csv("all_stocks_5yr.csv", usecols=["date", "Name", "close"])
# 数据透视:行对应公司,列对应日期,值为收盘价,删除存在缺失值的公司
pivot_df = df.pivot(index="Name", columns="date", values="close").dropna(axis=0)
# 10日移动平均平滑处理
rolling_df = pivot_df.rolling(window=10, min_periods=1, axis=1).mean()
# 数值归一化
sc = MinMaxScaler(feature_range=(0, 1))
scaled_data = sc.fit_transform(rolling_df)

# 拆分训练测试集
train, test = train_test_split(scaled_data, test_size=0.2, random_state=12345)
# 训练时间序列KMeans模型
n_clusters = 3
model = TimeSeriesKMeans(n_clusters=n_clusters, metric="dtw", max_iter=5)
model.fit(train)

# 生成全量样本的聚类标签
all_sample_labels = model.predict(scaled_data)
# 转换为维度和聚类数一致的归属向量(独热编码形式)
enc = OneHotEncoder(sparse_output=False)
cluster_belong_vector = enc.fit_transform(all_sample_labels.reshape(-1, 1))

# 可按需将向量和公司名称绑定
company_cluster_map = pd.DataFrame(
    cluster_belong_vector,
    index=pivot_df.index,
    columns=[f"cluster_{i}" for i in range(n_clusters)]
)

结果说明

  • 最终输出的cluster_belong_vector就是你需要的聚类归属向量,其维度为(样本数, 聚类数),每行对应一个公司的时间序列,对应聚类簇的位置值为1,其余位置为0,完全符合维度要求。
  • 如果需要单独获取训练集/测试集的归属向量,只需将scaled_data替换为train或test传入predict方法即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:15:05