我有這種分類/迴歸任務,但最有趣的是每個記錄的特徵數量是不同的。特徵已經被提取並且已經準備好,因此數據的上下文是未知的,並且特徵的值在-10到10之間波動。具有超過200個特徵的記錄,同樣存在特徵數量低於20的記錄。處理具有不同數量特徵的數據
數據幀df
有兩列:ID
和ATTRIBUTES
和輸出看起來是這樣的:
ID ATTRIBUTES
0 1 1.1 2.1 3.3 4.4 5.5 6.6 ... 99.9 100.0 101.1 102.2
1 2 1.1 2.1 3.3 4.4 5.5 6.6 ... 45.0 46.0 47.0 49.0
2 3 1.1 2.1 3.3 4.4 5.5 6.6 ... 9.0 10.0 11.0 12.0
3 4 1.1 2.1 3.3 4.4 5.5 6.6 ... 70.0 71.0 72.0 73.0
4 5 1.1 2.1 3.3 4.4 5.5 6.6 ... 131.0 132.0 134.0 135.0
我已經列ATTRIBUTES
分成單獨的列:
df['ATTRIBUTES'].str.split(' ', expand=True).astype(float)
現在df
看起來是這樣的:
0 1 2 3 4 5 6 7 8 9 ... 131 132 133 134 135
0 1.1 2.1 3.3 4.4. 5.5. 6.6. 7.7 8.8 9.9 ... NaN NaN NaN NaN NaN
1 1.1 2.1 3.3 4.4. 5.5. 6.6. 7.7 8.8 9.9 ... NaN NaN NaN NaN NaN
2 1.1 2.1 3.3 4.4. 5.5. 6.6. 7.7 8.8 9.9 ... NaN NaN NaN NaN NaN
3 1.1 2.1 3.3 4.4. 5.5. 6.6. 7.7 8.8 9.9 ... NaN NaN NaN NaN NaN
4 1.1 2.1 3.3 4.4. 5.5. 6.6. 7.7 8.8 9.9 ... 131.0 132.0 133.0 134.0 135.0
假設RECORD1有102層的功能,REC2 - 49,rec3- 12,rec4-73,rec5 - 135後分割操作記錄rec1, rec2, rec3, rec4
被填充了NaN
值填充數據框。
一些谷歌上搜索我已經與以下思路上來後:
- 首先想到的是改變使用 Imputer有意義的功能
NaN
值; - 丟棄少於20(40,60等)特徵的記錄。
對於分類我選擇了RandomForest。
基準性能約爲0.4117,同時驗證訓練集的10%(使用train_test_split)。
儘管這一切我曾嘗試:用ExtraTreesClassifier
基準性能早已不是通過主成分分析(PCA)
- Feature scaling - standardisation
- 降維
- 基於樹的特徵選擇提出了高於0.4 ... 所以我的問題是 - 如何應該繼續缺乏有限元特定記錄的特徵?
1.記錄之間缺少特徵(在某些情況下超過200個特徵)存在巨大差距,因此我不確定額外的特徵聚合是否有幫助。 2.我做了類似的事情 - 通過「切斷」附加特徵列來減少特徵的數量,因此所有記錄可以具有相同數量的特徵,儘管可能消除了一些重要特徵。假設有這樣的模式,我應該如何處理這些信息? –
如果檢測到這種模式,那麼也許它會幫助添加一個新功能 - 所有數據點 - 封裝此信息,您可以使用一個比例尺,然後「切斷」「額外」功能,並嘗試適合所有數據點都具有的功能加上新功能。此功能將用作您在特徵量和類標籤之間找到的相關性的「指標」。 – Thanos