通过前面几篇的学习,我们了解了线性模型、逻辑回归、决策树的知识。下面就它们的应用领域和使用技巧进行说明。
线性模型:
- 一般应用于回归问题上,适用于因变量和自变量之间有线性关系。
- 在小数据集上用正规方程求解简单、快速,在大数据集上可用梯度下降法求解。
逻辑回归:
- 一般应用于二分类问题。
- 分类器模型较简单,不能形成边界复杂的模型。
决策树:
- 决策树的最大缺点是原理中的贪心算法,因此它所做的选择只能是某种意义上的局部最优选择。
- 遇特征数目较多的数据集很容易过拟合,所以很必要进行像剪枝、设置叶节点所需的最小样本数或设置数的最大深度来避免过拟合。
- 决策树最大的优点是便于理解和解释,树的结构可以可视化出来。
有了以上的知识,大家在解决实际问题时可以根据具体情况选择不同的方法。
好了,下面就进入这篇文章的主题——神经网络,首先我们来了解感知机。
一、感知机
大家应该还记得逻辑回归中提到的单位阶跃函数和对数几率函数吧。逻辑回归利用对数几率函数来进行分类,而感知机则是利用单位阶跃函数来进行分类。具体示意如下。
分类原则是,如果y>=0,则判定为正样本,如果y<0,则判定为负样本。感知机模型由W和θ参数唯一确定,因此我们的目标就是求出W和θ。具体过程如下。
可以看到,在二维平面上,感知机就是找一条直线分类数据,在n维空间上,就是找n-1维的超平面分类数据,这就要求数据是线性可分的。这个条件太苛刻了,并且感知机在数据不是线性可分的情况下效果很不好,为了解决这个问题,人们就提出了神经网络的概念。一个典型的三层神经网络架构如下。
其中相关的定义如下。
- : 输出层第 j 个神经元的阈值。
- : 隐层第 h 个神经元的阈值。
- : 输入层第 i 个神经元和隐藏第 h 个神经元之间的连接权。
- : 隐层第 h 个神经元和输出层第 j 个神经元之间的连接权。
- : 隐层第 h 个神经元接受到的输入。
- :输出层第 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:
样本X属于每一个类别的概率。