神经网络
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