1

私は同じロジックに従うことになっている2つのプログラムを書いています。しかし両者は異なる答えを出している。パイプラインはsklearn pythonで別の答えを与えます

初段

train_data = train_features[:1710][:] 
train_label = label_features[:1710][:].ravel() 
test_data = train_features[1710:][:] 
test_label = label_features[1710:][:].ravel() 

def getAccuracy(ans): 
    d = 0 
    for i in range(np.size(ans,0)): 
     if(ans[i] == test_label[i]): 
      d+=1 
    return (d*100)/float(np.size(ans,0)) 

estimators = [('pps', pps.RobustScaler()), ('clf', LogisticRegression())] 
pipe = Pipeline(estimators) 
pipe = pipe.fit(train_data,train_label) 

ans = pipe.predict(test_data) 
getAccuracy(ans) 

2番目に

train_data = train_features[:1710][:] 
train_label = label_features[:1710][:].ravel() 
test_data = train_features[1710:][:] 
test_label = label_features[1710:][:].ravel() 

def getAccuracy(ans): 
    d = 0 
    for i in range(np.size(ans,0)): 
     if(ans[i] == test_label[i]): 
      d+=1 
    return (d*100)/float(np.size(ans,0)) 

def preprocess(features): 
    return pps.RobustScaler().fit_transform(features) 

train_data = preprocess(train_data) 
clf = LogisticRegression().fit(train_data,train_label) 

test_data = preprocess(test_data) 
ans = clf.predict(test_data) 
getAccuracy(ans) 

まず一つは80.81を与え、もう一つは84.92を与えます。なぜ両者は違うのですか?

答えて

2

「前処理」がスケーラをテストセットに適合させるため、2番目のコードは無効です。これは発生しないはずです。一方、Pipelineは、RobustScalerを列車データに適合させた後、テストデータを「変換」します。

+0

ありがとうございました – manish

関連する問題