我有一個包含一列標準化特征的資料框,如下所示:
--------------------
| normFeatures|
--------------------
|(17412,[0,1,2,5,1...|
|(17412,[0,1,2,5,9...|
|(17412,[0,1,2,5,1...|
|(17412,[0,1,2,5,9...|
|(17412,[0,1,2,5,1...|
|(17412,[0,1,2,5,1...|
--------------------
這些向量是在將StringIndexer、OneHotEncoder和VectorAssembler應用于原始屬性列后獲得的。
我想知道是否可以計算新的屬性數量。我不知道新數字是否是向量的大小,或者嵌套內部的數字是否[]也()算作屬性。
矢量化前的資料框:
--------- --------- ------------- --------- ------- -------- -------- -------- ------- -------- -------
|DayOfWeek| DepTime|UniqueCarrier|FlightNum|TailNum|ArrDelay|DepDelay|Distance|TaxiOut| Date| Flight|
--------- --------- ------------- --------- ------- -------- -------- -------- ------- -------- -------
| Thursday|Afternoon| WN| 588| N240WN| 16| 18| 393| 9|2008/1/3|HOU-LIT|
| Thursday| Morning| WN| 1343| N523SW| 2| 5| 441| 8|2008/1/3|HOU-MAF|
| Thursday| Night| WN| 3841| N280WN| -4| -6| 441| 14|2008/1/3|HOU-MAF|
| Thursday| Morning| WN| 3| N308SA| -2| 8| 848| 7|2008/1/3|HOU-MCO|
| Thursday|Afternoon| WN| 25| N462WN| 16| 23| 848| 10|2008/1/3|HOU-MCO|
| Thursday| Night| WN| 51| N483WN| 0| 4| 848| 7|2008/1/3|HOU-MCO|
| Thursday| Evening| WN| 940| N493WN| 3| 8| 848| 7|2008/1/3|HOU-MCO|
| Thursday| Morning| WN| 2621| N266WN| 5| 2| 848| 19|2008/1/3|HOU-MCO|
| Thursday| Evening| WN| 389| N266WN| -5| -1| 937| 15|2008/1/3|HOU-MDW|
| Thursday|Afternoon| WN| 519| N514SW| 26| 28| 937| 13|2008/1/3|HOU-MDW|
--------- --------- ------------- --------- ------- -------- -------- -------- ------- -------- -------
向量化和歸一化后的資料框:
--------- --------- ------------- --------- ------- -------- -------- -------- ------- -------- ------- --------- ------------ ------------------ ----------- ------------ -------------- -------------- ------------- ------------------- ------------- ------------------- --------------- ---------------- ------------------- -------------------- --------------------
|DayOfWeek| DepTime|UniqueCarrier|FlightNum|TailNum|ArrDelay|DepDelay|Distance|TaxiOut| Date| Flight|DateIndex|DepTimeIndex|UniqueCarrierIndex|FlightIndex|TailNumIndex|FlightNumIndex|DayOfWeekIndex| DayOfWeekVec| FlightNumVec| DepTimeVec| FlightVec| DateVec|UniqueCarrierVec| TailNumVec| features| normFeatures|
--------- --------- ------------- --------- ------- -------- -------- -------- ------- -------- ------- --------- ------------ ------------------ ----------- ------------ -------------- -------------- ------------- ------------------- ------------- ------------------- --------------- ---------------- ------------------- -------------------- --------------------
| Thursday|Afternoon| WN| 588| N240WN| 16| 18| 393| 9|2008/1/3|HOU-LIT| 9.0| 1.0| 0.0| 3631.0| 554.0| 399.0| 2.0|(6,[2],[1.0])| (7262,[399],[1.0])|(3,[1],[1.0])|(4974,[3631],[1.0])|(120,[9],[1.0])| (19,[0],[1.0])| (5025,[554],[1.0])|(17412,[0,1,2,5,1...|(17412,[0,1,2,5,1...|
| Thursday| Morning| WN| 1343| N523SW| 2| 5| 441| 8|2008/1/3|HOU-MAF| 9.0| 0.0| 0.0| 3060.0| 1256.0| 3961.0| 2.0|(6,[2],[1.0])|(7262,[3961],[1.0])|(3,[0],[1.0])|(4974,[3060],[1.0])|(120,[9],[1.0])| (19,[0],[1.0])|(5025,[1256],[1.0])|(17412,[0,1,2,5,9...|(17412,[0,1,2,5,9...|
| Thursday| Night| WN| 3841| N280WN| -4| -6| 441| 14|2008/1/3|HOU-MAF| 9.0| 3.0| 0.0| 3060.0| 463.0| 1520.0| 2.0|(6,[2],[1.0])|(7262,[1520],[1.0])| (3,[],[])|(4974,[3060],[1.0])|(120,[9],[1.0])| (19,[0],[1.0])| (5025,[463],[1.0])|(17412,[0,1,2,5,1...|(17412,[0,1,2,5,1...|
| Thursday| Morning| WN| 3| N308SA| -2| 8| 848| 7|2008/1/3|HOU-MCO| 9.0| 0.0| 0.0| 1285.0| 93.0| 76.0| 2.0|(6,[2],[1.0])| (7262,[76],[1.0])|(3,[0],[1.0])|(4974,[1285],[1.0])|(120,[9],[1.0])| (19,[0],[1.0])| (5025,[93],[1.0])|(17412,[0,1,2,5,9...|(17412,[0,1,2,5,9...|
| Thursday|Afternoon| WN| 25| N462WN| 16| 23| 848| 10|2008/1/3|HOU-MCO| 9.0| 1.0| 0.0| 1285.0| 497.0| 213.0| 2.0|(6,[2],[1.0])| (7262,[213],[1.0])|(3,[1],[1.0])|(4974,[1285],[1.0])|(120,[9],[1.0])| (19,[0],[1.0])| (5025,[497],[1.0])|(17412,[0,1,2,5,1...|(17412,[0,1,2,5,1...|
| Thursday| Night| WN| 51| N483WN| 0| 4| 848| 7|2008/1/3|HOU-MCO| 9.0| 3.0| 0.0| 1285.0| 282.0| 204.0| 2.0|(6,[2],[1.0])| (7262,[204],[1.0])| (3,[],[])|(4974,[1285],[1.0])|(120,[9],[1.0])| (19,[0],[1.0])| (5025,[282],[1.0])|(17412,[0,1,2,5,1...|(17412,[0,1,2,5,1...|
| Thursday| Evening| WN| 940| N493WN| 3| 8| 848| 7|2008/1/3|HOU-MCO| 9.0| 2.0| 0.0| 1285.0| 342.0| 1455.0| 2.0|(6,[2],[1.0])|(7262,[1455],[1.0])|(3,[2],[1.0])|(4974,[1285],[1.0])|(120,[9],[1.0])| (19,[0],[1.0])| (5025,[342],[1.0])|(17412,[0,1,2,5,1...|(17412,[0,1,2,5,1...|
| Thursday| Morning| WN| 2621| N266WN| 5| 2| 848| 19|2008/1/3|HOU-MCO| 9.0| 0.0| 0.0| 1285.0| 555.0| 2051.0| 2.0|(6,[2],[1.0])|(7262,[2051],[1.0])|(3,[0],[1.0])|(4974,[1285],[1.0])|(120,[9],[1.0])| (19,[0],[1.0])| (5025,[555],[1.0])|(17412,[0,1,2,5,9...|(17412,[0,1,2,5,9...|
| Thursday| Evening| WN| 389| N266WN| -5| -1| 937| 15|2008/1/3|HOU-MDW| 9.0| 2.0| 0.0| 1081.0| 555.0| 1016.0| 2.0|(6,[2],[1.0])|(7262,[1016],[1.0])|(3,[2],[1.0])|(4974,[1081],[1.0])|(120,[9],[1.0])| (19,[0],[1.0])| (5025,[555],[1.0])|(17412,[0,1,2,5,1...|(17412,[0,1,2,5,1...|
| Thursday|Afternoon| WN| 519| N514SW| 26| 28| 937| 13|2008/1/3|HOU-MDW| 9.0| 1.0| 0.0| 1081.0| 133.0| 309.0| 2.0|(6,[2],[1.0])| (7262,[309],[1.0])|(3,[1],[1.0])|(4974,[1081],[1.0])|(120,[9],[1.0])| (19,[0],[1.0])| (5025,[133],[1.0])|(17412,[0,1,2,5,1...|(17412,[0,1,2,5,1...|
--------- --------- ------------- --------- ------- -------- -------- -------- ------- -------- ------- --------- ------------ ------------------ ----------- ------------ -------------- -------------- ------------- ------------------- ------------- ------------------- --------------- ---------------- ------------------- -------------------- --------------------
代碼:
val numeric_columns = Array("ArrDelay","DepDelay","TaxiOut","Distance")
val string_columns = df.columns.diff(numeric_columns)
println("Getting vector of normalized features")
val index_columns = string_columns.map(col => col "Index")
// StringIndexer
val indexer = new StringIndexer()
.setInputCols(string_columns)
.setOutputCols(index_columns)
val vec_columns = string_columns.map(col => col "Vec")
// OneHotEncoder
val encoder = new OneHotEncoder()
.setInputCols(index_columns)
.setOutputCols(vec_columns)
// VectorAssembler
val num_vec_columns:Array[String] = (numeric_columns.filter(!_.contains("ArrDelay"))) vec_columns
val assembler = new VectorAssembler()
.setInputCols(num_vec_columns)
.setOutputCol("features")
// Normalizer
val normalizer = new Normalizer()
.setInputCol("features")
.setOutputCol("normFeatures")
.setP(1.0)
// All together in pipeline
val pipeline = new Pipeline()
.setStages(Array(indexer, encoder, assembler,normalizer))
df = pipeline.fit(df).transform(df)
df.printSchema()
df.show(10)
println("Done")
println("-------------------")
提前致謝。
uj5u.com熱心網友回復:
這里的一些考慮:
您在這里擁有的是一個 SparseVector 表示,它用于多個稀疏向量變換。這些是在您使用 OneHotEncoder 轉換時創建的(它已被棄用)。所以當你有類似的東西時:
(7262,[399],[1.0])
這是一個描述,表明您有一個包含 7262 個位置的向量,其中 1.0 位于 399 個位置。這里的長度是7262,雖然是稀疏表示,但并不密集。
矢量匯編器正在連接稀疏表示,最后你有一個最終的 17412 長度稀疏表示。如果您在不截斷的情況下列印資料框,您將看到normFeatures列的位置和值。
如果您想提取此欄位的長度,您可以執行以下操作:
val row = df2.select("normFeatures").head
val vector = row(0).asInstanceOf[SparseVector]
val size = vector.size
但是,整個資料幀的稀疏表示長度不是固定的。您可以具有不同長度的行,盡管具有不應該發生的相同轉換。如果您無法跟蹤應用的轉換,則在對另一個資料幀執行聯合操作時要小心。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/364795.html
下一篇:組合月份和年份列以創建日期列
