2015-01-16 53 views
3

我一直在嘗試使用Python和scikit-learn工具包來訓練ML分類器。如何交叉驗證正確

首先我申請我自己的閾值(如int(LEN(X)* 0.75)),在將數據集和打印我的指標時,得到了這樣的結果:

  precision recall f1-score support 

     1  0.63  0.96  0.76  23 
     2  0.96  0.64  0.77  36 

avg/total 0.83  0.76  0.76  59 

然後我用交叉驗證,以有使用該模型的準確度的更詳細的視圖:分數= cross_validation.cross_val_score(X,Y,CV = 10),並得到下面的分數:

Cross_val_scores = [0.66666667 0.79166667 0.45833333 0.70833333 0.52173913
0.52173913 0.47826087 0.47826087 0.52173913 0.47826087 ]

準確度:0.56(標準差:+/- 0.22),其中準確度等於平均值​​(分數)。

有人可以請教我如何正確解釋這些分數?我理解使用交叉驗證時數據集是如何分裂的,以便在整個數據集範圍內觀察模型的準確性,但我想知道更多。

  • 舉例來說,有沒有辦法分裂,並達到最高精度(例如0.79166667),如果是的話我怎麼能這樣做呢?
  • 我想象會發生這種情況,因爲我的數據集中存在一個裂縫,即使用這些數據進行訓練時模型可以產生更接近的預測,對嗎?
  • 有沒有辦法降低相對較高的標準偏差?

謝謝你的時間。

+2

嘗試優化數據分離方式以提高交叉驗證分數沒有多大意義。交叉驗證的重點在於看你的模型對它不知道的數據有多好;以一種自定義的方式分裂它只是爲了提高你的分數,只是自欺欺人。你應該以某種先驗的方式確定分割(例如,純粹的隨機抽樣,跨分類分類,不管),並嘗試通過改進模型本身來最大化分數。 – BrenBarn

回答

0

有沒有辦法將其拆分並達到最高的準確度(例如0.79166667),如果是的話我該怎麼做?

很可能,但這隻意味着您通過擬合理想分割的訓練部分而獲得的模型,對於理想分割的驗證部分具有很高的準確性。這就是所謂的overfitting,.i.e你有一個只針對特定數據進行了優化的模型,但不能很好地用新數據進行概括。

我想,是因爲那裏是我的數據集內部的分裂是 模型使用這些數據來訓練時,可以產生更緊密的預測

是的,重要的是驗證部分更接近預測特別分裂。

有沒有辦法降低相對較高的標準偏差?

是的,通過選擇方差較小的模型(例如一個參數很少的線性模型)。但請注意,在這種情況下,您可能會失去預測準確性,這就是所謂的偏差 - 方差權衡。

一般而言,您只需要尋找一款具有良好平均交叉驗證得分(mCVS)的車型。但是如果你的模型都具有相同的mCVS,那麼你會選擇最小標準偏差的模型。在金融領域,例如波動性和不確定性是不需要的模型是根據夏普比率來選擇的,這就是平均值/標準差。但在KCGLE比賽中,獲勝標準是mCVS,那麼你顯然會想要最大化並忽略標準。

如果您擔心數據集中的變化不允許您有意比較您的模型,那麼您可以考慮在拆分之前使用不同數量的拆分並對數據進行整理。

+0

感謝您的答覆隊友!真正爲我澄清,正是我想知道的。乾杯.. – Swan87