我遇到一個非常奇怪的行爲,從VectorAssembler
我想知道是否有其他人看過這個。Spark ML VectorAssembler返回奇怪的輸出
我的場景非常簡單。我從一個CSV
文件解析數據,我有一些標準的Int
和Double
字段,我也計算一些額外的列。我的解析函數返回此:
val joined = countPerChannel ++ countPerSource //two arrays of Doubles joined
(label, orderNo, pageNo, Vectors.dense(joinedCounts))
我的主要功能使用的分析函數是這樣的:
val parsedData = rawData.filter(row => row != header).map(parseLine)
val data = sqlContext.createDataFrame(parsedData).toDF("label", "orderNo", "pageNo","joinedCounts")
然後我用一個VectorAssembler
這樣的:
val assembler = new VectorAssembler()
.setInputCols(Array("orderNo", "pageNo", "joinedCounts"))
.setOutputCol("features")
val assemblerData = assembler.transform(data)
所以,當我打印我的數據在進入VectorAssembler
之前是這樣的:
[3.2,17.0,15.0,[0.0,0.0,0.0,0.0,3.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,4.0,0.0,0.0,2.0]]
後,我打印數據的同一行和VectorAssembler的變換函數得到這樣的:
[3.2,(18,[0,1,6,9,14,17],[17.0,15.0,3.0,1.0,4.0,2.0])]
這到底是怎麼回事? VectorAssembler
做了什麼?我已經仔細檢查了所有的計算結果,甚至遵循了簡單的Spark示例,並且看不到我的代碼出了什麼問題。你可以嗎?
我可以改變嗎? – Dimitris
此外,我正在使用LinearRegression算法,並希望獲得每個輸入的係數。這種稀疏表示是否使得難以得到這些係數? – Dimitris
它並沒有讓它更難。您可以將稀疏矢量轉換爲稠密矢量,因爲我相信它只是一個矢量輸出,並且在索引和元素之間有一個簡單的映射。 – eliasah