MLPCIassifier से (loss_curve_) द्वारा प्राप्त हानि मूल्यों को उचित रूप से प्लॉट करने के लिए, हम निम्नलिखित कदम उठा सकते हैं -
- आकृति का आकार सेट करें और सबप्लॉट के बीच और आसपास पैडिंग समायोजित करें।
- परम बनाएं, शब्दकोशों की सूची बनाएं।
- लेबल और प्लॉट तर्कों की एक सूची बनाएं।
- nrows=2 और ncols= के साथ एक आकृति और सबप्लॉट का एक सेट बनाएं
- आइरिस डेटासेट (वर्गीकरण) लोड करें और वापस करें।
- डेटासेट से x_digits और y_digits प्राप्त करें।
- अनुकूलित data_set, टुपल्स की सूची प्राप्त करें।
- ज़िप्ड, कुल्हाड़ियों, data_sets और शीर्षकों के नाम की सूची को पुनरावृत्त करें।
- plot_on_dataset() . में तरीका; वर्तमान अक्ष का शीर्षक सेट करें।
- मल्टी-लेयर परसेप्ट्रॉन क्लासिफायर इंस्टेंस प्राप्त करें।
- एमएलपीएस प्राप्त करें , यानी एमएलपीसी उदाहरणों की एक सूची।
- पुनरावृत्ति एमएलपीएस और प्लॉट करें mlp.loss_curve_ प्लॉट () . का उपयोग करके विधि।
- आंकड़ा प्रदर्शित करने के लिए, दिखाएं () . का उपयोग करें विधि।
उदाहरण
import warnings
import matplotlib.pyplot as plt
from sklearn.neural_network import MLPClassifier
from sklearn.preprocessing import MinMaxScaler
from sklearn import datasets
from sklearn.exceptions import ConvergenceWarning
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
params = [{'solver': 'sgd', 'learning_rate': 'constant', 'momentum': 0, 'learning_rate_init': 0.2},
{'solver': 'sgd', 'learning_rate': 'constant', 'momentum': .9, 'nesterovs_momentum': False, 'learning_rate_init': 0.2},
{'solver': 'sgd', 'learning_rate': 'constant', 'momentum': .9, 'nesterovs_momentum': True, 'learning_rate_init': 0.2},
{'solver': 'sgd', 'learning_rate': 'invscaling', 'momentum': 0, 'learning_rate_init': 0.2},
{'solver': 'sgd', 'learning_rate': 'invscaling', 'momentum': .9, 'nesterovs_momentum': True, 'learning_rate_init': 0.2},
{'solver': 'sgd', 'learning_rate': 'invscaling', 'momentum': .9, 'nesterovs_momentum': False, 'learning_rate_init': 0.2},
{'solver': 'adam', 'learning_rate_init': 0.01}]
labels = ["constant learning-rate", "constant with momentum", "constant with Nesterov's momentum", "inv-scaling learning-rate", "inv-scaling with momentum", "inv-scaling with Nesterov's momentum", "adam"]
plot_args = [{'c': 'red', 'linestyle': '-'},
{'c': 'green', 'linestyle': '-'},
{'c': 'blue', 'linestyle': '-'},
{'c': 'red', 'linestyle': '--'},
{'c': 'green', 'linestyle': '--'},
{'c': 'blue', 'linestyle': '--'},
{'c': 'black', 'linestyle': '-'}]
def plot_on_dataset(X, y, ax, name):
ax.set_title(name)
X = MinMaxScaler().fit_transform(X)
mlps = []
if name == "digits":
max_iter = 15
else:
max_iter = 400
for label, param in zip(labels, params):
mlp = MLPClassifier(random_state=0, max_iter=max_iter, **param)
with warnings.catch_warnings():
warnings.filterwarnings("ignore", category=ConvergenceWarning, module="sklearn")
mlp.fit(X, y)
mlps.append(mlp)
for mlp, label, args in zip(mlps, labels, plot_args):
ax.plot(mlp.loss_curve_, label=label, **args)
fig, axes = plt.subplots(2, 2)
iris = datasets.load_iris()
X_digits, y_digits = datasets.load_digits(return_X_y=True)
data_sets = [(iris.data, iris.target), (X_digits, y_digits), datasets.make_circles(noise=0.2, factor=0.5, random_state=1), datasets.make_moons(noise=0.3, random_state=0)]
for ax, data, name in zip(axes.ravel(), data_sets,
['iris', 'digits', 'circles', 'moons']):
plot_on_dataset(*data, ax=ax, name=name)
fig.legend(ax.get_lines(), labels, ncol=3, loc="upper center")
plt.show() आउटपुट

