使用 sklearn(多个 CSV)进行交叉验证

数据挖掘 机器学习 Python scikit-学习 交叉验证
2022-03-05 12:40:55

我在一个文件夹中有 52 个 CSV 文件。我想根据这些数据建立一个模型。这就是为什么我想对这些数据进行交叉验证。如何在 python 中使用 sci-kit learn 来做到这一点?

我尝试了 sci kit 文档并搜索了许多资源。

import glob
import numpy as np
import pandas as pd
from sklearn.cross_validation import LeaveOneOut
path=r'...................\Data\New 
design process data'
filelist=glob.glob(path + "/*.csv")
loo=LeaveOneOut()
for train,test in loo.split(filelist):
   print("%s %s" % (train, test))

但它显示了错误。

init () 缺少 1 个必需的位置参数:'n'

我是 python 和 sci-kit 的新手。如果有人可以帮助我,那将是一个很大的方便。

3个回答

Leave One Out 交叉验证只是K-Fold 交叉 验证的一种特殊情况,其中折叠数 = 您要在其上运行交叉验证的数据集中的样本数。

对于 Python ,您可以执行以下操作:

from sklearn.model_selection import cross_val_score
scores = cross_val_score(classifier , X = input data , y = target values , cv = X.shape[0]) 

这里,cv = 折叠数。由于这里的cv = 样本数,我们将得到Leave One Out Cross Validationlist(scores)的长度将等于输入数据中的样本数。

Faraz 提供的答案是使用 sklearn 执行留一法交叉验证问题的一个很好的解决方案,并且很好地回避了原始海报的问题。
但是回到最初的问题,如何解决错误?显然sklearn中有两个版本的LeaveOneOut:

from sklearn.cross_validation import LeaveOneOut  #(of the original poster)

from sklearn.model_selection import LeaveOneOut   #(which you can find easily online)

它们的界面略有不同(cross_validationmodel_selection)。后者可以在没有参数的情况下运行(就像原始海报所做的那样),前者(原始海报使用的)至少需要一个参数(n:元素总数):

  import glob
  import numpy as np
  import pandas as pd
  from sklearn.cross_validation import LeaveOneOut
  path=r'...................\Data\New 
  design process data'
  filelist=glob.glob(path + "/*.csv")
  loo=LeaveOneOut(n=52)
  for train,test in loo.split(filelist):
     print("%s %s" % (train, test))

我认为这是因为您使用的是旧版本的 scikit learn。尝试model_selection在较新版本中使用模块。我正在使用 0.19.1,我得到了这个-

>>> import sklearn
>>> sklearn.__version__
'0.19.1'
>>> from sklearn.model_selection import LeaveOneOut
>>> loo = LeaveOneOut()

如您所见,这里没有错误。现在尝试使用cross_validation-

>>> from sklearn.cross_validation import LeaveOneOut as LOO
C:\Users\USER\AppData\Local\Continuum\Anaconda3\lib\site-packages\sklearn\cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.
  "This module will be removed in 0.20.", DeprecationWarning)
>>> loo = LOO()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() missing 1 required positional argument: 'n'