我正在研究在Iris数据集上应用Restricted Boltzmann Machine的示例。基本上,我试图对人民币和LDA进行比较。 LDA似乎产生了合理的正确输出结果,但RBM不是。根据建议,我使用了skearn.preprocessing.Binarizer对特征输入进行了二值化,并尝试了不同的阈值参数值。我尝试了几种不同的方法来应用二值化,但似乎没有一种方法适用于我。
以下是基于此用户的User: covariance版本修改的代码版本。
非常感谢任何有用的评论。
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
答案 0 :(得分:3)
RBM和LDA不能直接比较,因为RBM本身不进行分类。尽管您最初使用它作为特征工程步骤并使用逻辑回归,但LDA本身就是一个分类器 - 因此比较并不是非常有意义。
scikit中的BernoulliRBM学习只处理二进制输入。虹膜数据集没有合理的二值化,因此您无法获得任何有意义的输出。