详解 Scikit-learn 的 neural_network.MLPClassifier函数:多层感知器分类器

  • Post category:Python

Scikit-learn(简称sklearn)是一个Python开源机器学习库,适用于数据挖掘和数据分析等领域。其中sklearn.neural_network模块提供了人工神经网络(Artificial Neural Network, ANN)算法的实现,包含了MLPClassifier类。下面是关于该类的作用和使用方法的完整攻略。

MLPClassifier类的作用

MLPClassifier类的作用是使用多层感知器(Multilayer Perceptron, MLP)算法实现分类任务。多层感知器(MLP)是最常见的基于前馈人工神经网络(Feedforward Artificial Neural Network)的机器学习算法之一。

多层感知器的核心是由许多神经元组成的神经网络,其每个神经元都有一个或多个输入和一个输出。每个神经元根据输入计算加权和,然后将结果传递给激活函数。激活函数将其转换为输出信号,并将其发送到下一层神经元进行处理。

MLPClassifier基于多层感知器的分类算法,使用前馈神经网络来学习非线性函数。它使用反向传播算法(Backpropagation Algorithm)来训练,并可以通过添加隐藏层来增加模型的复杂性。MLPClassifier可以用于分类或多分类问题,并支持softmax,logistic和tanh等激活函数。

MLPClassifier类的使用方法

以下是MLPClassifier类的使用方法的完整攻略:

构造器

初始化MLPClassifier类对象时,可以设置以下一些参数:

  • hidden_layer_sizes:控制隐藏层数和每层的神经元数量
  • activation:选取何种激活函数来呈现神经元的输入和输出
  • solver:用于优化权重的优化器选择
  • alpha:L2正则化参数
  • batch_size:尺寸用于梯度下降中的小型批次
  • learning_rate:选择如何反馈学习率
  • learning_rate_init:初始学习率
  • max_iter:最大迭代次数
  • momentum:动量参数
  • early_stopping:如果验证分数再三次迭代中没有改善,则停止训练
  • n_iter_no_change:停止前的迭代次数
from sklearn.neural_network import MLPClassifier
clf = MLPClassifier(hidden_layer_sizes=(100,50), activation='relu', solver='adam',
                    alpha=0.0001, batch_size='auto', learning_rate='constant',
                    learning_rate_init=0.001, max_iter=200, momentum=0.9,
                    early_stopping=False, n_iter_no_change=10)

fit方法

通过调用fit方法,可以训练模型,输入X和y分别表示数据和分类目标。

clf.fit(X_train, y_train)

predict方法

完成模型训练后,通过predict方法可以预测测试集数据的分类。

y_pred = clf.predict(X_test)

示例1:Iris数据集

下面是一个使用Iris数据集(Iris flowers数据集)的例子,用于从花萼长度,花萼宽度,花瓣长度,花瓣宽度等四个特征中预测鸢尾花的品种。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

iris = load_iris()
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=1)
#标准化数据
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
#构建多层感知器
clf = MLPClassifier(hidden_layer_sizes=(10,5), activation='relu', solver='adam', alpha=0.0001,
                    batch_size='auto', learning_rate='constant', learning_rate_init=0.001, max_iter=200, momentum=0.9,
                    early_stopping=False, n_iter_no_change=10)
#训练模型
clf.fit(X_train, y_train)
#预测测试集
y_pred = clf.predict(X_test)

示例2:手写数字识别

下面是一个使用手写数字识别数据集的例子,用于从手写图像中分类数字并进行预测。

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

digits = load_digits()
#将手写数字变形为一维向量,规范化数据
X = digits.data.reshape(-1, 64)
scaler = StandardScaler().fit(X)
X = scaler.transform(X)
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, digits.target, test_size=0.3, random_state=1)
#构建多层感知器
clf = MLPClassifier(hidden_layer_sizes=(30,20), activation='relu', solver='adam', alpha=0.0001,
                    batch_size='auto', learning_rate='constant', learning_rate_init=0.001, max_iter=200, momentum=0.9,
                    early_stopping=False, n_iter_no_change=10)
#训练模型
clf.fit(X_train, y_train)
#预测测试集
y_pred = clf.predict(X_test)

通过上述2个示例,我们可以看出使用MLPClassifier类实现分类任务的基本流程,首先通过构造器设置相关参数,然后使用fit训练模型,最后通过predict方法预测测试集的分类。