Байесовские сети: изучение структуры в Python происходит очень медленно по сравнению с R
В настоящее время я работаю над проблемой классификации изображений с использованием байесовских сетей. Я пробовал использоватьpomegranate
,pgmpy
а также bnlearn
. Мой набор данных содержит более 200000 изображений, на которых я выполняю некоторый алгоритм извлечения признаков и получаю вектор признаков размером 1026.
pgmpy
from pgmpy.models import BayesianModel
from pgmpy.estimators import HillClimbSearch, BicScore, K2Score
est = HillClimbSearch(feature_df, scoring_method=BicScore(feature_df[:20]))
best_model = est.estimate()
edges = best_model.edges()
model = BayesianModel(edges)
гранат
from pomegranate import *
model = BayesianNetwork.from_samples(feature_df[:20], algorithm='exact')
bnlearn
library(bnlearn)
df <- read.csv('conv_encoded_images.csv')
df$Age = as.numeric(df$Age)
res <- hc(df)
model <- bn.fit(res,data = df)
Программа написана на bnlearn
в R завершается за пару минут, а pgmpy
работает часами, а гранат замораживает мою систему через несколько минут. Из моего кода видно, что я даю первые 20 строк для обучения как вpgmpy
а также pomegranate
программы, а bnlearn
занимает весь фрейм данных. Поскольку всю предварительную обработку изображений и извлечение функций я выполняю на python, мне сложно переключаться между R и python для обучения.
Мои данные содержат непрерывные значения в диапазоне от 0 до 1. Я также пробовал дискретизировать данные до 0 и 1, что не помогло решить проблему.
Есть ли способ ускорить обучение в этих пакетах python или я что-то делаю не так в своем коде?
Спасибо за любую помощь заранее.
Редактировать:
https://drive.google.com/file/d/1HbAqDQ6Uv1417zPFMgWBInC7-gz233j2/view?usp=sharing
Это набор данных с 300 столбцами и ~40000 строками. Если вы хотите попробовать воспроизвести результат.