График обучения (логистическая регрессия) на CDSW - Matplotlib строит несколько графиков вместо одного - PullRequest
0 голосов
/ 10 декабря 2018

До вчерашнего дня у меня не было проблем с построением конкретного графика, но с сегодняшнего дня я получаю несколько графиков вместо одного.

Код ниже предназначен для создания только одного графика, но каким-то образом я получаюмного разных.

Как я могу это исправить?

Обновление: мне удалось получить сюжет на Jupyter онлайн просто отлично, я думаю, что проблема может быть связана с Cloudera DataScience Workbench, есть идеи?

данные: http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data

Код, который я использую для построения

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn import preprocessing
from sklearn.model_selection import learning_curve
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline

df = pd.read_csv('http://archive.ics.uci.edu/ml/'
                 'machine-learning-databases/'
                 'breast-cancer-wisconsin/wdbc.data'
                 , header=None)

X = df.loc[:,2:].values
y = df.loc[:,1].values

le = preprocessing.LabelEncoder()

y = le.fit_transform(y)


X_train, X_test, y_train, y_test =\
train_test_split(X, y, test_size=0.20, \
                 stratify=y, random_state=1)



pipe_lr = make_pipeline(StandardScaler(), 
                        LogisticRegression(penalty='l2', 
                                           random_state=1))

train_sizes, train_scores, test_scores = \
learning_curve(estimator = pipe_lr, X = X_train,
               y = y_train,
               train_sizes=np.linspace(0.1, 1.0, 10),
               cv = 10, n_jobs = 1)

train_mean = np.mean(train_scores, axis = 1)
train_std = np.std(train_scores, axis = 1)
test_mean = np.mean(test_scores, axis = 1)
test_std = np.std(test_scores, axis = 1)

plt.plot(train_sizes, train_mean, color = 'blue',
         marker = 'o', markersize = 5, 
         label = 'training_accuracy')

plt.fill_between(train_sizes,
                 train_mean + train_std,
                 train_mean - train_std,
                 alpha = 0.5, color = 'blue')

plt.plot(train_sizes, test_mean, color = 'green',
         linestyle = '--', marker = 's', markersize = 5,
         label = 'validation accuracy')

plt.fill_between(train_sizes,
                 test_mean + test_std,
                 test_mean - test_std,
                 alpha = 0.15, color = 'green')
plt.grid()
plt.xlabel("Number of training samples")
plt.ylabel('Accuracy')
plt.legend(loc='lower right')
plt.ylim([0.85, 1.025])
plt.show()

enter image description here enter image description here

Использование Jupyter Online Я могу получить нужный график

Нужно ли что-то сбрасывать на matplotlib в CDSW?

enter image description here

Ответы [ 2 ]

0 голосов
/ 18 июля 2019

Cloudera Data Science Workbench обрабатывает каждую строку кода индивидуально (в отличие от ноутбуков, которые обрабатывают код на ячейку).Это означает, что если вашему графику требуется несколько команд, вы увидите неполные графики в рабочей среде при обработке каждой строки.

Чтобы обойти это поведение, оберните все свои команды построения в одну функцию Python.Затем Cloudera Data Science Workbench будет обрабатывать функцию в целом, а не как отдельные строки.Затем вы должны увидеть ваши графики, как и ожидалось.

Приведенная выше информация от https://www.cloudera.com/documentation/data-science-workbench/latest/topics/cdsw_visualize_report.html

0 голосов
/ 10 декабря 2018

Вам, вероятно, нужно быть более точным в отношении фигуры и осей, на которых вы строите график.

fig = pyplot.figure()
ax = fig.add_axes(1,1,1)
ax.plot(...)
ax.fill_between(...)

и так далее

...