Байесовские сети: изучение структуры в 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 строками. Если вы хотите попробовать воспроизвести результат.

0 ответов

Другие вопросы по тегам