Я успешно построил последовательную модель для стратификации различных органов некоторых имеющихся у меня геномных данных, и это работает очень хорошо и с высокой точностью. Тем не менее, это также данные временных рядов, и я хотел бы понять взаимосвязи между различными переменными в данных, и я хотел бы включить их, чтобы увидеть, какие гены определяют разные отношения с течением времени. Поэтому я не уверен, что это становится проблемой классификации или регрессии на данном этапе. Код для модели ниже:
Код для генерации мультиклассовой классификации выглядит следующим образом:
Normcountsonehot <- data.frame(to_categorical(Normcountsall$Age,
7), to_categorical(Normcountsall$Organ, 13),
to_categorical(Normcountsall$Sex, 4), Normcountsall[,1:5078])
Полученная матрица - это временные точки в виде строк и генов в виде столбцов. Гены содержат значения, из которых мы хотели бы извлечь информацию.
ind <- sample(2, nrow(Normcountsonehot), replace=TRUE, prob =
c(0.7,0.3))
training <- Normcountsonehot[ind==1, 25:5098] # includes all
independent variables
test <- Normcountsonehot[ind==2, 25:5098]
*scale test and training*
trainingtarget <- Normcountsonehot[ind==1, c(8:20)]
testtarget <- Normcountsonehot[ind==2, c(8:20)]
Вышеуказанные данные разбивают горячо закодированные данные только на переменную органов (а не на любые другие (пол, возраст)
Sequential model is then:
model1 <- keras_model_sequential()
model1 %>%
layer_dense(units=5078, activation = 'relu', input_shape = 5074)
%>%
layer_dropout(0.4)%>%
layer_dense(units = 64, activation = "relu") %>%
layer_dropout(0.2) %>%
layer_dense(units=13, activation = "softmax")
model1 %>% keras::compile(loss='categorical_crossentropy',
optimizer='adam',
metrics='accuracy')
history1 <- model1%>%
fit(as.matrix(training1), # input, the first independent variables
as.matrix(trainingtarget), # input, Metadata
epoch=20,
batch=32,
validation_split = 0.2)
model1%>%
keras::evaluate(test1,as.matrix(testtarget))
матрица путаницы и т.д ...
Это очень хорошо классифицирует только одну переменную
Если я сейчас добавлю эту строку кода, чтобы включить переменные, такие как возраст и пол:
trainingtarget <- Normcountsonehot[ind==1, c(1:24)]
и измените ввод в модели на:
model1 %>%
layer_dense(units=5078, activation = 'relu', input_shape = 7+13+4
5078) %>% ....
*last layer* layer_dense(units=7+13+4, activation = "softmax")
Точность поезда в основном падает до 0, а Val-acc постоянно равен 0.
Хотя я пытаюсь понять отношения между этими различными переменными, чтобы затем найти веса, которые управляют этими отношениями, я не уверен, что теперь это проблема классификации (или ввод совершенно неверный). Должен ли я удалить softmax, чтобы сделать это проблемой регрессии. Если да, то какой у меня номер последнего слоя? и на чем он будет тренироваться:
Опять же, цель будет состоять в том, чтобы понять взаимосвязь между всеми переменными и посмотреть, изменятся ли гены в соответствии с этим. Одна из переменных, которые я не упомянул, зависит от типа органов ... и поэтому я хотел бы посмотреть, как меняются веса, когда алгоритм специально ищет эти шаблоны с учетом всех переменных. то есть ... некоторые гены могут со временем разрушаться, потому что органы x, y и z обладают определенным свойством, определяемым переменной, в то время как они могут быть совершенно неизменными в других органах, потому что они не обладают такими свойствами ... Это своего рода паттерн признание меня интересует.
Любая помощь о том, как отредактировать код выше для решения этого вопроса, была бы очень признательна! Также обратите внимание, я буду пробовать разные модели, но только начиная с последовательной!
Спасибо!