scikit-leran学习笔记(3)---神经网络模型(有监督的)

1.Multi-layer Perceptron 多层感知机

MLP是一个监督学习算法,图1是带一个隐藏层的MLP模型
这里写图片描述
左边层是输入层,由神经元集合{xi|x1,x2,…,xm},代表输入特征,隐藏层的每个神经元将前一层的的值通过线性加权求和的方式表示,即w1x1+w2x2+…+wmxm,其次是一个非线性激活函数g(.):R->R,比如双曲函数,输出层接受从最后一个隐藏层输出的值并将他们转换成值。
这个模块包含公共属性coefs_intercepts_coefs_ 是权重矩阵列表,下标为i的权重矩阵代表i和i+1层的权重。intercepts_ 是一个偏差向量列表,其中第i个偏差向量代表加到i+1层上的偏差值。
MLP的优点是:
- 可以学习非线性模型
- 使用partial_fit 实时学习
MLP的缺点是:
- 有隐藏层的MLP包含一个非凸性损失函数,存在超过一个最小值,所以不同的随机初始权重可能导致不同验证精确度
- MLP要求调整一系列超参数,比如隐藏神经元,隐藏层的个数以及迭代的次数
- MLP对特征缩放比较敏感

2.分类

MLPClassifier使用BP算法来实现一个多层感知机。
示例1:

>>> 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])
>>> [coef.shape for coef in clf.coefs_]
[(2L, 5L), (5L, 2L), (2L, 1L)]
>>> clf.predict_proba([[2.,2.],[1.,2.]])
array([[  1.96718015e-04,   9.99803282e-01],
       [  1.96718015e-04,   9.99803282e-01]])

参数说明:
1. hidden_layer_sizes :元祖格式,长度=n_layers-2, 默认(100,),第i个元素表示第i个隐藏层的神经元的个数。
2. activation :{‘identity’, ‘logistic’, ‘tanh’, ‘relu’}, 默认‘relu
- ‘identity’: no-op activation, useful to implement linear bottleneck,
返回f(x) = x
- ‘logistic’:the logistic sigmoid function, returns f(x) = 1 / (1 + exp(-x)).
- ‘tanh’:the hyperbolic tan function, returns f(x) = tanh(x).
- ‘relu’:the rectified linear unit function, returns f(x) = max(0, x)
4. solver: {‘lbfgs’, ‘sgd’, ‘adam’}, 默认 ‘adam’,用来优化权重
- lbfgs:quasi-Newton方法的优化器
- sgd:随机梯度下降
- adam: Kingma, Diederik, and Jimmy Ba提出的机遇随机梯度的优化器
注意:默认solver ‘adam’在相对较大的数据集上效果比较好(几千个样本或者更多),对小数据集来说,lbfgs收敛更快效果也更好。
5. alpha :float,可选的,默认0.0001,正则化项参数
6. batch_size : int , 可选的,默认‘auto’,随机优化的minibatches的大小,如果solver是‘lbfgs’,分类器将不使用minibatch,当设置成‘auto’,batch_size=min(200,n_samples)
7. learning_rate :{‘constant’,‘invscaling’, ‘adaptive’},默认‘constant’,用于权重更新,只有当solver为’sgd‘时使用
- ‘constant’: 有‘learning_rate_init’给定的恒定学习率
- ‘incscaling’:随着时间t使用’power_t’的逆标度指数不断降低学习率learning_rate_ ,effective_learning_rate = learning_rate_init / pow(t, power_t)
- ‘adaptive’:只要训练损耗在下降,就保持学习率为’learning_rate_init’不变,当连续两次不能降低训练损耗或验证分数停止升高至少tol时,将当前学习率除以5.
8. max_iter: int,可选,默认200,最大迭代次数。
9. random_state:int 或RandomState,可选,默认None,随机数生成器的状态或种子。
10. shuffle: bool,可选,默认True,只有当solver=’sgd’或者‘adam’时使用,判断是否在每次迭代时对样本进行清洗。
11. tol:float, 可选,默认1e-4,优化的容忍度
12. learning_rate_int:double,可选,默认0.001,初始学习率,控制更新权重的补偿,只有当solver=’sgd’ 或’adam’时使用。
13. power_t: double, optional, default 0.5,只有solver=’sgd’时使用,是逆扩展学习率的指数.当learning_rate=’invscaling’,用来更新有效学习率。
14. verbose : bool, optional, default False,是否将过程打印到stdout
15. warm_start : bool, optional, default False,当设置成True,使用之前的解决方法作为初始拟合,否则释放之前的解决方法。
16. momentum : float, default 0.9,Momentum(动量) for gradient descent update. Should be between 0 and 1. Only used when solver=’sgd’.
17. nesterovs_momentum : boolean, default True, Whether to use Nesterov’s momentum. Only used when solver=’sgd’ and momentum > 0.
18. early_stopping : bool, default False,Only effective when solver=’sgd’ or ‘adam’,判断当验证效果不再改善的时候是否终止训练,当为True时,自动选出10%的训练数据用于验证并在两步连续爹迭代改善低于tol时终止训练。
19. validation_fraction : float, optional, default 0.1,用作早期停止验证的预留训练数据集的比例,早0-1之间,只当early_stopping=True有用
20. beta_1 : float, optional, default 0.9,Only used when solver=’adam’,估计一阶矩向量的指数衰减速率,[0,1)之间
21. beta_2 : float, optional, default 0.999,Only used when solver=’adam’估计二阶矩向量的指数衰减速率[0,1)之间
22. epsilon : float, optional, default 1e-8,Only used when solver=’adam’数值稳定值。
属性说明:
- classes_:每个输出的类标签
- loss_:损失函数计算出来的当前损失值
- coefs_:列表中的第i个元素表示i层的权重矩阵
- intercepts_:列表中第i个元素代表i+1层的偏差向量
- n_iter_ :迭代次数
- n_layers_:层数
- n_outputs_:输出的个数
- out_activation_:输出激活函数的名称。
方法说明:
- fit(X,y):拟合
- get_params([deep]):获取参数
- predict(X):使用MLP进行预测
- predic_log_proba(X):返回对数概率估计
- predic_proba(X):概率估计
- score(X,y[,sample_weight]):返回给定测试数据和标签上的平均准确度
-set_params(**params):设置参数。

