我試圖預測客戶端提出的特定服務票證是否需要更改代碼。具有比數據點更多功能的隨機森林
我有訓練數據。
我有一個問題描述和標籤周圍17K數據點(Y代碼變化需要和N爲無需更改代碼)
我做了TF-IDF,它給了我27K功能。所以我試圖用這個17k x 27k矩陣來適應RandomForestClassifier(sklearn python)。
我在測試集上得分非常低,而訓練的準確性非常高。
精密列車集:89% 精密的測試設置:21%
有人能提出任何變通辦法?
我現在用這個模型:
sklearn.RandomForestClassifier(n_jobs=3,n_estimators=100,class_weight='balanced',max_features=None,oob_score=True)
請幫幫忙!
編輯: 我有11k訓練數據900正面(偏斜)。我嘗試過LinearSVC稀疏化,但不像截斷SVD(潛在語義索引)那樣工作。 maxFeatures = None在測試集上表現比沒有表現更好。
我也試過SVM,邏輯(l2和l1),ExtraTrees。 RandonForest仍然工作得最好。 現在,在積極92%的精度,但召回只有3%
任何其他建議,將不勝感激!
更新: 特性工程幫助了很多。我從空中抽取特徵(字符數,字長,他們的差異,比率,問題所報告的星期幾,月中的某天等),現在我在19%至20%的回憶率下> 95 % 準確性。
食物爲您的想法使用word2vec平均向量作爲自由文本,而不是tf-idf或一袋文字的深層功能?
第一個建議是從不優化到測試集,這是一個災難的祕訣。對於參數優化,您應該始終使用某種形式的驗證集,即使用訓練集的交叉驗證來選擇參數,重新訓練整個訓練集,然後在測試集上進行測試。 – ncfirth
謝謝@ncfirth!我分裂它就像你說的,我能夠檢測到使用ngrams_range(1,2)給我比以前更好的結果...我的精確度已經提高(> 95%),但我仍然陷在召回率爲3%的困境中。我需要至少12-15%。我試圖玩概率閾值,但他們在精確度上(召回> 10%,精確度<35%)。還有什麼我可以做的嗎? –
您是否嘗試過使用召回作爲交叉驗證中的評分方法?選擇參數來增加召回可能會有所幫助。 – ncfirth