Я недавно имею дело с API tf.estimators. У меня есть классификатор Dnn, который дает мне точность 60% в наборе данных для прогнозирования дефектов программного обеспечения JM1 из хранилища PROMISE. Я хочу улучшить производительность модели с точки зрения точности, точности и отзыва. Я разделил данные на оценку поезда и тестовые данные и произвел повторную выборку, чтобы устранить дисбаланс. Я также пытался использовать различные оптимизаторы, функции активации и т. Д. c. Вот код, который я попробовал.
CSV_COLUMNS=['loc','vg','evg','ivg','n','v','l','d','i','e','b','t','lOCode','lOComment','lOBlank','locCodeAndComment','uniq_Op','uniq_Opnd','total_Op','total_Opnd','branchCount','defects']
FEATURES = CSV_COLUMNS[0:len(CSV_COLUMNS) - 1]
LABEL = CSV_COLUMNS[len(CSV_COLUMNS) - 1]
dataset = dataset.astype(int)
X=dataset.iloc[:,:-1].values
y=dataset.iloc[:,-1].values
from imblearn.over_sampling import RandomOverSampler
ros = RandomOverSampler(random_state=120)
X_res, y_res = ros.fit_resample(X, y)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_res, y_res, test_size = 0.3, random_state = 1139)
df_train = np.hstack((X_train, np.atleast_2d(y_train).T))
X_new = X_test
y_new = y_test
X_train_new, X_test_new, y_train_new, y_test_new = train_test_split(X_new, y_new, test_size = 0.3, random_state = 12)
df_eval = np.hstack((X_train_new, np.atleast_2d(y_train_new).T))
df_test = X_test_new
def make_feature_cols():
input_columns = [tf.feature_column.numeric_column(k) for k in FEATURES]
return input_columns
df_train = pd.DataFrame(df_train)
df_train=df_train.rename(columns={0: 'loc',1:'vg',2:'evg',3: 'ivg',4:'n',5:'v',6: 'l',7:'d',8:'i',9: 'e',10:'b',11:'t',12: 'lOCode',13:'lOComment',14:'lOBlank',15:'locCodeAndComment',16:'uniq_Op',17:'uniq_Opnd',18:'total_Op',19:'total_Opnd',20:'branchCount',21:'defects'})
df_eval = pd.DataFrame(df_eval)
df_eval=df_eval.rename(columns={0: 'loc',1:'vg',2:'evg',3: 'ivg',4:'n',5:'v',6: 'l',7:'d',8:'i',9: 'e',10:'b',11:'t',12: 'lOCode',13:'lOComment',14:'lOBlank',15:'locCodeAndComment',16:'uniq_Op',17:'uniq_Opnd',18:'total_Op',19:'total_Opnd',20:'branchCount',21:'defects'})
df_test = pd.DataFrame(df_test)
df_test=df_test.rename(columns={0: 'loc',1:'vg',2:'evg',3: 'ivg',4:'n',5:'v',6: 'l',7:'d',8:'i',9: 'e',10:'b',11:'t',12: 'lOCode',13:'lOComment',14:'lOBlank',15:'locCodeAndComment',16:'uniq_Op',17:'uniq_Opnd',18:'total_Op',19:'total_Opnd',20:'branchCount'})
# information display while executing
tf.logging.set_verbosity(tf.logging.INFO)
# Creating the directory
OUTDIR = r'C:\Users\dell\Downloads\jm_serial2'
shutil.rmtree(OUTDIR, ignore_errors = True)
# Start fresh each time
myopt = tf.train.AdamOptimizer(learning_rate=0.001)
model = tf.estimator.DNNClassifier(feature_columns = make_feature_cols(),
model_dir = OUTDIR, hidden_units=[20, 20],
n_classes=2, optimizer = myopt, dropout=0.2,
activation_fn = tf.math.sigmoid)
def make_input_fn(df, num_epochs):
return tf.estimator.inputs.pandas_input_fn(x = df, y = df[LABEL], shuffle = False, num_epochs = num_epochs)
model.train(input_fn = make_input_fn(df_train, num_epochs = 100))
ev = model.evaluate(input_fn = make_input_fn(df_eval, num_epochs = 1))
print(ev)
Редактировать: Это значения результата, которые я получил.
accuracy = 0.60916734,
accuracy_baseline = 0.5104421,
auc = 0.6360657,
auc_precision_recall = 0.6398728,
average_loss = 0.66607034,
global_step = 1921,
label/mean = 0.5104421,
loss = 84.6828,
precision = 0.669746,
prediction/mean = 0.487086,
recall = 0.46227416
Кто-нибудь может подсказать, что нужно сделать, чтобы улучшить производительность модели?