在 Scikit 中神经网络被称为多层感知器(Multi-layer Perceptron),它可以用于分类或回归的非线性函数。用于分类的模块是 MLPClassifier,而用于回归的模块则是 MLPRegressor。
MLPClassifier 主要用来做分类,我们用 MLPClassifier 在鸢尾花数据上做测试。
这里我们用到 sklearn 中 neural_network 模块的 MLPClassifier 分类器。此外,使用 load_iris 来获取 iris 数据集。我们使用 model_selection 模块中的方法来分割训练集和测试集。
In [1]: from sklearn.neural_network import MLPClassifier
...: from sklearn.datasets import load_iris
...: from sklearn.model_selection import train_test_split
In [2]: iris = load_iris() # 导入数据集
In [3]: X = iris['data'] # 获取自变量数据
In [4]: y = iris['target'] # 获取因变量数据
In [5]: X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) #分割训练集和测试集
这里,通过 hidden_laye r参数设置隐藏层为 3 层,每个隐藏层有 3 个神经元。另外通过 max_iter 参数设置最大的迭代次数为 100000 次。solver 参数用于指定最优化方法,adam 则是另一种优化的算法。
In [6]: clf = MLPClassifier(solver='adam', alpha=1e-5,hidden_layer_sizes=(3,3), random_state=1,max_iter=100000,) # 创建神经网络分类器对象
可以看到其他参数,比如 alpha 代表了学习速率。
In [7]: clf.fit(X, y)# 训练模型
Out[7]:
MLPClassifier(activation='relu', alpha=1e-05, batch_size='auto', beta_1=0.9,
beta_2=0.999, early_stopping=False, epsilon=1e-08,
hidden_layer_sizes=(3, 3), learning_rate='constant',
learning_rate_init=0.001, max_iter=100000, momentum=0.9,
nesterovs_momentum=True, power_t=0.5, random_state=1, shuffle=True,
solver='adam', tol=0.0001, validation_fraction=0.1, verbose=False,
warm_start=False)
In [8]: clf.score(X_test,y_test)#模型评分
Out[8]: 0.9666666666666667