我正在尝试使用R对气象站进行聚类。这些站按小时间隔提供温度,风速,湿度等数据。我可以使用tsclust库轻松地对单变量时间序列进行聚类,但是当我对多变量序列进行聚类时会出错。
我将数据作为列表,因此每个列表元素都是一个矩阵,其中一个站的时间序列数据(变量是列,行是不同的时间戳)。
如果我运行:
tsclust(data, k = 2,
distance = 'Euclidean', seed = 3247, trace = TRUE)
我得到错误:do.call(.External,c(list(CFUN,x,y,pairwise,if(!is.function(method))get(method)else method),错误,不是标量返回值
如果尝试使用
仅计算距离矩阵,则会遇到相同的错误dist(data, method="euclidean")
也许无法为此类数据计算欧几里得距离?如果是,那么可以计算出什么距离?
答案 0 :(得分:0)
您应该仍然可以使用欧几里得语。
您只需自己实现,因为标准方法仅适用于向量,不适用于矩阵。但这对于实现自己来说是微不足道的。
如果变量的单位和大小不同,您可能会遇到缩放问题。
答案 1 :(得分:0)
如果您的系列长度相同,
您可以将它们转换为向量,然后重新调整尺寸。
但是,就像Anony-Mousse提到的那样,
将欧几里得距离与比例不同的变量一起使用可能会出现问题,
因此考虑使用private static void ShowValues()
{
Console.WriteLine($"Current values: A = {A}, B = {B}, C = {C}.");
}
private static int GetIntFromUser(string prompt)
{
int input;
do
{
Console.Write(prompt);
} while (!int.TryParse(Console.ReadLine(), out input));
return input;
}
private static void Main(string[] args)
{
while (true)
{
ShowValues();
ProcessInput(GetIntFromUser("Input a value: "));
}
}
进行标准化:
zscore