2016-05-08 245 views
2

我有兩個學過sklearn.tree.tree.DecisionTreeClassifier s。兩者都使用相同的訓練數據進行訓練。兩者都用於決策樹的最大深度的decision_tree_model的深度爲6small_model的深度爲2。除了max_depth之外,沒有指定其他參數。sklearn DecisionTreeClassifier更深度精度更低?

當我想在訓練數據他們二人的這樣的精度:

small_model_accuracy = small_model.score(training_data_sparse_matrix, training_data_labels) 
decision_tree_model_accuracy = decision_tree_model.score(training_data_sparse_matrix, training_data_labels) 

令人驚訝的是輸出爲:

small_model accuracy: 0.61170212766 
decision_tree_model accuracy: 0.422496238986 

這怎麼可能?在使用相同的訓練數據進行學習時,不應該使用具有較高最大深度的樹總是在訓練數據上具有較高的精度?這可能是score函數,它輸出1 - accuracy什麼的?

編輯

  • 我只是甚至更高最大深度測試它。返回的值變得更低。這暗示它是1 - accuracy或類似的東西。

編輯#2

這似乎是一個錯誤,我與訓練數據的工作做。我再次考慮了整個事情並得出結論:「如果深度更高,樹不應該成爲這個原因,還有什麼?訓練數據本身,但我使用了相同的數據!也許我做了中間的訓練數據有什麼用?「 然後我再次檢查,我在使用訓練數據方面存在差異。我需要將它從一個SFrame轉換爲一個scipy矩陣(可能也必須稀疏)。現在我在擬合這兩個模型後立即進行了另一個精度計算。這一結果爲small_model的準確率爲61%,decision_tree_model的準確率爲64%。這僅僅增加了3%,​​仍然有些令人驚訝,但至少有可能。

編輯#3

的問題得到解決。我以錯誤的方式處理了訓練數據,導致了不同的擬合。

這裏是準確的情節固定失誤後:

Decision Tree Accuracy

這看起來是正確的,也可以解釋爲什麼分配的創造者選擇選擇6作爲最大深度。

+0

你指定'max_depth'的原因是什麼?如果您將None設置爲無,則該算法將根據需要嘗試擴展節點(粗略地說)。另外,您是否可以通知可能已設置的其他參數,例如'min_samples_split'和'max_leaf_nodes',這可能很重要? –

+0

@tuliocasagrande有一個原因。這是在線課程的一部分,將這些模型的深度設置爲2和6。沒有其他參數已經指定,我會添加這個信息的問題。 – Zelphir

+0

由於您使用的是訓練數據,因此較低的準確性也令我困惑。我唯一能說的就是'score()'只是[accuracy_score()]的一個旁路(http://scikit-learn.org/stable/modules/generated/sklearn.metrics.accuracy_score.html),而如你所想,輸出不是一個「1精度」。在內部它只是做一個'score = y_true == y_pred'。 –

回答

1

具有較高最大深度的樹在使用相同訓練數據進行學習時總是有更高的準確度 ?

不,絕對不總是。問題在於你在適合更復雜的樹時將模型過度擬合到訓練數據上。因此,較低的分數會增加最大深度。

+0

如果這個值'score'返回的值越小,對於_training data_(不是驗證數據!這不是暗示過度配合嗎? – Zelphir

+1

該OP是在*相同的培訓數據*中進行培訓和測試。這裏的過度配合不應該是一個問題(實際上,當測試=訓練數據時,過度擬合是可取的)。 –

+1

@imaluengo,術語過度擬合只有在模型擬合過程中對訓練數據和樣本外數據進行成本測量時纔有意義。 –