踩坑1:sklearn导包一直无法成功
原因1:sklearn,scikit-learn,numpy,scipy这几个包以及对应版本都要下载好,用pip insatll 下载包名,即可自动下载当前最高匹配版本。
原因2:pycharm中建立项目有问题,可能项目用的是Pycharm虚拟机针对本项目而配置的包,故可被引用的包范围不是本机安装包的范围。
在此处选择本机本地安装的Python解释器即可。
踩坑2:
没有fetch_mldata这个方法,那是因为当前sklearn版本过高
把sklearn以及相关模块进行降低版本即可,降低一个版本,其他包pip时会自动下载相对应匹配的版本。
踩坑3:
加载不到本地数据集,报错socket相关错误。
经过查看报错信息可以知道,当传入的文件路径不存在时,mldata会访问mldata.org网站自行下载相应数据集,所以是在链接网络时出现问题,查看源码如下图。
所以查找文件路径的错误,继续查看源码
可以知道,此程序在data_home下会自动产生一个叫做mldata的文件夹,其filename是data_home+mldata+dataname
故,我们应当把数据集放在本地文件夹data_home下的mldata中,即可加载到对应文件。
再遇到坑再进行补充。
神经网络实现手写识别,用到sklearn的MLPClassifier分类器
clf=MLPClassifier(hidden_layer_sizes=(100),activation='logistic',solver='adam',learning_rate_init=0.0001,max_iter=2000)
参数说明:
- hidden_layer_sizes :例如hidden_layer_sizes=(50, 50),表示有两层隐藏层,第一层隐藏层有50个神经元,第二层也有50个神经元。
- activation :激活函数,{‘identity’, ‘logistic’, ‘tanh’, ‘relu’}, 默认relu
- identity:f(x) = x
- logistic:其实就是sigmod,f(x) = 1 / (1 + exp(-x)).
- tanh:f(x) = tanh(x).
- relu:f(x) = max(0, x)
- solver: {‘lbfgs’, ‘sgd’, ‘adam’}, 默认adam,用来优化权重
- lbfgs:quasi-Newton方法的优化器
- sgd:随机梯度下降
- adam: Kingma, Diederik, and Jimmy Ba提出的机遇随机梯度的优化器
注意:默认solver ‘adam’在相对较大的数据集上效果比较好(几千个样本或者更多),对小数据集来说,lbfgs收敛更快效果也更好。
- alpha :float,可选的,默认0.0001,正则化项参数
- batch_size : int , 可选的,默认’auto’,随机优化的minibatches的大小batch_size=min(200,n_samples),如果solver是’lbfgs’,分类器将不使用minibatch
- learning_rate :学习率,用于权重更新,只有当solver为’sgd’时使用,{‘constant’,’invscaling’, ‘adaptive’},默认constant
- ‘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.
- power_t: double, 可选, default 0.5,只有solver=’sgd’时使用,是逆扩展学习率的指数.当learning_rate=’invscaling’,用来更新有效学习率。
- max_iter: int,可选,默认200,最大迭代次数。
- random_state:int 或RandomState,可选,默认None,随机数生成器的状态或种子。
- shuffle: bool,可选,默认True,只有当solver=’sgd’或者‘adam’时使用,判断是否在每次迭代时对样本进行清洗。
- tol:float, 可选,默认1e-4,优化的容忍度
- learning_rate_int:double,可选,默认0.001,初始学习率,控制更新权重的补偿,只有当solver=’sgd’ 或’adam’时使用。
- verbose : bool, 可选, 默认False,是否将过程打印到stdout
- warm_start : bool, 可选, 默认False,当设置成True,使用之前的解决方法作为初始拟合,否则释放之前的解决方法。
- momentum : float, 默认 0.9,动量梯度下降更新,设置的范围应该0.0-1.0. 只有solver=’sgd’时使用.
- nesterovs_momentum : boolean, 默认True, Whether to use Nesterov’s momentum. 只有solver=’sgd’并且momentum > 0使用.
- early_stopping : bool, 默认False,只有solver=’sgd’或者’adam’时有效,判断当验证效果不再改善的时候是否终止训练,当为True时,自动选出10%的训练数据用于验证并在两步连续迭代改善,低于tol时终止训练。
- validation_fraction : float, 可选, 默认 0.1,用作早期停止验证的预留训练数据集的比例,早0-1之间,只当early_stopping=True有用
- beta_1 : float, 可选, 默认0.9,只有solver=’adam’时使用,估计一阶矩向量的指数衰减速率,[0,1)之间
- beta_2 : float, 可选, 默认0.999,只有solver=’adam’时使用估计二阶矩向量的指数衰减速率[0,1)之间
- epsilon : float, 可选, 默认1e-8,只有solver=’adam’时使用数值稳定值。
属性说明:
- classes_:每个输出的类标签
- loss_:损失函数计算出来的当前损失值
- coefs_:列表中的第i个元素表示i层的权重矩阵
- intercepts_:列表中第i个元素代表i+1层的偏差向量
- n_iter_ :迭代次数
- n_layers_:层数
- n_outputs_:输出的个数
- out_activation_:输出激活函数的名称。
版权声明:本文为qq_42910523原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。