1

我正在研究在 Iris 数据集上应用受限玻尔兹曼机的示例。本质上,我试图在人民币和LDA之间进行比较。LDA 似乎产生了合理的正确输出结果,但 RBM 不是。根据建议,我使用 skeern.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 
4

1 回答 1

3

RBM 和 LDA 不能直接比较,因为 RBM 本身不执行分类。尽管您将它用作最后带有逻辑回归的特征工程步骤,但 LDA 本身就是一个分类器 - 因此比较不是很有意义。

scikit learn 中的 BernoulliRBM 只处理二进制输入。iris 数据集没有合理的二值化,所以你不会得到任何有意义的输出。

于 2015-09-23T18:27:03.107 回答