我有一些代码来验证一个模型,在这个模型中,我希望每年在我的数据中使用它作为支撑集.因此,我使用的是sklearn LeaveOneGroupOut:

log_loss_data = [] 
acc_data = []

years = np.arange(df.year.min(),df.year.max()+1)[::-1]

groups = df['year']

X = df[[__my_features__]]
y = df[__my_target__]

logo = LeaveOneGroupOut()
logo.get_n_splits(X, y, groups)

logo.get_n_splits(groups=groups)

for year, (train_index, test_index) in zip(years, logo.split(X, y, groups)):
  print(f'Leaving out {year}...')

  X_train, X_test = X.iloc[train_index].copy(), X.iloc[test_index].copy()
  y_train, y_test = y.iloc[train_index].copy(), y.iloc[test_index].copy()

  model = LGBMClassifier()
  model.fit(X_train, y_train)

  X_test["make_pred"] = (pd.
                         DataFrame(model.predict_proba(X_test),index=X_test.index,columns=[0,"pred"])[["pred"]]
                         )

  log_loss_data.append(log_loss(y_test,X_test["pred"])) 
  acc_data.append(accuracy_score(y_test,np.round(X_test["pred"])))

完成后,我会列出每组的日志(log)丢失和准确性分数.上面的代码假设组的顺序是从大到小,但我不确定是否是这样.我想将我的简历分数与他们相应的组别年份联系起来,看看是否有任何年份(或几组年份/季节性)会导致不同/更差的分数.在文档中,似乎只有两种方法.get_n_splits().split().我认为在每次简历迭代中肯定有一种方法可以访问组值...我的假设是错误的吗?

EDIT:我做了一些测试,结果表明,数字组可能按照从最小到最大的顺序进行迭代.为了验证这一点,我创建了两个不同的模型.一个使用我数据中最早的年份作为测试集,另一个使用最新的年份.这些模型的相应分数分别与第一组和最后一组cv迭代分数相匹配.虽然没有官方文件(我遇到过)证实这一点,但考虑到这个测试,我非常确信它们确实是按从最小到最大的顺序迭代的.

推荐答案

是的,正如您所发现的,拆分按组标识符的顺序进行.

the source中,您可以看到:组数组通过numpy.uniquewhich returns the items in order,然后这些数组被循环.

Python相关问答推荐

Pandas滚动分钟,来自其他列的相应值

"Discord机器人中缺少所需的位置参数ctx

在Arrow上迭代的快速方法.Julia中包含3000万行和25列的表

阅读Polars Python中管道的函数定义

使用Ubuntu、Python和Weasyprint的Docker文件-venv的问题

剧作家Python:expect(locator).to_be_visible()vs locator.wait_for()

添加包含中具有任何值的其他列的计数的列

Locust请求中的Python和参数

使用SciPy进行曲线匹配未能给出正确的匹配

当多个值具有相同模式时返回空

如何让Flask 中的请求标签发挥作用

加速Python循环

如何使用pytest来查看Python中是否存在class attribution属性?

Streamlit应用程序中的Plotly条形图中未正确显示Y轴刻度

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

在pandas中使用group_by,但有条件

UNIQUE约束失败:customuser. username

如何使用SentenceTransformers创建矢量嵌入?

如何从列表框中 Select 而不出错?

使用Python异步地持久跟踪用户输入