解释DecisionTreeRegressor得分?

时间:2017-09-10 09:27:37

标签: python machine-learning scikit-learn decision-tree supervised-learning

我正在尝试评估功能的相关性,我正在使用DecisionTreeRegressor()

代码的相关部分如下所示:

# TODO: Make a copy of the DataFrame, using the 'drop' function to drop the given feature
new_data = data.drop(['Frozen'], axis = 1)

# TODO: Split the data into training and testing sets(0.25) using the given feature as the target
# TODO: Set a random state.

from sklearn.model_selection import train_test_split


X_train, X_test, y_train, y_test = train_test_split(new_data, data['Frozen'], test_size = 0.25, random_state = 1)

# TODO: Create a decision tree regressor and fit it to the training set

from sklearn.tree import DecisionTreeRegressor


regressor = DecisionTreeRegressor(random_state=1)
regressor.fit(X_train, y_train)

# TODO: Report the score of the prediction using the testing set

from sklearn.model_selection import cross_val_score


#score = cross_val_score(regressor, X_test, y_test)
score = regressor.score(X_test, y_test)

print score  # python 2.x 

当我运行print函数时,它返回给定的分数:

  

-0.649574327334

您可以在here及以下{<3}}下找到分数函数实现和一些解释:

  

返回预测的确定系数 R ^ 2 。   ...   最好的分数是1.0,它可能是负的(因为           模型可以任意恶化。)

我无法掌握整个概念,所以这个解释对我没有多大帮助。例如,我无法理解为什么得分可能是负面的,它究竟表明了什么(如果某些东西是平方的,我希望它只能是正数)。

这个分数表示什么,为什么它是负面的?

如果您知道任何文章(对于初学者),它也可能有用!

2 个答案:

答案 0 :(得分:1)

如果模型适合比水平线更差的数据,则

R^2从其定义(https://en.wikipedia.org/wiki/Coefficient_of_determination)可能是负数。基本上

R^2 = 1 - SS_res/SS_tot

SS_resSS_tot始终为正。如果SS_res >> SS_tot,您的结果为R^2。看看这个答案:https://stats.stackexchange.com/questions/12900/when-is-r-squared-negative

答案 1 :(得分:0)

文章执行const compare = (a,b) => a.map((el,i)=>i?el-b[i]:"") .map(n => ((n && n>0)?"+":"")+n); ,其中cross_val_score已实施。您可以查看scikitlearn DecisionTreeRegressor的文档。 基本上,你看到的分数是R ^ 2,或(1-u / v)。 U是预测的平方和残差,v是总平方和(样本平方和)。

当你做出非常糟糕的预测时,u / v可以是任意大的,而在给定u和v是残差平方和(&gt; = 0)的情况下它只能小到零