Получение точности и повторного вызова равно 0, где точность достигает 98% - PullRequest
0 голосов
/ 25 марта 2020

Я работаю над DNNClassifier из оценки потока Тензор, и используется набор данных JM1 (прогнозирование дефектов)

Рассмотрены возможности обучения 0:8163(defects-free:6056, defects: 2106)

Рассмотрены возможности проверки 8163:9796(defects-free:1634, defects: 0)

остальные функции для тестирования. где общее число функций составляет 10885.

оцененные метрики, которые я получил на проверенном наборе данных:

 'accuracy': 0.97917944,
 'accuracy_baseline': 1.0,
 'auc': 1.0,
 'auc_precision_recall': 0.0,
 'average_loss': 0.27983573,
 'label/mean': 0.0,
 'loss': 35.151672,
 'precision': 0.0,
 'prediction/mean': 0.22930107,
 'recall': 0.0,
 'global_step': 332261

Я получил точность и вспомнил 0, потому что я думаю, что из-за набора данных дисбаланса.

мой код прилагается здесь, может любой может решить, как устранить дисбаланс набора данных. или же укажите причины, касающиеся моего кода.

import tensorflow as tf
import numpy as np
import pandas as pd
import os
import shutil

dataset = pd.read_csv('jm_missing_removed.csv')
dataset = dataset.iloc[:,0:22]

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[21]

def make_feature_cols():
     input_columns = [tf.feature_column.numeric_column(k) for k in FEATURES]
     return input_columns

feature_columns = make_feature_cols()
feature_columns

tf.logging.set_verbosity(tf.logging.INFO)

# To save the trained model
OUTDIR = './logs/breastCancer_trained'
shutil.rmtree(OUTDIR, ignore_errors = True) 

myopt = tf.train.FtrlOptimizer(learning_rate = 0.01)

model = tf.estimator.DNNClassifier(feature_columns = make_feature_cols(), 
                                   model_dir = OUTDIR, hidden_units=[10, 10], 
                                   n_classes=2, optimizer = myopt,
                                   activation_fn = tf.nn.relu)

def make_input_fn(df, num_epochs):
  return tf.estimator.inputs.pandas_input_fn(
    x = df,
    y = df[LABEL],
    num_epochs = num_epochs,
    shuffle = True,
    num_threads = 1
  )

model.train(input_fn = make_input_fn(df_train, num_epochs = 10))

ev = model.evaluate(input_fn = make_input_fn(df_eval, num_epochs = 1))

Любое более простое решение будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

для проверки в k-кратном порядке из импорта sklearn.model_selection KFold

cv = KFold (n_splits = 10, random_state = 214, shuffle = True)

для train_index, test_index в cv.split (X): X_train, X_test, y_train, y_test = X [train_index], X [test_index], y [train_index], y [test_index]

для ADASYN из imblearn.over_sampling import ADASYN sm = ADASYN (sampling_strate = "меньшинство", n_neighbors = 10, отношение = нет, random_state = 0) X_train_res, y_train_res = sm.fit_sample (X_train, y_train.ravel ())

0 голосов
/ 31 марта 2020

Использование метода K-FOLD и повышение по ADASYN даст лучший результат

...