Разница между разделенной эффективностью Numpy и перекрестной проверкой - PullRequest
0 голосов
/ 10 апреля 2019

Я выполняю бинарную классификацию текста с использованием Deep Learning.При разделении моего поезда и тестировании с использованием нормального разделения Numpy как 80-20 Производительность модели составляет около 85% - 90% (в среднем после выполнения одного и того же кода 20 раз).

Когда я запускаю ту же модель вручную, выполняя 10-кратную перекрестную проверку, производительность ухудшается до 65% -70%.Точность, Напомним, Точность и Счет F1 составляют около 65-70% после каждого Раза.

Есть ли существенная разница в разделении, выполняемом Numpy, и разделении вручную при перекрестной проверке, которое вызывает эту разницу?

Numpy Split :

train_NT, validate_NT, test_NT = np.split(NT, [int(.8*len(NT)), int(.9*len(NT))])
train_T, validate_T, test_T = np.split(T, [int(.8*len(T)), int(.9*len(T))])
train = train_NT.append(train_T)
valid = validate_NT.append(validate_T)
test = test_NT.append(test_T)

Manual Cross Validation :

def crossvalidation(obj,X,Y,folds):
    acc=[]
    precision=[]
    recall=[]
    f1score=[]
    Xarr=np.asarray(X)
    Yarr=np.asarray(Y)
    if len(Xarr)==len(Yarr):
        for i in range(folds-1):
            if i==0 or i==folds-2:
                print('cross flod validation fold '+ '{}'.format(i+1))
                aX,bX=np.split(Xarr,[int(len(Xarr)*(i+1)/folds)])
                aY,bY=np.split(Yarr,[int(len(Yarr)*(i+1)/folds)])
                if len(aX)>len(bX):
                    X_train,X_test,Y_train,Y_test=aX,bX,aY,bY
                else:
                    X_train,X_test,Y_train,Y_test=bX,aX,bY,aY
                prediction=eval('{}'.format(obj)+'model(X_train,X_test,Y_train)')
                jj=0
                for i in range(len(list(prediction))):
                    if (list(prediction)[i]==list(Y_test)[i]):
                        jj+=1
                acc.append(float(jj)/len(predicted))
                precision.append(precision_score(y_pred=list(prediction),y_true=list(Y_test),average='weighted'))
                recall.append(recall_score(y_pred=list(prediction),y_true=list(Y_test),average='weighted'))
                f1score.append(f1_score(y_pred=list(prediction),y_true=list(Y_test),average='weighted'))
            else:
                print('cross flod validation fold '+ '{}'.format(i+1))
                aX,bX,cX=np.split(Xarr,[int(len(Xarr)*(i)/folds),int(len(Xarr)*(i+1)/folds)])
                aY,bY,cY=np.split(Yarr,[int(len(Xarr)*(i)/folds),int(len(Xarr)*(i+1)/folds)])
                aX,aY=np.concatenate((aX,cX),axis=0),np.concatenate((aY,cY),axis=0)
                X_train,X_test,Y_train,Y_test=aX,bX,aY,bY
                prediction=eval('{}'.format(obj)+'model(X_train,X_test,Y_train)')
                jj=0
                for i in range(len(list(prediction))):
                    if (list(prediction)[i]==list(Y_test)[i]):
                        jj+=1
                acc.append(float(jj)/len(predicted))
                precision.append(precision_score(y_pred=list(prediction),y_true=list(Y_test),average='weighted'))
                recall.append(recall_score(y_pred=list(prediction),y_true=list(Y_test),average='weighted'))
                f1score.append(f1_score(y_pred=list(prediction),y_true=list(Y_test),average='weighted'))
        pre=sum(precision)/float(len(precision))
        rec=sum(recall)/float(len(recall))
        f1=sum(f1score)/float(len(f1score))
        ac=sum(acc)/float(len(acc))
        return(acc,pre,rec,f1)
    else:
        raise ValueError ('length of X and Y is not equal')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...