Sklearn NN clf.predict() 总是返回所有 0 或所有 1?



我正在使用sklearn的MLPClassifier((函数制作一个分类器,并有以下代码:

def train_NN(self, trained_data_list, test_size=0.25):
X = np.array([[7, 4], [3,7], [8,5], [2,3]])
y = np.array([0, 1, 1, 0])
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
#oddly, printing 'X_train' yeilds the following: [[2 3] [3 7] [7 4]] and seems to have dropped my point [8 5]
#printing 'y_train' yeilds the following: [0 1 0]

self.clf = MLPClassifier(solver='lbfgs', alpha=1e-10, hidden_layer_sizes=(2, 2), activation = 'tanh', random_state=5, max_iter=10000, learning_rate_init = 0.1)

self.clf.fit(X_train, y_train)
print(self.clf.predict(np.atleast_2d([7,4])))  #returns 0 
print(self.clf.predict(np.atleast_2d([3,7])))  #returns 0 
print(self.clf.predict(np.atleast_2d([8,5])))  #returns 0 
print(self.clf.predict(np.atleast_2d([2,3])))  #returns 0 

我在这里的理解是,"X"数组应该与"y"数组相关。例如,给clf.predict((值[3,7]应该返回"1",因为这就是它们在定义NP数组时的关联方式。[8,5]应返回"1",[2,3]应返回"0"等。

我计划在更大的规模上做这件事,这里的数据只是为了演示我的问题。我是NN领域的新手,所以我确信我只是错过了一些小东西。

发现了这个问题,以防有人偶然发现。我使用了错误的激活功能。事实证明,在这种分类场景中,"物流"比"tanh"效果好得多:

def train_NN(self, trained_data_list, test_size=0.25):
X = np.array([[7, 4], [3,7], [8,5], [2,3]])
y = np.array([0, 1, 1, 0])
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
self.clf = MLPClassifier(solver='lbfgs', alpha=1e-10, hidden_layer_sizes=(2, 2), activation = 'logistic', random_state=5, max_iter=10000, learning_rate_init = 0.1)
self.clf.fit(X_train, y_train)
print(self.clf.predict(np.atleast_2d([7,4])))  #returns 0
print(self.clf.predict(np.atleast_2d([3,7])))  #returns 1 
print(self.clf.predict(np.atleast_2d([8,5])))  #returns 1 
print(self.clf.predict(np.atleast_2d([2,3])))  #returns 0 

最新更新