1

Ich habe zwei Programme geschrieben, die der gleichen Logik folgen sollen. Aber beide geben unterschiedliche Antworten.Pipeline geben unterschiedliche Antwort in Sklearn Python

First-

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) 

Second-

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) 

Zuerst gibt man 80,81 und zweite gibt 84.92. Warum sind beide unterschiedlich?

Antwort

2

Ihr zweiter Code ist ungültig, da Ihr "Preprocess" den Scaler zum Testset passt, was nicht passieren sollte. Pipeline hingegen passt RobustScaler nur an Ihre Zugdaten an und ruft dann beim Test "transform" auf.

+0

Danke für die Hilfe – manish

Verwandte Themen