Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么cross_val_分数效果很好,但cv.splits显示错误?_Python_Machine Learning_Scikit Learn - Fatal编程技术网

Python 为什么cross_val_分数效果很好,但cv.splits显示错误?

Python 为什么cross_val_分数效果很好,但cv.splits显示错误?,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,我尝试了cross\u val\u score。它没有显示错误 但如果我尝试使用cv.split它会显示错误 来自sklearn.employ的 从sklearn.model\u选择导入TimeSeriesSplit cv=时间序列分裂(n_分裂=5) clf=RandomForestClassifier(n_估计器=500,最大深度=10,随机状态=100,n_作业=-1) 对于列车,cv分割中的val(X,y): clf.fit(X.iloc[序列]、y[序列]) 我更改了索引,但它以前显

我尝试了
cross\u val\u score
。它没有显示错误

但如果我尝试使用
cv.split
它会显示错误

来自sklearn.employ的

从sklearn.model\u选择导入TimeSeriesSplit
cv=时间序列分裂(n_分裂=5)
clf=RandomForestClassifier(n_估计器=500,最大深度=10,随机状态=100,n_作业=-1)
对于列车,cv分割中的val(X,y):
clf.fit(X.iloc[序列]、y[序列])
我更改了索引,但它以前显示了相同的错误

对于列车,cv分割中的val(X.iloc[:400000,],y[:400000]):
clf.fit(X.iloc[序列号,],y[序列号])
我再更改一次索引,效果很好

对于列车,cv分割中的val(X.iloc[200000:400000,],y[200000:400000]):
clf.fit(X.iloc[序列号,],y[序列号])

我能做些什么?

简短回答:
y
行200000和400000之间的某个地方可能有一个NaN,并且可能不太接近400k

长答案: 您应该检查
np.sum(y.isnull())
,而不是
np.sum(X.isnull())
, 因为回溯显示在
y
中有NAN。那里会有南斯

显示的交叉验证检查不能保证
y
一切正常, 因为似乎对最后一个函数的作用有误解:
cv.split()
将索引返回给您提供给它的数组。两者

  • cv.split(X.iloc[:200000,],y[:200000])
  • cv.split(X.iloc[200000:400000,],y[200000:400000])
数组具有相同的行数,因此返回相同的索引。当你这样做的时候

对于列车,cv分割中的val(X.iloc[200000:400000,],y[200000:400000]):
clf.fit(X.iloc[序列号,],y[序列号])
实际上,您可以访问
X
中的0-200000行。要访问行200000-400000,您可以执行以下操作

对于列车,cv分割中的val(X.iloc[200000:400000,],y[200000:400000]):
clf.fit(X.iloc[200000:400000,][train],y[200000:400000][train])

我怀疑,如果你这样做,错误会再次出现。顺便说一句,
TimeSeriesSplit
不会将所有数据用于培训,请参阅。由于只显示拟合分类器,而不显示预测,因此当NaN非常接近
y
向量的末尾时,不会出现错误。时间序列中的最后一个观察值仅用于测试,而不用于训练。

简短回答:
y
行200000和400000之间的某个地方可能有一个NaN,并且可能不太接近400k

长答案: 您应该检查
np.sum(y.isnull())
,而不是
np.sum(X.isnull())
, 因为回溯显示在
y
中有NAN。那里会有南斯

显示的交叉验证检查不能保证
y
一切正常, 因为似乎对最后一个函数的作用有误解:
cv.split()
将索引返回给您提供给它的数组。两者

  • cv.split(X.iloc[:200000,],y[:200000])
  • cv.split(X.iloc[200000:400000,],y[200000:400000])
数组具有相同的行数,因此返回相同的索引。当你这样做的时候

对于列车,cv分割中的val(X.iloc[200000:400000,],y[200000:400000]):
clf.fit(X.iloc[序列号,],y[序列号])
实际上,您可以访问
X
中的0-200000行。要访问行200000-400000,您可以执行以下操作

对于列车,cv分割中的val(X.iloc[200000:400000,],y[200000:400000]):
clf.fit(X.iloc[200000:400000,][train],y[200000:400000][train])

我怀疑,如果你这样做,错误会再次出现。顺便说一句,
TimeSeriesSplit
不会将所有数据用于培训,请参阅。由于只显示拟合分类器,而不显示预测,因此当NaN非常接近
y
向量的末尾时,不会出现错误。时间序列中的最后一个观察值仅用于测试,而不用于训练。

回溯显示NaN在
y
中,但您检查
X
中是否缺少值。但我检查了y[:200000]和y[200000:400000]。这与检查y是否有NaN相同回溯显示NaN在
y
中,但您检查
X
中是否缺少值。但我检查了y[:200000]和y[200000:400000]。这与检查y是否有相同之处NaN@0Hong如果这回答了你的问题,请考虑投票和/或接受答案。谢谢@如果这回答了你的问题,请考虑投票和/或接受答案。谢谢
FutureWarning: 
Passing list-likes to .loc or [] with any missing label will raise
KeyError in the future, you can use .reindex() as an alternative.

See the documentation here:
https://pandas.pydata.org/pandas-docs/stable/indexing.html#deprecate-loc-reindex-listlike
  return self.loc[key]
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-143-9c8fe6b057e9> in <module>
      1 for train, val in cv.split(X, y):
----> 2     clf.fit(X.iloc[train], y[train])

~\Anaconda3\lib\site-packages\sklearn\ensemble\forest.py in fit(self, X, y, sample_weight)
    248         # Validate or convert input data
    249         X = check_array(X, accept_sparse="csc", dtype=DTYPE)
--> 250         y = check_array(y, accept_sparse='csc', ensure_2d=False, dtype=None)
    251         if sample_weight is not None:
    252             sample_weight = check_array(sample_weight, ensure_2d=False)

~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    540         if force_all_finite:
    541             _assert_all_finite(array,
--> 542                                allow_nan=force_all_finite == 'allow-nan')
    543 
    544     if ensure_min_samples > 0:

~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in _assert_all_finite(X, allow_nan)
     58     elif X.dtype == np.dtype('object') and not allow_nan:
     59         if _object_dtype_isnan(X).any():
---> 60             raise ValueError("Input contains NaN")
     61 
     62 

ValueError: Input contains NaN
FutureWarning: 
Passing list-likes to .loc or [] with any missing label will raise
KeyError in the future, you can use .reindex() as an alternative.
.
.
.
ValueError: Input contains NaN