监督学习算法2.3.8-神经网络

import mglearn
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.datasets import make_moons
from sklearn.datasets import make_blobs
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.svm import LinearSVC
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.neural_network import MLPClassifier
from numpy.core.umath_tests import inner1d
from mpl_toolkits.mplot3d import Axes3D,axes3d

display(mglearn.plots.plot_logistic_regression_graph())
display(mglearn.plots.plot_single_hidden_layer_graph())
display(mglearn.plots.plot_two_hidden_layer_graph())

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

line = np.linspace(-3,3,100)
plt.plot(line,np.tanh(line),label='tahn')
plt.plot(line,np.maximum(line,0),label='relu')
plt.legend(loc='best')
plt.xlabel('x')
plt.ylabel('relu(x),tanh(x)')

在这里插入图片描述

x,y = make_moons(n_samples=100,noise=0.25,random_state=3)
x_train,x_test,y_train,y_test = train_test_split(x,y,stratify=y,random_state=42)
mlp = MLPClassifier(solver='lbfgs',random_state=0).fit(x_train,y_train)
mglearn.plots.plot_2d_separator(mlp,x_train,fill=True,alpha=.3)
mglearn.discrete_scatter(x_train[:,0],x_train[:,1],y_train)
plt.xlabel('feature 0')
plt.ylabel('feature 1')

在这里插入图片描述

mlp = MLPClassifier(solver='lbfgs',random_state=0,hidden_layer_sizes=[10])
mlp.fit(x_train,y_train)
mglearn.plots.plot_2d_separator(mlp,x_train,fill=True,alpha=.3)
mglearn.discrete_scatter(x_train[:,0],x_train[:,1],y_train)
plt.xlabel('feature 0')
plt.ylabel('feature 1')

在这里插入图片描述

mlp = MLPClassifier(solver='lbfgs',random_state=0,hidden_layer_sizes=[10,10])
mlp.fit(x_train,y_train)
mglearn.plots.plot_2d_separator(mlp,x_train,fill=True,alpha=.3)
mglearn.discrete_scatter(x_train[:,0],x_train[:,1],y_train)
plt.xlabel('feature 0')
plt.ylabel('feature 1')

在这里插入图片描述

mlp = MLPClassifier(solver='lbfgs',activation='tanh',random_state=0,hidden_layer_sizes=[10,10])
mlp.fit(x_train,y_train)
mglearn.plots.plot_2d_separator(mlp,x_train,fill=True,alpha=.3)
mglearn.discrete_scatter(x_train[:,0],x_train[:,1],y_train)
plt.xlabel('feature 0')
plt.ylabel('feature 1')

在这里插入图片描述

fig,axes = plt.subplots(2,4,figsize=(20,8))
for axx,n_hidden_nodes in zip(axes,[10,100]):
    for ax,alpha in zip(axx,[0.0001,0.01,0.1,1]):
        mlp = MLPClassifier(solver='lbfgs',random_state=0,hidden_layer_sizes=[n_hidden_nodes,n_hidden_nodes],alpha=alpha)
        mlp.fit(x_train,y_train)
        mglearn.plots.plot_2d_separator(mlp,x_train,fill=True,alpha=.3,ax=ax)
        mglearn.discrete_scatter(x_train[:,0],x_train[:,1],y_train,ax=ax)
        ax.set_title('n_hidden[{},{}] alpha={:.4f}'.format(n_hidden_nodes,n_hidden_nodes,alpha))

在这里插入图片描述

fig,axes = plt.subplots(2,4,figsize=(20,8))
for i,ax in enumerate(axes.ravel()):
    mlp = MLPClassifier(solver='lbfgs',random_state=i,hidden_layer_sizes=[100,100])
    mlp.fit(x_train,y_train)
    mglearn.plots.plot_2d_separator(mlp,x_train,fill=True,alpha=.3,ax=ax)
    mglearn.discrete_scatter(x_train[:,0],x_train[:,1],y_train,ax=ax)

在这里插入图片描述

cancer = load_breast_cancer()
print("cancer data per-feature maxima:{}".format(cancer.data.max(axis=0)))
x_train,x_test,y_train,y_test = train_test_split(cancer.data,cancer.target,random_state=0)
mlp = MLPClassifier(random_state=42)
mlp.fit(x_train,y_train)
print("accuracy on training set:{:.3f}".format(mlp.score(x_train,y_train)))
print("accuracy on test set:{:.3f}".format(mlp.score(x_test,y_test)))

cancer data per-feature maxima:[2.811e+01 3.928e+01 1.885e+02 2.501e+03 1.634e-01 3.454e-01 4.268e-01
2.012e-01 3.040e-01 9.744e-02 2.873e+00 4.885e+00 2.198e+01 5.422e+02
3.113e-02 1.354e-01 3.960e-01 5.279e-02 7.895e-02 2.984e-02 3.604e+01
4.954e+01 2.512e+02 4.254e+03 2.226e-01 1.058e+00 1.252e+00 2.910e-01
6.638e-01 2.075e-01]
accuracy on training set:0.906
accuracy on test set:0.881

mean_on_train = x_train.mean(axis=0)
std_on_train = x_train.std(axis=0)
x_train_scaled = (x_train - mean_on_train) / std_on_train
x_test_scaled = (x_test - mean_on_train) / std_on_train
mlp = MLPClassifier(random_state=0)
mlp.fit(x_train_scaled,y_train)
print("accuracy on training set:{:.3f}".format(mlp.score(x_train_scaled,y_train)))
print("accuracy on test set:{:.3f}".format(mlp.score(x_test_scaled,y_test)))

accuracy on training set:0.991
accuracy on test set:0.965

mlp = MLPClassifier(max_iter=1000,random_state=0)  #增加迭代次数到1000
mlp.fit(x_train_scaled,y_train)
print("accuracy on training set:{:.3f}".format(mlp.score(x_train_scaled,y_train)))
print("accuracy on test set:{:.3f}".format(mlp.score(x_test_scaled,y_test)))
mlp = MLPClassifier(max_iter=1000,alpha=1,random_state=0)  #增加alpha提高泛化
mlp.fit(x_train_scaled,y_train)
print("accuracy on training set:{:.3f}".format(mlp.score(x_train_scaled,y_train)))
print("accuracy on test set:{:.3f}".format(mlp.score(x_test_scaled,y_test)))

accuracy on training set:0.993
accuracy on test set:0.972
accuracy on training set:0.988
accuracy on test set:0.972

plt.figure(figsize=(20,5))
plt.imshow(mlp.coefs_[0],interpolation="none",cmap="viridis")
plt.yticks(range(30),cancer.feature_names)
plt.ylabel('columns in weight matrix')
plt.xlabel('input feature')
plt.colorbar()

在这里插入图片描述

发布了65 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/heroybc/article/details/102944054
今日推荐