如何使用scikit-learn训练XOR模型?

是否有一组神奇的参数序列,可以让模型从之前未见过的数据中正确推断?

from sklearn.neural_network import MLPClassifierclf = MLPClassifier(                activation='logistic',                max_iter=100,                hidden_layer_sizes=(2,),                solver='lbfgs')X = [[ 0,  0],  # 2 samples, 3 features     [0, 1],#      [1, 0],    [1, 1]]y = [0,      1,#      1,     0]  # classes of each sampleclf.fit(X, y)assert clf.predict([[0, 1]]) == [1]assert clf.predict([[1, 0]]) == [1]

回答:

使用核函数如何?核函数是一种模型从数据中提取所需特征的方式。

通常使用的核函数可能无法满足你的需求。我认为它们试图在包含[0, 0][1, 1]一个超平面与包含[0, 1]另一个超平面之间找到‘切割’超平面

例如,在二维空间中,一个超平面y = x另一个超平面y = x + 1。那么‘切割’超平面可能是y = x + 1/2

所以我建议使用以下核函数。

def kernel(X1, X2):    X1 = np.array([[(x[0] - x[1]) ** 2] for x in X1])    X2 = np.array([[(x[0] - x[1]) ** 2] for x in X2])    return np.dot(X1, X2.T)

这个核函数的作用是这样的。它对两个标量之间的差异进行平方处理,即(x – y)2。通过这种特征提取方式,数据将被特征化为如下形式:

  • [0, 0][0]
  • [0, 1][1]
  • [1, 1][0]

对于未见过的数据也是如此:

  • [1, 0][1]

因此,以下训练过的分类器将如你所愿地进行predict操作;([1, 0][1])。

clf = svm.SVC(kernel=kernel, max_iter=100)

在机器学习中,模型选择非常重要。一个不知道[0, 0][1, 1]属于同一组,而[0, 1][1, 0]属于另一组的模型,可能无法做出你期望的预测。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注