机器学习第五篇——神经网络

版权声明: https://blog.csdn.net/qq_30374549/article/details/81950148

通过前面几篇的学习,我们了解了线性模型逻辑回归决策树的知识。下面就它们的应用领域和使用技巧进行说明。

线性模型:

  •  一般应用于回归问题上,适用于因变量和自变量之间有线性关系。
  • 在小数据集上用正规方程求解简单、快速,在大数据集上可用梯度下降法求解。

逻辑回归:

  • 一般应用于二分类问题。
  • 分类器模型较简单,不能形成边界复杂的模型。

决策树:

  • 决策树的最大缺点是原理中的贪心算法,因此它所做的选择只能是某种意义上的局部最优选择。
  • 遇特征数目较多的数据集很容易过拟合,所以很必要进行像剪枝、设置叶节点所需的最小样本数或设置数的最大深度来避免过拟合。
  • 决策树最大的优点是便于理解和解释,树的结构可以可视化出来。

有了以上的知识,大家在解决实际问题时可以根据具体情况选择不同的方法。

好了,下面就进入这篇文章的主题——神经网络,首先我们来了解感知机。

一、感知机

大家应该还记得逻辑回归中提到的单位阶跃函数和对数几率函数吧。逻辑回归利用对数几率函数来进行分类,而感知机则是利用单位阶跃函数来进行分类。具体示意如下。

分类原则是y=\sum_{i}^{n}W_{i}*X_{i} -\o,如果y>=0,则判定为正样本,如果y<0,则判定为负样本。感知机模型由W和θ参数唯一确定,因此我们的目标就是求出W和θ。具体过程如下。

可以看到,在二维平面上,感知机就是找一条直线分类数据,在n维空间上,就是找n-1维的超平面分类数据,这就要求数据是线性可分的。这个条件太苛刻了,并且感知机在数据不是线性可分的情况下效果很不好,为了解决这个问题,人们就提出了神经网络的概念。一个典型的三层神经网络架构如下。

其中相关的定义如下。

  • \theta _{j} : 输出层第 j 个神经元的阈值。
  • \gamma _{h}: 隐层第 h 个神经元的阈值。
  • v_{ih}: 输入层第 i 个神经元和隐藏第 h 个神经元之间的连接权。
  • w_{hj}: 隐层第 h 个神经元和输出层第 j 个神经元之间的连接权。
  • \alpha _{h}=\sum_{i=1}^{d}x_{i}v_{ih}: 隐层第 h 个神经元接受到的输入。
  • \beta _{j}=\sum_{h=1}^{q}b_{h}w_{hj} :输出层第 j 个神经元接受到的输入。

三层神经网络由 (d+l+1)q+l 个参数确定,而我们的目标就是用数据集拟合出这个参数,下面就介绍著名的BP算法(error BackPropagation)。

BP算法可以形象的描述为从后往前的更新参数。理论证明,只要隐层的结点个数足够,三层架构的神经网络几乎可以构造任何复杂的分类边界,但设置合适的隐藏结点数是个棘手的问题。

有了理论知识,我们看看在sklearn中是怎么应用神经网络的。一个简单的例子如下。

>>> from sklearn.neural_network import MLPClassifier
>>> X = [[0., 0.], [1., 1.]]
>>> y = [0, 1]
>>> clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
...                     hidden_layer_sizes=(5, 2), random_state=1)
...
>>> clf.fit(X, y)                         
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=(5, 2), learning_rate='constant',
       learning_rate_init=0.001, max_iter=200, momentum=0.9,
       nesterovs_momentum=True, power_t=0.5, random_state=1, shuffle=True,
       solver='lbfgs', tol=0.0001, validation_fraction=0.1, verbose=False,
       warm_start=False)
>> clf.predict([[2., 2.], [-1., -2.]])
array([1, 0])

MLPClassifier类相关参数说明:

     Parameters:

            hidden_layer_sizes : tuple, length = n_layers - 2, default (100,)

                 设置各隐层的结点数。

            activation : {‘identity’, ‘logistic’, ‘tanh’, ‘relu’}, default ‘relu’

                 设置激活函数。

                 identity:f(x) = x

                 logistic:f(x) = 1 / (1 + exp(-x))

                 tanh:f(x) = tanh(x)

                 relu:max(0, x)

            solver : {‘lbfgs’, ‘sgd’, ‘adam’}, default ‘adam’

                 拟合参数的方法,‘sgd’就是随机梯度下降法。

            alpha : float, optional, default 0.0001

                 正则化参数

            early_stopping : bool, default False

                是否使用“早停”策略缓解过拟合。

           validation_fraction : float, optional, default 0.1

               留出多少比率的验证集用于“早停”策略。

Attributes:

        

          coefs_ : list, length n_layers - 1

              权值矩阵。

          intercepts_ : list, length n_layers - 1

              阈值。

Methods:

          predict_proba(X)

               样本X属于每一个类别的概率。

猜你喜欢

转载自blog.csdn.net/qq_30374549/article/details/81950148
今日推荐