Глубокое обучение: как бороться с отсутствующими значениями меток - PullRequest
1 голос
/ 23 мая 2019

Мне нужно использовать глубокое обучение, чтобы классифицировать входной вектор на 10 категорий (числа от 0 до 9).Для этого у меня есть два набора обучающих данных: один с меткой (n = 9000) и другой без метки (n = 21000).

Должен ли я просто тренировать свою модель с помощью маркированного набора данных поезда или использовать его, чтобы сначала предсказатьметки набора данных без меток, а затем обучить модель, используя все данные поезда?Какие еще подходы вы бы предложили?Можно ли использовать автоэнкодер?

Я уже пытался использовать помеченные данные о поездах для прогнозирования меток для моих немеченых данных.Тем не менее, я не достиг хорошей точности.Мне интересно, вызвано ли это вмененными данными или моделью.

###Load data
train_labeled = pd.read_hdf("train_labeled.h5", "train")
train_unlabeled = pd.read_hdf("train_unlabeled.h5", "train")
test = pd.read_hdf("test.h5", "test")

X_labeled = np.array(train_labeled.iloc[:,1:])
X_unlabeled = np.array(train_unlabeled)
y_labeled = np.array(train_labeled.iloc[:,0])

###Impute missing values
from sklearn.neighbors import KNeighborsClassifier
neigh = KNeighborsClassifier(n_neighbors=5)
neigh.fit(X_labeled, y_labeled) 
y_unlabeled = neigh.predict(X_unlabeled)

###Combine data
X = np.concatenate((X_labeled, X_unlabeled), axis=0)
y = np.concatenate((y_labeled, y_unlabeled), axis=0)

###Split train and test data
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size = 0.8)

###Create model
model = tf.keras.Sequential([
layers.BatchNormalization(),
layers.Dense(80, activation='relu', input_shape=(X_train.shape[1],)),
layers.Dense(80, activation=tf.nn.relu),  
layers.Dense(10, activation=tf.nn.softmax)])

model.compile(optimizer=tf.train.AdamOptimizer(0.001),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

###Train model
model.fit(X_train, y_train, epochs=10, batch_size=20,
          validation_data=(X_test, y_test))

1 Ответ

1 голос
/ 23 мая 2019

Один из подходов к работе с вашей ситуацией с данными (мелкие надписи + большие непомеченные данные) называется обучением с полуконтролем.

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

Получение приемлемого обучения под наблюдением довольно сложно, я рекомендую взглянуть на Ladderсетей, псевдо-маркировки и метрических статей для изучения более принципиальных подходов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...