Sklearn - GridSearchCV พร้อม v_measure_score ไม่เหมือนกัน

ฉันกำลังพยายามใช้ GridSearchCV กับ v_measure_score และเปรียบเทียบผลลัพธ์
กับวิธีอื่น WITHOUT GridSearchCV

คะแนนที่ดีที่สุดของ v_measure_score ตาม for-loop คือ 0.69816019299 โดยมี เปอร์เซ็นไทล์ 27;
คะแนนที่ดีที่สุดของ GridSearchCV คือ 0.565562627046 โดยมีเปอร์เซ็นไทล์ 12

ในความคิดของฉัน ผลลัพธ์ควรจะเหมือนเดิม
ฉันตรวจสอบโค้ดหลายครั้งแล้ว แต่ก็ยังไม่สามารถหาสาเหตุได้ ต่อไปนี้เป็นรหัสของฉัน:

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 โดย 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_)

ฉันพยายามเพิ่มสีให้กับโค้ดของฉันแต่ไม่สำเร็จ
ขออภัยดวงตาของคุณ

ขอบคุณ.


person Che-Hao Kang    schedule 18.11.2016    source แหล่งที่มา


คำตอบ (1)


ฉันคิดว่าคำตอบก็คือเพราะ GridSearchCV ใช้การตรวจสอบข้ามเพื่อให้พอดีกับข้อมูล คะแนนจึงแตกต่างจาก for-loop

person Che-Hao Kang    schedule 25.11.2016