Ограниченная машина Больцмана в Scikit-learn: Iris Classification

Я работаю над примером применения ограниченной машины Больцмана к набору данных Iris. По сути, я пытаюсь провести сравнение между RMB и LDA. LDA, кажется, дает разумно правильный результат вывода, но RBM - нет. Следуя предложению, я бинаризовал входные данные функции, используя skearn.preprocessing.Binarizer, а также попробовал разные пороговые значения параметров. Я пробовал несколько разных способов применить бинаризацию, но ни один из них не работал у меня.

Ниже приведена моя модифицированная версия кода, основанная на версии этого пользователя >Пользователь: ковариация.

Любые полезные комментарии приветствуются.

from sklearn import linear_model, datasets, preprocessing
from sklearn.cross_validation import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.neural_network import BernoulliRBM
from sklearn.lda import LDA

# import some data to play with
iris = datasets.load_iris()
X = iris.data[:,:2]  # we only take the first two features.
Y = iris.target

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=10)

# Models we will use
rbm = BernoulliRBM(random_state=0, verbose=True)
binarizer = preprocessing.Binarizer(threshold=0.01,copy=True)
X_binarized = binarizer.fit_transform(X_train)
hidden_layer = rbm.fit_transform(X_binarized, Y_train)
logistic = linear_model.LogisticRegression()
logistic.coef_ = hidden_layer
classifier = Pipeline(steps=[('rbm', rbm), ('logistic', logistic)])
lda = LDA(n_components=3)


#########################################################################

# Training RBM-Logistic Pipeline
logistic.fit(X_train, Y_train)
classifier.fit(X_binarized, Y_train)

#########################################################################

# Get predictions
print "The RBM model:"
print "Predict: ", classifier.predict(X_test)
print "Real:    ", Y_test

print

print "Linear Discriminant Analysis: "
lda.fit(X_train, Y_train)
print "Predict: ", lda.predict(X_test)
print "Real:    ", Y_test 

person sgerat    schedule 23.09.2015    source источник


Ответы (1)


RBM и LDA нельзя сравнивать напрямую, так как RBM не выполняет классификацию самостоятельно. Хотя вы используете его как этап разработки функций с логистической регрессией в конце, LDA сам по себе является классификатором, поэтому сравнение не очень значимо.

BernoulliRBM в scikit Learn обрабатывает только двоичные входные данные. Набор данных радужной оболочки не имеет разумной бинаризации, поэтому вы не получите никаких значимых результатов.

person Raff.Edward    schedule 23.09.2015
comment
Хорошая точка зрения. Но мне любопытно, почему этот пользователь сказал, что он может классифицировать в этом посте: [ссылка] (stackoverflow.com/questions/23419165/) - person sgerat; 24.09.2015
comment
Он не использовал RBM для классификации. Он использовал его для разработки функций. И это плохо работает для него, всегда выдавая метку 2. Это потому, что данные радужной оболочки не имеют какой-либо разумной бинаризации. Вы используете неправильные инструменты для этих данных, и поэтому они не работают для вас и не работают для человека, которого вы разместили. - person Raff.Edward; 24.09.2015