【发布时间】:2018-02-10 15:21:22
【问题描述】:
我有一个在 R 中创建的数据集。它的结构如下:
> head(btc_data)
Date btc_close eth_close vix_close gold_close DEXCHUS change
1647 2010-07-18 0.09 NA NA NA NA 0
1648 2010-07-19 0.08 NA 25.97 115.730 NA -1
1649 2010-07-20 0.07 NA 23.93 116.650 NA -1
1650 2010-07-21 0.08 NA 25.64 115.850 NA 1
1651 2010-07-22 0.05 NA 24.63 116.863 NA -1
1652 2010-07-23 0.06 NA 23.47 116.090 NA 1
我正在尝试使用 k-means 对观察结果进行聚类。但是,我收到以下错误消息:
> km <- kmeans(trainingDS, 3)
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
In addition: Warning message:
In storage.mode(x) <- "double" : NAs introduced by coercion
这是什么意思?我是否错误地预处理数据?我能做些什么来修复它?我不能放弃 NA,因为在 4500 个初始观察结果中,如果我运行 complete cases,我只剩下 100 个观察结果。
基本上我希望基于change 列的值为-1,0,1 形成3 个集群。然后,我希望分析每个集群的组成部分,以找到最强的变化预测因子。还有哪些其他算法对此最有用?
我还尝试使用以下代码删除所有 NA 值,但仍然收到相同的错误消息:
> complete_cases <- btc_data[complete.cases(btc_data), ]
> km <- kmeans(complete_cases, 3, nstart = 20)
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
In addition: Warning message:
In storage.mode(x) <- "double" : NAs introduced by coercion
> sum(!sapply(btc_data, is.finite))
[1] 8008
> sum(sapply(btc_data, is.nan))
[1] 0
>
> sum(!sapply(complete_cases, is.finite))
[1] 0
> sum(sapply(complete_cases, is.nan))
[1] 0
这是数据的格式:
> sapply(btc_data, class)
Date btc_close eth_close vix_close gold_close DEXCHUS change
"Date" "numeric" "numeric" "numeric" "numeric" "numeric" "factor"
【问题讨论】:
-
> sum(!sapply(btc_data, is.finite)) [1] 8008 > sum(!sapply(btc_data, is.nan)) [1] 18193 -
@coffeinjunky 我编辑了这个问题....另外,我不知道为什么完整案例的
sum是721特别是因为只有 103 个观察结果...当我手动检查df 没有 NA 的 -
好的-我删除了
!并编辑了问题...你的意思是knn应该在complete_cases上工作,但我仍然收到相同的错误消息 -
好的,我添加了该信息
-
酷。在这种情况下,日期列可能是罪魁祸首。
标签: r machine-learning k-means