Dataframe Julia clustering.jl独立包含3列
我有一个数据框,它有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要求一
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
aMatrix
而不是Vector
(被视为列)。有点离题,但我建议使用比聚类快得多的方法。jl
好的,谢谢你的建议