今天就写到这里啦,这一部分还没有看完,,明天继续啦~,初学小菜鸟,望多多指教

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scikit-learn是一个强大的机器学习库,虽然它本身并不包含神经网络模型,但我们可以使用它的流水线(Pipeline)、交叉验证(Cross-validation)和网格搜索(GridSearchCV)等功能,来构建和优化神经网络模型。在本文,我们将使用Scikit-learn来构建一个简单的神经网络选股模型。 首先,我们需要准备数据。假设我们有一些基本面数据和股票价格数据,我们要根据这些数据来预测未来一个月该股票的涨跌情况。我们可以使用Pandas来读取和处理数据。 ``` python import pandas as pd # 读取数据 df = pd.read_csv('stock_data.csv') # 处理数据 X = df.drop(['symbol', 'date', 'label'], axis=1) # 特征矩阵 y = df['label'] # 标签 ``` 接下来,我们需要对数据进行标准化处理。这是因为神经网络模型对特征的范围比较敏感,如果特征的范围不同,可能会导致模型无法收敛。我们可以使用Scikit-learn的StandardScaler来进行标准化处理。 ``` python from sklearn.preprocessing import StandardScaler # 标准化处理 scaler = StandardScaler() X = scaler.fit_transform(X) ``` 然后,我们可以使用Scikit-learn的MLPClassifier来构建神经网络模型。MLPClassifier是一个多层感知器分类器,它可以自动调整模型的权重和偏置,以最小化损失函数。我们可以通过设置不同的参数来调整模型的复杂度。在这里,我们将设置一个包含两个隐藏层的神经网络模型。 ``` python from sklearn.neural_network import MLPClassifier # 构建神经网络模型 model = MLPClassifier(hidden_layer_sizes=(100, 50), max_iter=500) # 训练模型 model.fit(X, y) ``` 最后,我们可以使用Scikit-learn的交叉验证和网格搜索功能来优化模型的超参数。交叉验证可以评估模型的泛化能力,网格搜索可以自动调整超参数,以最大化模型的性能。 ``` python from sklearn.model_selection import GridSearchCV # 定义参数空间 param_grid = { 'hidden_layer_sizes': [(50,), (100,), (50, 50), (100, 50)], 'activation': ['tanh', 'relu'], 'alpha': [0.0001, 0.001, 0.01], } # 网格搜索优化超参数 grid_search = GridSearchCV(model, param_grid=param_grid, cv=5, verbose=10) grid_search.fit(X, y) # 输出最优参数 print(grid_search.best_params_) ``` 这样,我们就可以使用Scikit-learn来构建和优化神经网络选股模型了。当然,这只是一个简单的示例,实际应用还需要考虑很多因素,如特征选择、数据清洗、模型评估等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值