k-fold检验可以单独得到结果



我的问题是当我在第一行注释pipe_lr时,我仍然可以得到准确性分数。这让我很困惑,我认为它应该报告一个错误,为什么?看起来它不需要pipe_lr的定义。这是相关的部分。输入图片描述

from sklearn.ensemble import ExtraTreesClassifier
from sklearn.feature_selection import SelectFromModel
import pandas as pd
import numpy as np
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder
from sklearn.pipeline import Pipeline
from sklearn.tree import DecisionTreeClassifier
from sklearn.cross_validation import StratifiedKFold

pipe_lr=Pipeline([('normalization',mms),
                  ('feature_selection',feature_selection),
                  ('classification',DecisionTreeClassifier())])
"""
K-fold test
"""
kfold=StratifiedKFold(y=y_train,n_folds=10,random_state=1)
scores=[]
features=[]
for k,(train,test) in enumerate (kfold):
    pipe_lr.fit(X_train[train],y_train[train])
    score=pipe_lr.score(X_train[test],y_train[test])
    scores.append(score)
    print('Fold: %s, Class dist.: %s,Acc: %.3f' %(k+1,
            np.bincount(y_train[train]), score))

简短的回答是不,它不能。如果没有pipe_lr行,您的代码将无法运行。它在没有它的情况下运行的唯一原因是因为您在某些特殊的环境中运行它,例如ipython notebook,并且之前您使用这一行运行了相同的代码,因此它仍然在相同的作用域中保存在内存中(因此第二次运行仍然访问原始pipe_lr对象)。或者您实际上在代码的其他地方定义了这个变量(例如在定义数据的块中,mms等,您从问题本身中删除)。当在干净的环境中正确运行时,没有pipe_lr,此代码就无法工作(甚至运行)。

相关内容

  • 没有找到相关文章

最新更新