- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经编写了一个基本程序来了解 MLP 分类器中发生的情况?
from sklearn.neural_network import MLPClassifier
数据:标记为男性或女性的 body 指标(高度、宽度和鞋号)数据集:
X = [[181, 80, 44], [177, 70, 43], [160, 60, 38], [154, 54, 37], [166, 65, 40],
[190, 90, 47], [175, 64, 39],
[177, 70, 40], [159, 55, 37], [171, 75, 42], [181, 85, 43]]
y = ['male', 'male', 'female', 'female', 'male', 'male', 'female', 'female',
'female', 'male', 'male']
准备模型:
clf= MLPClassifier(hidden_layer_sizes=(3,), activation='logistic',
solver='adam', alpha=0.0001,learning_rate='constant',
learning_rate_init=0.001)
火车
clf= clf.fit(X, y)
学习分类器的属性:
print('current loss computed with the loss function: ',clf.loss_)
print('coefs: ', clf.coefs_)
print('intercepts: ',clf.intercepts_)
print(' number of iterations the solver: ', clf.n_iter_)
print('num of layers: ', clf.n_layers_)
print('Num of o/p: ', clf.n_outputs_)
测试
print('prediction: ', clf.predict([ [179, 69, 40],[175, 72, 45] ]))
计算。准确率
print( 'accuracy: ',clf.score( [ [179, 69, 40],[175, 72, 45] ], ['female','male'], sample_weight=None ))
current loss computed with the loss function: 0.617580287851
coefs: [array([[ 0.17222046, -0.02541928, 0.02743722],
[-0.19425909, 0.14586716, 0.17447281],
[-0.4063903 , 0.148889 , 0.02523247]]), array([[-0.66332919],
[ 0.04249613],
[-0.10474769]])]
intercepts: [array([-0.05611057, 0.32634023, 0.51251098]), array([ 0.17996649])]
number of iterations the solver: 200
num of layers: 3
Num of o/p: 1
prediction: ['female' 'male']
accuracy: 1.0
/home/anubhav/anaconda3/envs/mytf/lib/python3.6/site-packages/sklearn/neural_network/multilayer_perceptron.py:563: ConvergenceWarning: Stochastic Optimizer: Maximum iterations reached and the optimization hasn't converged yet.
% (), ConvergenceWarning)
current loss computed with the loss function: 0.639478303643
coefs: [array([[ 0.02300866, 0.21547873, -0.1272455 ],
[-0.2859666 , 0.40159542, 0.55881399],
[ 0.39902066, -0.02792529, -0.04498812]]), array([[-0.64446013],
[ 0.60580985],
[-0.22001532]])]
intercepts: [array([-0.10482234, 0.0281211 , -0.16791644]), array([-0.19614561])]
number of iterations the solver: 39
num of layers: 3
Num of o/p: 1
prediction: ['female' 'female']
accuracy: 0.5
current loss computed with the loss function: 0.691966937074
coefs: [array([[ 0.21882191, -0.48037975, -0.11774392],
[-0.15890357, 0.06887471, -0.03684797],
[-0.28321762, 0.48392007, 0.34104955]]), array([[ 0.08672174],
[ 0.1071615 ],
[-0.46085333]])]
intercepts: [array([-0.36606747, 0.21969636, 0.10138625]), array([-0.05670653])]
number of iterations the solver: 4
num of layers: 3
Num of o/p: 1
prediction: ['male' 'male']
accuracy: 0.5
current loss computed with the loss function: 0.697102567593
coefs: [array([[ 0.32489731, -0.18529689, -0.08712877],
[-0.35425908, 0.04214241, 0.41249622],
[-0.19993622, -0.38873908, -0.33057999]]), array([[ 0.43304555],
[ 0.37959392],
[ 0.55998979]])]
intercepts: [array([ 0.11555407, -0.3473817 , -0.16852093]), array([ 0.31326347])]
number of iterations the solver: 158
num of layers: 3
Num of o/p: 1
prediction: ['male' 'male']
accuracy: 0.5
我有以下问题:
1.Why in the RUN1 the optimizer did not converge?
2.Why in RUN3 the number of iteration were suddenly becomes so low and in the RUN4 so high?
3.What else can be done to increase the accuracy which I get in RUN1.?
最佳答案
1:您的 MLP 未收敛:该算法通过逐步收敛到最小值进行优化,但在运行 1 中未找到最小值。
2 运行差异:您的 MLP 有一些随机起始值,因此您不会得到与数据中看到的相同的结果。看来您在第四次运行中的起点非常接近最低值。您可以将 MLP 的 random_state 参数更改为常量,例如random_state=0
一遍又一遍地获得相同的结果。
3是最难的一点。您可以通过以下方式优化参数
from sklearn.model_selection import GridSearchCV
Gridsearch 将测试集分成大小相等的部分,使用一部分作为测试数据,其余部分作为训练数据。因此,它会优化与您将数据拆分成的部分一样多的分类器。
您需要指定(您的数据很小,所以我建议 2 或 3)您分割的部分数量、分类器(您的 MLP)以及您想要优化的参数网格,如下所示:
param_grid = [
{
'activation' : ['identity', 'logistic', 'tanh', 'relu'],
'solver' : ['lbfgs', 'sgd', 'adam'],
'hidden_layer_sizes': [
(1,),(2,),(3,),(4,),(5,),(6,),(7,),(8,),(9,),(10,),(11,), (12,),(13,),(14,),(15,),(16,),(17,),(18,),(19,),(20,),(21,)
]
}
]
因为您曾经通过三个神经元的隐藏层获得了 100% 的准确率,所以您可以尝试优化学习率和动量等参数,而不是隐藏层。
像这样使用 Gridsearch:
clf = GridSearchCV(MLPClassifier(), param_grid, cv=3,
scoring='accuracy')
clf.fit(X,y)
print("Best parameters set found on development set:")
print(clf.best_params_)
关于machine-learning - multilayer_perceptron : ConvergenceWarning: Stochastic Optimizer: Maximum iterations reached and the optimization hasn't converged yet. 警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46028914/
我正在尝试研究/理解光栅化算法并且已经发布了一些与此相关的帖子但不幸的是没有得到很多答案: Rasterisation Algorithm: finding the "ST" coordinates
相当简单的问题:我应该如何使用@pm.stochastic?我读过一些博客文章,声称 @pm.stochastic 期望对数值为负: @pm.stochastic(observed=True) def
我是 Deepleaning 和 Pytorch 的初学者。 我不明白如何在使用 SWA 时使用 BatchNormalization。 pytorch.org 在 https://pytorch.o
我正在尝试用 Python 理解和实现这些算法。我为此目的使用了 sklearn.linear_model.SGDRegressor ,我的代码如下所示: import numpy as np fro
我已经编写了一个基本程序来了解 MLP 分类器中发生的情况? from sklearn.neural_network import MLPClassifier 数据:标记为男性或女性的 body 指标
我在这里看过类似的问题 pymc warning: value is neither numerical nor array with floating-point dtype 但没有答案,有人可以告
我是一名优秀的程序员,十分优秀!