0

我對如何處理一些有趣的數據有疑問。預測有大量數據偏向一類的課程

我目前有一些數據(數量是真實的,但情況是假的),我們預測人們今天將在網上購買的T恤數量。我們對每個人都瞭解我們的特徵屬性,並且每天都會發生這些變化。我們也知道前幾天每個人都購買了多少件T恤衫。

我想要的是有一個算法能夠產生一個連續變量,這個連續變量是人們今天要購買的T恤數量的排名或「得分」。我的最終目標是,如果我可以將這個分數附加到每個人,我可以根據分數對它們進行分類,並在特定的用戶界面中使用它們。目前我一直在使用sci-kit進行隨機森林迴歸,其中我的目標課程是每個人昨天購買T恤衫的數量。除了我的數據稍微有點困難之外,這個計劃工作得非常好,因爲有很多人購買了0件T恤衫。這是一個問題,因爲我的隨機森林給了我很多0的預測類,並且我無法有效地對它們進行分類。我明白爲什麼會發生這種情況,但我不確定最好的解決方法。

我想要的是一個非零分數(即使它是一個接近於0的非常小的數字),它會告訴我更多關於特徵和預測分類的信息。我覺得我的一些功能必須能夠告訴我一些事情,並給我一個比0更好的預測。

我認爲固有的問題是使用隨機森林迴歸器作爲算法。每棵樹都得到一票;然而,有太多的零,有很多森林,所有的樹都投了0。我想要另一個算法來嘗試,但我不知道哪一個會最好。目前,我正在對整個數據集進行培訓,並使用scikit提供的出包預估。 。

下面是(使用Python的計數器([目標類])的數據類的計數這是設置爲這樣:{predicted_class_value:counts_of_that_value_in_the_target_class_list} {0:3560426,1:121256,2:10582 3: 8:21,9:17,10:17,11:10,12:2,13:2,15:2,21:2,3: 17:1,18:1和52:1,25:1}

我嘗試過的一些事情操縱訓練數據,但我真的事情要做猜測

有一件事我試過基於其他數據將訓練集中的零點數量縮放爲線性縮放量,因此,不要將算法通過3.5米十億級的行,我把它縮小到25萬。所以我的訓練集看起來像:{0:250,000,1:121256,2:10582,3:1029,...}。這對算法返回的0的數量有很大的影響。我已經從算法中猜出99%的數據爲0,大約只有50%。但是,我不知道這是否是有效的事情,或者它是否合理。

我試過的其他東西包括增加森林大小 - 但是沒有太多的效果,告訴隨機森林只對每棵樹使用sqrt特徵 - 這已經有了很好的效果,並使用出包預估 - 這似乎也有不錯的結果。

總結一下,我有一組數據,其中有一個數據的數據量不成比例。我想有一些方法可以產生一個連續的值,它是預測數據集中每個值的「分數」,所以我可以對它們進行分類。

謝謝你的幫助!

回答

3

這是一個不平衡的類問題。你可以做的一件事是過度/欠採樣。欠採樣意味着你隨機刪除大多數類中的實例。過度抽樣意味着您使用少數族別的替代實例進行抽樣。或者你可以使用兩者的組合。你可以嘗試的一件事是SMOTE [1],它是一種過採樣算法,但它不是僅從少數類中抽取現有實例,而是創建可避免過擬合的綜合實例,並且在理論上將更好地泛化。

[1] Chawla,Nitesh V.,et al。 「SMOTE:合成少數羣體過採樣技術。」 Journal of artificial intelligence research(2002):321-357。

+0

謝謝你的洞察力。這真的很有幫助,它使我獲得了一些很棒的文檔。 – HappyCamper