Dataframe Julia clustering.jl独立包含3列

Dataframe Julia clustering.jl独立包含3列,dataframe,julia,cluster-analysis,Dataframe,Julia,Cluster Analysis,我有一个数据框,它有3列,只有连续数据。 我想对它们进行集群,但不是通常的方式(这是为了用我制作的模型测试性能)。 相反,我想独立地对列进行聚类,然后用它进行计算(我将在后面解释) 通常我会这么做: X = rand(3, 1000) r = kmeans(X, 3; maxiter=200) 就这样 但在这里,我想: for each columns r = kmeans(X[thecolumns], 3; maxiter=200) 有3列相互独立的群集 函数kmeans要求一

我有一个数据框,它有3列,只有连续数据。 我想对它们进行集群,但不是通常的方式(这是为了用我制作的模型测试性能)。 相反,我想独立地对列进行聚类,然后用它进行计算(我将在后面解释)

通常我会这么做:

X = rand(3, 1000)
r = kmeans(X, 3; maxiter=200)
就这样

但在这里,我想:

for  each columns
     r = kmeans(X[thecolumns], 3; maxiter=200)
有3列相互独立的群集

函数kmeans要求一个抽象矩阵,似乎我不能给它一个一维数组。请问我怎么做


谢谢

使用
eachcol
函数,然后在每个列上使用
permutedims
,如下所示:

10×3 DataFrame
│ Row │ x1        │ x2       │ x3        │
│     │ Float64   │ Float64  │ Float64   │
├─────┼───────────┼──────────┼───────────┤
│ 1   │ 0.207498  │ 0.868425 │ 0.685724  │
│ 2   │ 0.749254  │ 0.687906 │ 0.0772998 │
│ 3   │ 0.834508  │ 0.184708 │ 0.647621  │
│ 4   │ 0.0645001 │ 0.172216 │ 0.133732  │
│ 5   │ 0.214247  │ 0.157832 │ 0.760743  │
│ 6   │ 0.235033  │ 0.988136 │ 0.197389  │
│ 7   │ 0.679289  │ 0.356979 │ 0.868345  │
│ 8   │ 0.276346  │ 0.733741 │ 0.49799   │
│ 9   │ 0.254432  │ 0.480508 │ 0.465863  │
│ 10  │ 0.771157  │ 0.764749 │ 0.692134  │

julia> rs = map(col -> kmeans(permutedims(col), 3, maxiter=200), eachcol(df))
3-element Array{KmeansResult{Array{Float64,2},Float64,Int64},1}:
 KmeansResult{Array{Float64,2},Float64,Int64}([0.23751121600553188 0.7585518673590035 0.06450009603113083], [1, 2, 2, 3, 1, 1, 2, 1, 1, 2], [0.0009008220520715787, 8.644942657287658e-5, 0.005769294511402512, 0.0, 0.0005412131030494011, 6.140057031367441e-6, 0.006282650149634916, 0.0015081594831378164, 0.0002863056813391107, 0.00015888896049953694], [5, 4, 1], [5, 4, 1], 0.015539923424739116, 2, true)
 KmeansResult{Array{Float64,2},Float64,Int64}([0.2179339668173827 0.9282804966386198 0.6667262902233205], [2, 3, 1, 1, 1, 2, 1, 3, 3, 3], [0.0035826329649959465, 0.00044858356501908947, 0.0011039681597532075, 0.0020901229894580015, 0.003612197823712318, 0.0035826329649959465, 0.019333634884288103, 0.004491026838137957, 0.03467709461536661, 0.009608499373310986], [4, 2, 4], [4, 2, 4], 0.08253039417903817, 2, true)
 KmeansResult{Array{Float64,2},Float64,Int64}([0.7309133142778247 0.13614011534786297 0.48192651082237836], [1, 2, 1, 2, 1, 2, 1, 3, 3, 1], [0.0020420816188950752, 0.0034621827135169585, 0.006937609017906632, 5.801293569009103e-6, 0.0008898099287693029, 0.0037514280990030707, 0.01888739640456283, 0.00025803289581327604, 0.00025803289581327604, 0.001503841748597079], [5, 3, 2], [5, 3, 2], 0.037996216616446504, 2, true)
我使用
map
自动收集向量中每列的聚类结果

或者,您可以使用广播:

julia> kmeans.(permutedims.(eachcol(df)), 3, maxiter=200)
3-element Array{KmeansResult{Array{Float64,2},Float64,Int64},1}:
 KmeansResult{Array{Float64,2},Float64,Int64}([0.06450009603113083 0.7585518673590035 0.23751121600553188], [3, 2, 2, 1, 3, 3, 2, 3, 3, 2], [0.0009008220520715787, 8.644942657287658e-5, 0.005769294511402512, 0.0, 0.0005412131030494011, 6.140057031367441e-6, 0.006282650149634916, 0.0015081594831378164, 0.0002863056813391107, 0.00015888896049953694], [1, 4, 5], [1, 4, 5], 0.015539923424739116, 2, true)
 KmeansResult{Array{Float64,2},Float64,Int64}([0.8387629127432272 0.2179339668173827 0.5842072515988065], [1, 3, 2, 2, 2, 1, 2, 1, 3, 1], [0.0008798629662141177, 0.010753447354678758, 0.0011039681597532075, 0.0020901229894580015, 0.003612197823712318, 0.022312198616715184, 0.019333634884288103, 0.011029515161705694, 0.010753447354678758, 0.0054780232316526956], [4, 4, 2], [4, 4, 2], 0.08734641854285684, 3, true)
 KmeansResult{Array{Float64,2},Float64,Int64}([0.13614011534786297 0.5978663716196664 0.8145438674677745], [2, 1, 2, 1, 3, 1, 3, 2, 2, 2], [0.007718948294718642, 0.0034621827135169585, 0.0024755234035849227, 5.801293569009103e-6, 0.002894533739809191, 0.0037514280990030707, 0.0028945337398089688, 0.009975306947276774, 0.017424861487738807, 0.008886369880211853], [3, 5, 2], [3, 5, 2], 0.05948948959923819, 2, true)

非常感谢,它成功了。置换ims就像是从熊猫身上重塑一样,所以呢?
置换ims
就像是转置。Julia有更通用的
重塑
,但如果您愿意,也可以在本例中使用它。关键是要传递到
kmeans
a
Matrix
而不是
Vector
(被视为列)。有点离题,但我建议使用比
聚类快得多的方法。jl
好的,谢谢你的建议