- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是统计方法的新手,请原谅我的天真。当使用来自 sklearn 的决策树回归(例如 DecisionTreeRegressor 和 RandomForestRegressor)时,我在理解交叉验证的执行时遇到了问题。我的数据集从具有多个预测变量(y = 单个因变量;X = 多个自变量)到具有单个预测变量并且包含足够多的案例(> 10k)。以下解释适用于所有情况。
使用标准方法对回归变量进行拟合和评分时:
dt = DecisionTreeRegressor()
rf = RandomForestRegressor()
dt.fit(X,y)
rf.fit(X,y)
dt_score = dt.score(X,y)
rf_score = rf.score(X,y)
dt_score 和 rf_score 返回有前途的 R 平方值 (> 0.7),但是我知道 DT 的过度拟合属性以及较小程度的 RF。因此,我尝试通过交叉验证(10 倍)对回归变量进行评分,以获得更真实的准确性表示:
dt = DecisionTreeRegressor()
rf = RandomForestRegressor()
dt.fit(X,y)
rf.fit(X,y)
dt_scores = cross_val_score(dt, X, y, cv = 10)
rf_scores = cross_val_score(rf, X, y, cv = 10)
dt_score = round(sum(dt_scores )/len(dt_scores ), 3)
rf_score = round(sum(rf_scores )/len(rf_scores ), 3)
这个交叉验证的结果总是返回负值。我假设它们是根据 sklearn 指南的 R 平方值:默认情况下,每次 CV 迭代计算的分数是估计器的分数方法(两者的分数方法回归量是 R 平方)。基本 KFold 交叉验证指南给出的解释是:然后将每个折叠用作验证一次,而剩余的 k - 1 个折叠构成训练集。
当我使用 10 个旧的 cv 时,我的理解是:我的数据集被分成 10 个相等的部分,对于每个部分,其余 9 个部分用于训练(我不确定这是一个拟合操作还是一个分数操作),其余部分用于验证(不确定为验证做了什么)。这些回归器对我来说是一个完整的“黑匣子”,所以我不知道树是如何用于回归的,以及交叉验证从哪里得到它的 R 平方值。
总而言之,我很难理解交叉验证为何会如此显着地降低准确性(R 平方)?我是否对回归变量使用了交叉验证?对决策树回归器使用交叉验证是否有意义?我应该使用另一种交叉验证方法吗?
谢谢
最佳答案
整理了一个小代码片段,阐明了如何使用 DecisionTreeRegressor 和交叉验证。
一个。在第一个代码片段中使用了“cross_val_score”。但是,r2_score 可能有负分,从而洞察模型学习不佳的情况。
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.20, random_state=0)
dt = DecisionTreeRegressor(random_state=0, criterion="mae")
dt_fit = dt.fit(X_train, y_train)
dt_scores = cross_val_score(dt_fit, X_train, y_train, cv = 5)
print("mean cross validation score: {}".format(np.mean(dt_scores)))
print("score without cv: {}".format(dt_fit.score(X_train, y_train)))
# on the test or hold-out set
from sklearn.metrics import r2_score
print(r2_score(y_test, dt_fit.predict(X_test)))
print(dt_fit.score(X_test, y_test))
B.在下一节中,使用交叉验证对参数“min_samples_split”执行 GridSerach,然后使用最佳估计器对 valiation/holdout 集进行评分。 # 使用网格搜索: 从 sklearn.model_selection 导入 GridSearchCV 从 sklearn.metrics 导入 make_scorer 从 sklearn.metrics 导入 mean_absolute_error 从 sklearn.metrics 导入 r2_score
scoring = make_scorer(r2_score)
g_cv = GridSearchCV(DecisionTreeRegressor(random_state=0),
param_grid={'min_samples_split': range(2, 10)},
scoring=scoring, cv=5, refit=True)
g_cv.fit(X_train, y_train)
g_cv.best_params_
result = g_cv.cv_results_
# print(result)
r2_score(y_test, g_cv.best_estimator_.predict(X_test))
希望这有用。
https://www.programcreek.com/python/example/75177/sklearn.cross_validation.cross_val_score
关于python - 在 sklearn 中使用决策树回归和交叉验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44682307/
是否有显示测试用例数量以提供决策/条件覆盖率的工具? 例如: if(x>0) if(x0) 3 个案例足以覆盖决策/条件。 if(x>0) if(x0) 4 个案例足以覆盖决策/条件。 这是真的吗?
我正在尝试找到一种优雅的方式来实现易于维护的决策算法,因为决策的条件可能经常变化。 我将尝试更具体地举一个例子: 假设我正在尝试管理一家餐厅厨房的 cooking 厨师团队。 每个厨师都知道如何 co
我需要一个 Android Activity ,它应该显示一个字段,如带有图像的标题和其下方的几个动态生成的项目(我认为是 1 到 100)。如果我不想让 headsection 滚动,我会使用 Li
我正在编写函数以从值列表中提供最大值(value)。我的问题是如果所有值都相同怎么办?例如, 30,29,34,45 简单。最大值为 45。现在, 20,20,20,20 这里的最大值是20吗?或者没
我需要知道哪个检索事件日志的速度更快,但我在比较中找不到:假设需要查找的所有列都有btree索引,需要查找的json对象中的所有键都有GIN索引。 case 1: ActivityID (in
我需要在我的 iPhone 应用程序中显示一个表格: neither the number of cells nor the contents are known at compile time, b
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
这是针对在 MinGW/Windows 上使用 SDL 的小型游戏项目。 我正在研究一个物理引擎,我的想法是拥有一个Physics::Object,所有物理对象都应该派生自它,并且它会在全局 Phys
我有一个小的 LINQ 查询来填充下拉控件(WinForms Telerik 应用程序),其中的数据行显示两个值(ITNBR 和描述): var query = from i in db.ItemMa
我正在尝试使用 antlr 3 为我的语法生成词法分析器和解析器。有人可以解释这个错误是什么意思吗? error(211): T.g:14:6: [fatal] rule stmt has non-L
partykit包很好地表示了决策树。我遇到的唯一问题是标签很长然后它们重叠。是否可以移动这些标签以防止它(见下图中的蓝色箭头)? library("rpart") library("partykit
所以我环顾四周,似乎找不到合适的解决方案来解决我的问题。 问题 在我的布局中,我希望能够根据数据库中的内容选择在运行时是否存在导航项: 当前布局(导航栏) @Html.Acti
我目前正在创建一个机器学习 jupyter 笔记本作为一个小项目,并希望显示我的决策树。但是,我能找到的所有选项都是导出图形然后加载图片,这相当复杂。 所以想问问有没有办法不用导出加载图形,直接显示我
grammar AdifyMapReducePredicate; PREDICATE : PREDICATE_BRANCH | EXPRESSION ; PREDICA
我是一名优秀的程序员,十分优秀!