Мне нужно использовать глубокое обучение, чтобы классифицировать входной вектор на 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))