限制玻尔兹曼机器的Scikit-learn:虹膜分类

时间:2015-09-23 15:47:07

标签: python machine-learning scikit-learn neural-network rbm

我正在研究在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 

1 个答案:

答案 0 :(得分:3)

RBM和LDA不能直接比较,因为RBM本身不进行分类。尽管您最初使用它作为特征工程步骤并使用逻辑回归,但LDA本身就是一个分类器 - 因此比较并不是非常有意义。

scikit中的BernoulliRBM学习只处理二进制输入。虹膜数据集没有合理的二值化,因此您无法获得任何有意义的输出。