作为安然项目的一部分,构建了附加模型,下面是步骤的摘要,
cv = StratifiedShuffleSplit(n_splits = 100, test_size = 0.2, random_state = 42)
gcv = GridSearchCV(pipe, clf_params,cv=cv)
gcv.fit(features,labels) ---> with the full dataset
for train_ind, test_ind in cv.split(features,labels):
x_train, x_test = features[train_ind], features[test_ind]
y_train, y_test = labels[train_ind],labels[test_ind]
gcv.best_estimator_.predict(x_test)
cv = StratifiedShuffleSplit(n_splits = 100, test_size = 0.2, random_state = 42)
gcv = GridSearchCV(pipe, clf_params,cv=cv)
gcv.fit(features,labels) ---> with the full dataset
for train_ind, test_ind in cv.split(features,labels):
x_train, x_test = features[train_ind], features[test_ind]
y_train, y_test = labels[train_ind],labels[test_ind]
gcv.best_estimator_.fit(x_train,y_train)
gcv.best_estimator_.predict(x_test)
使用Kbest查找分数并对功能进行排序并尝试更高和更低分数的组合。
使用StratifiedShuffle的GridSearch使用SVM
使用best_estimator_来预测和计算精度和召回率。
问题是估算器正在吐出完美的分数,在某些情况下是1
但是当我改编训练数据的最佳分类器然后运行测试时它给出了合理的分数。
我的疑问/问题是GridSearch在使用我们发送给它的Shuffle拆分对象进行拆分后对测试数据做了什么。我认为它不适合测试数据,如果确实如此,那么当我预测使用相同的测试数据时,它不应该给出这么高的分数。因为我使用了random_state值,所以shufflesplit应该为Grid适合和预测创建相同的副本。
那么,两个错误使用相同的Shufflesplit?
答案 0 :(得分:7)
GridSearchCV正如@ Gauthier Feuillen所说,用于搜索给定数据的估算器的最佳参数。 GridSearchCV的描述: -
gcv = GridSearchCV(pipe, clf_params,cv=cv)
gcv.fit(features,labels)
clf_params
将展开,以使用ParameterGrid分隔所有可能的组合。features
现在将使用features_train
分为features_test
和cv
。 labels
features_train
和labels_inner
对gridSearch估算员(管道)进行培训,并使用features_test
和labels_test
进行评分。cv_iterations
。将计算cv迭代中的平均得分,其将被分配给该参数组合。可以使用gridSearch的{{1}}属性访问它。由于上一步,您在第一和第二种方法中得分不同。因为在第一种方法中,所有数据都用于训练,并且您仅预测该数据。第二种方法预测了以前看不见的数据。
答案 1 :(得分:1)
基本上网格搜索将:
所以你的第二个案例是好的。否则,您实际上是在预测您训练过的数据(在第二个选项中不是这种情况,您只保留gridsearch中的最佳参数)