神经网络

scikit-learn提供了MLPClassifier()MLPRegression()两个类,分别用于神经网络分类和回归任务。
多层感知器(MLP) 的监督学习算法,通过在数据集特征 X = {x1, x2, …, xm} 和标签y上训练来学习函数:MLPClassifier()

class sklearn.neural_network.MLPClassifier(hidden_layer_sizes=(100, ), activation='relu', solver='adam', alpha=0.0001, batch_size='auto', learning_rate='constant', learning_rate_init=0.001, power_t=0.5, max_iter=200, shuffle=True, random_state=None, tol=0.0001, verbose=False, warm_start=False, momentum=0.9, nesterovs_momentum=True, early_stopping=False, validation_fraction=0.1, beta_1=0.9, beta_2=0.999, epsilon=1e-08)


#例12.3 使用样本生成器生成有4个类的数据集,训练MLP模型,
#对新样本进行分类预测,可视化预测结果
#使用make_blobs生成centers个类的数据集X,X形状为(n_samples,n_features)
#指定每个类的中心位置,y返回类标签
centers = [(-3, 0), (3, 2), (-4, 5), (0, 6)]
X, y = make_blobs(n_samples=500, centers=centers, n_features=2,
random_state=0)
hidden_n,hidden_m=10,6#隐层大小,2层,神经元数量分别为hidden_n,hidden_m
clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
hidden_layer_sizes=(hidden_n,hidden_m), random_state=1)
clf.fit(X, y)
print('神经网络输出的类标签为:',clf.classes_)
print('神经网络当前的损失函数值为:',clf.loss_)
print('神经网络训练的迭代次数为:',clf.n_iter_)
print('神经网络的层数为:',clf.n_layers_)
print('神经网络输出层的节点数量为:',clf.n_outputs_)
#%%
#将x,y坐标轴刻度规定为最小值-2到最大值+2的范围
x_min =np.min(X[:,0])-2
x_max = np.max(X[:,0])+2
y_min =np.min(X[:,1])-2
y_max = np.max(X[:,1])+2
#生成要预测的样本集,即整个平面
#XX, YY分别从最小值到最大值间均匀取200个数,形状都为200*200
XX, YY = np.mgrid[x_min:x_max:200j, y_min:y_max:200j]
#XX.ravel(), YY.ravel()分别将XX, YY展平为40000*1的数组
#np.c_[XX.ravel(), YY.ravel()]的形状为40000*2
#将XX,YY转换成它们规定的平面内每个点的坐标
Z = np.c_[XX.ravel(), YY.ravel()]
print('要预测的新样本集Z的形状为:',Z.shape)
#%%
#可视化原始数据与全平面分类预测结果
plt.rc('font', size=14)#设置图中字号大小
plt.rcParams['font.sans-serif'] = 'SimHei'#设置字体为SimHei显示中文
plt.rcParams['axes.unicode_minus']=False#坐标轴刻度显示负号
p = plt.figure(figsize=(12,8))
# 子图1,绘制原始数据
ax1 = p.add_subplot(2,2,1)
plt.scatter(X[:,0],X[:,1],c=y)
plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.title('使用make_blobs生成自定义中心的4类样本')#添加标题
#用训练好的神经网络对平面内每点进行预测,用Z_predict保存分类结果
Z_predict=clf.predict(Z)
#print('Z_predict的形状为:',Z_predict.shape)
#设置Z_predict的形状与XX相同,准备将其与XX,YY规定的平面内的每一点的颜色值关联
Z_predict = Z_predict.reshape(XX.shape)
ax1 = p.add_subplot(2,2,2)
plt.pcolormesh(XX, YY, Z_predict/2, cmap=plt.cm.Paired)
plt.scatter(X[:,0],X[:,1],c=y)#绘制原始数据
plt.title('MLP分类结果')#添加标题
#对XX,YY规定的平面设置坐标轴刻度范围
plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.show()