Проблема с пакетом h2o в R с использованием поднастроенных фреймов данных, приводящих к почти идеальной точности прогнозирования - PullRequest
0 голосов
/ 23 ноября 2018

Я был поставлен в тупик по этой проблеме в течение очень долгого времени и не могу понять это.Я полагаю, что проблема связана с подмножеством объектов data.frame, сохраняющих информацию о родителе, но я также чувствую, что это вызывает проблемы при обучении моделей h2o.deeplearning тому, что я считаю только моим обучающим набором (хотя это может быть и не так).Ниже приведен пример кода.Я включил комментарии, чтобы уточнить, что я делаю, но это довольно короткий код:

dataset = read.csv("dataset.csv")[,-1] # Read dataset in but omit the first column (it's just an index from the original data)
y = dataset[,1] # Create response
X = dataset[,-1] # Create regressors

X = model.matrix(y~.,data=dataset) # Automatically create dummy variables
y=as.factor(y) # Ensure y has factor data type
dataset = data.frame(y,X) # Create final data.frame dataset

train = sample(length(y),length(y)/1.66) # Create training indices -- A boolean
test = (-train) # Create testing indices

h2o.init(nthreads=2) # Initiate h2o

# BELOW: Create h2o.deeplearning model with subset of dataset.
mlModel = h2o.deeplearning(y='y',training_frame=as.h2o(dataset[train,,drop=TRUE]),activation="Rectifier",
                           hidden=c(6,6),epochs=10,train_samples_per_iteration = -2)


predictions = h2o.predict(mlModel,newdata=as.h2o(dataset[test,-1])) # Predict using mlModel
predictions = as.data.frame(predictions) # Convert predictions to dataframe object. as.vector() caused issues for me
predictions = predictions[,1] # Extract predictions

mean(predictions!=y[test]) 

Проблема в том, что если я оцениваю это по моему тестовому подмножеству, я получаю почти 0% ошибку:

[1] 0.0007531255

Кто-нибудь сталкивался с этой проблемой?Есть идеи, как решить эту проблему?

1 Ответ

0 голосов
/ 25 ноября 2018

Будет более эффективно использовать функции H2O для загрузки и разделения данных.

data = h2o.importFile("dataset.csv")
y = 2 #Response is 2nd column, first is an index
x = 3:(ncol(data))  #Learn from all the other columns
data[,y] = as.factor(data[,y])

parts = h2o.splitFrame(data, 0.8)  #Split 80/20
train = parts[[1]]
test = parts[[2]]

# BELOW: Create h2o.deeplearning model with subset of dataset.
mlModel = h2o.deeplearning(x=x, y=y, training_frame=train,activation="Rectifier",
                           hidden=c(6,6),epochs=10,train_samples_per_iteration = -2)

h2o.performance(mlModel, test)

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

...