我有兩個學過sklearn.tree.tree.DecisionTreeClassifier
s。兩者都使用相同的訓練數據進行訓練。兩者都用於決策樹的最大深度的。 decision_tree_model
的深度爲6
,small_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:
的問題得到解決。我以錯誤的方式處理了訓練數據,導致了不同的擬合。
這裏是準確的情節固定失誤後:
這看起來是正確的,也可以解釋爲什麼分配的創造者選擇選擇6作爲最大深度。
你指定'max_depth'的原因是什麼?如果您將None設置爲無,則該算法將根據需要嘗試擴展節點(粗略地說)。另外,您是否可以通知可能已設置的其他參數,例如'min_samples_split'和'max_leaf_nodes',這可能很重要? –
@tuliocasagrande有一個原因。這是在線課程的一部分,將這些模型的深度設置爲2和6。沒有其他參數已經指定,我會添加這個信息的問題。 – Zelphir
由於您使用的是訓練數據,因此較低的準確性也令我困惑。我唯一能說的就是'score()'只是[accuracy_score()]的一個旁路(http://scikit-learn.org/stable/modules/generated/sklearn.metrics.accuracy_score.html),而如你所想,輸出不是一個「1精度」。在內部它只是做一個'score = y_true == y_pred'。 –