神经网络

1、多层感知机

原理:

  • 多次重复线性回归的加权求和过程(中间的计算结果称为隐单元,隐单元构成隐层),计算完每个隐单元的加权求和之后,对结果应用一个非线性函数。再将这个函数结果用于加权求和得出y

    • 矫正非线性(relu)
    • 正切双曲线(tanh)
  • sklearn.neural_network.MLPClassifier

    from sklearn.neural_network import MLPClassifier
    from sklearn.model_selection import train_test_split
    from sklearn.datasets import load_breast_cancer
    #数据
    cancer = load_breast_cancer()
    #划分训练集测试集
    X_train, X_test, y_train, y_test = train_test_split(cancer.data,cancer.target,random_state = 0)
    #选择模型
    mlp = MLPClassifier(random_state=42).fit(X_train,y_tain)
    

-输出

  print("training set:{:.2f}".format(mlp.score(X_train,y_train)))
  print("testing set:{:.2f}".format(mlp.score(X_test,y_test))) 

2、神经网络调节参数

1)常用的参数:

  • solver参数:学习模型或用来学习参数的算法,

    • 默认选项是‘adam’,大多数情况下好用,但对数据的缩放相当的敏感;
    • ‘lbfgs’,其鲁棒性相当好,但在大型模型或大型数据集上的时间会较长;
    • 还有更高级的‘sgd’,这个是目前许多深度学习研究人员用的,参数默认值是‘adam’。
  • hidden_layer_sizes参数:表示多少个隐层和每个隐层有多少个隐单元。

    • 数据类型为tuple,第i个数字表示第i层的隐单元个数
    • 默认单层100
  • alpha参数:L2惩罚参数,

    • alpha越大模型越简单,泛化能力越好
    • 它的默认值是0.0001很小(弱正则化)
  • activation参数:选择使用的非线性曲线,

    • 其默认值是relu
    • tanh

👍重要性质

在开始学习之前MLP的权重是随机设置的,这种随机设置会影响学到的模型。

  • 也就是说,即使完全相同的参数,如果随机数种子不同的话,我们也可能得到非常不一样的模型,
  • 但如果神经网络很大,并且复杂度选择合理的话,那么对精度的影响不会太大。

2)常用调参方法、复杂度估计

首先创建一个大到足以过拟合的网络,确保这个网络可以对任务进行学习。

  • 如果训练数据可以被学习之后,
    • 要么缩小网络,
    • 要么增大alpha来增强正则化,提高模型的泛化性能。

估计神经网络的复杂度,最重要的参数是层数和每层的隐单元个数。

  • 我们应该先设置1个或2个隐层,然后可以逐步增加。
  • 每个隐层的结点个数通常与输入特征个数接近,但在几千个结点时很少会多于特征数

3、优缺点

优点:能够获取大量数据中包含的信息,并且构建无比复杂的模型。

缺点:训练时间长。还需要仔细的预处理数据

4、参考文献

《Python机器学习基础教程》P80-P91

posted @ 2022-04-23 19:19  朝南烟  阅读(138)  评论(0编辑  收藏  举报
body { color: #000; background-color: #e6e6e6; font-family: "Helvetica Neue",Helvetica,Verdana,Arial,sans-serif; font-size: 12px; min-height: 101%; background: url(https://images.cnblogs.com/cnblogs_com/caolanying/1841633/o_2009041…ly1geq8oc9owbj21hc0u0th5.jpg) fixed; } #home { margin: 0 auto; opacity: 0.8; width: 65%; min-width: 1080px; background-color: #fff; padding: 30px; margin-top: 50px; margin-bottom: 50px; box-shadow: 0 2px 6px rgba(100, 100, 100, 0.3); }