python - 如何对连续时间序列的值进行聚类
问题描述
在图片中,我绘制了形状数组 (400,8) 中的值,我希望重新组织点以获得 8 个“连续”点系列。我们称它们为 a(t)、b(t)、..、h(t)。a(t) 是具有较小值的系列,而 h(t) 是具有较大值的系列。它们是未知的,我试图获得它们
我有一些缺失值被 0 替换。
当有0时,我不知道它属于哪个系列。零总是以高索引存储在数组中例如在时间 t=136 我只有 4 个有效值。然后 array[t,i] > 0 for i <=3 and array[t,i] = 0 for i > 3
如何以我得到“连续”时间序列的方式对点进行聚类,即在时间 t=136,array[136,0] 应该进入 d,array[136,1] 应该进入 e,array[136, 2] 应该进入 f 并且 array[136,3] 应该进入 g
我用 scikit-learn 尝试了 AgglomerativeClustering 和 DBSCAN,但没有成功。
数据可在https://drive.google.com/file/d/1DKgx95FAqAIlabq77F9f-5vO-WPj7Puw/view?usp=sharing
解决方案
我的解释是你的意思是你有 400 列和 8 行的数据。数据值分配给正确的列,但不一定分配给正确的行。您的图显示 8 个信号不相互交叉,因此您应该能够简单地单独对每一列进行排序。但是现在丢失的数据是问题所在,因为代表丢失数据的零都会排序到最底部的行,从而迫使真实数据进入错误的行。
我不知道这是否是一个好的答案,但我的第一个预感是首先对每一列进行单独排序,然后从一个有多个相邻列的位置开始,其中包含完整的真实数据,然后首先远离该位置从左到右,一次一列:如果该列不包含零,则可以。如果它包含零,则计算本地行平均值紧邻的列,仅使用非零值(列数取决于缺失数据的密度和信号之间的分辨率),然后将当前列中的每个有效值放入具有最接近 'local行平均值'值,并在其余行中放置零。如何编写代码取决于您到目前为止所做的工作。如果您使用的是 numpy,那么首先将零转换为 NaN 会很方便,因为 numpy.nanmean() 将忽略 NaN。
推荐阅读
- swift - How to use returning with Vapor's PostgreSQL driver
- java - How to declared method in Java generically, operating on interface of several subtypes?
- kubernetes - 如何更改 Mac(docker-desktop)上的默认节点端口范围?
- python - 无法使用 Python 发送 WhatApp 消息
- javascript - 当我运行此代码上下文 API 和 Reactjs 时,出现渲染而不是函数错误
- javascript - lodash debounce & ES6 类 - 这个。不是函数
- mysql-workbench - MySQL Error 1136:Column count does not match value count at row 1?
- node.js - Jimp 将图像写入谷歌云存储节点 js
- python-3.x - Specifying gpus in keras backend without CUDA_VISIBLE
- c# - 可以使用 Mono 运行程序,但不能使用 Visual Studio Mac