Sklearn - GridSearchCV dengan v_measure_score TIDAK sama

Saya mencoba menggunakan GridSearchCV dengan v_measure_score dan membandingkan hasilnya
dengan metode lain TANPA GridSearchCV.

Skor terbaik v_measure_score menurut for-loop adalah 0,69816019299 dengan persentil 27;
skor terbaik GridSearchCV adalah 0,565562627046 dengan persentil 12.

Menurut pendapat saya, hasilnya harus sama.
Saya telah memeriksa kode saya beberapa kali tetapi masih tidak dapat menemukan alasannya. Berikut ini adalah kode saya:

GridSearchCV

estimators = [('tfIdf', TfidfTransformer()), ('sPT', SelectPercentile()), ('kmeans', cluster.KMeans())]
pipe = Pipeline(estimators)
params = dict(tfIdf__smooth_idf=[True],
              sPT__score_func= [f_classif], sPT__percentile=range(100, 0, -1),
              kmeans__n_clusters=[clusterNum], kmeans__random_state=[0], kmeans__precompute_distances=[True])
v_measure_scorer = make_scorer(v_measure_score)
grid_search = GridSearchCV(pipe, param_grid=params, scoring=v_measure_scorer)
grid_search_fit = grid_search.fit(apiVectorArray, yTarget)

v_measure_score dengan for-loop

bestPercent = [-1, -1]
for percent in xrange(100, 0, -1):
    transformer = TfidfTransformer(smooth_idf=True)
    apiVectorArrayTFIDF = transformer.fit_transform(apiVectorArray)
    apiVectorFit = SelectPercentile(f_classif, percentile=percent).fit(apiVectorArrayTFIDF, yTarget)
    k_means = cluster.KMeans(n_clusters=clusterNum, random_state=0, precompute_distances=True).fit(apiVectorFit.transform(apiVectorArrayTFIDF))

    if v_measure_score(yTarget, k_means.labels_) > bestPercent[1]:
        bestPercent[0] = percent
        bestPercent[1] = v_measure_score(yTarget, k_means.labels_)

Saya mencoba menambahkan warna pada kode saya tetapi gagal.
Maaf untuk mata Anda.

Terima kasih.


person Che-Hao Kang    schedule 18.11.2016    source sumber


Jawaban (1)


Menurut saya jawabannya karena GridSearchCV menggunakan Cross-Validation untuk menyesuaikan data, skornya berbeda dengan for-loop.

person Che-Hao Kang    schedule 25.11.2016