import matplotlib.pyplot as pl
%matplot inline
def learning_curves(X_train, y_train, X_test, y_test):
""" Calculates the performance of several models with varying sizes of training data.
The learning and testing error rates for each model are then plotted. """
print ("Creating learning curve graphs for max_depths of 1, 3, 6, and 10. . .")
# Create the figure window
fig = pl.figure(figsize=(10,8))
# We will vary the training set size so that we have 50 different sizes
sizes = np.rint(np.linspace(1, len(X_train), 50)).astype(int)
train_err = np.zeros(len(sizes))
test_err = np.zeros(len(sizes))
# Create four different models based on max_depth
for k, depth in enumerate([1,3,6,10]):
for i, s in enumerate(sizes):
# Setup a decision tree regressor so that it learns a tree with max_depth = depth
regressor = DecisionTreeRegressor(max_depth = depth)
# Fit the learner to the training data
regressor.fit(X_train[:s], y_train[:s])
# Find the performance on the training set
train_err[i] = performance_metric(y_train[:s], regressor.predict(X_train[:s]))
# Find the performance on the testing set
test_err[i] = performance_metric(y_test, regressor.predict(X_test))
# Subplot the learning curve graph
ax = fig.add_subplot(2, 2, k+1)
ax.plot(sizes, test_err, lw = 2, label = 'Testing Error')
ax.plot(sizes, train_err, lw = 2, label = 'Training Error')
ax.legend()
ax.set_title('max_depth = %s'%(depth))
ax.set_xlabel('Number of Data Points in Training Set')
ax.set_ylabel('Total Error')
ax.set_xlim([0, len(X_train)])
# Visual aesthetics
fig.suptitle('Decision Tree Regressor Learning Performances', fontsize=18, y=1.03)
fig.tight_layout()
fig.show()
ketika saya menjalankan fungsi learning_curves()
, itu menunjukkan:
UserWarning:C:\Users\Administrator\Anaconda3\lib\site-packages\matplotlib\figure.py:397: UserWarning: matplotlib saat ini menggunakan backend non-GUI, sehingga tidak dapat menampilkan gambar
Anda dapat mengubah backend yang digunakan oleh matplotlib dengan menyertakan:
import matplotlib
matplotlib.use('TkAgg')
sebelum baris 1 Anda import matplotlib.pyplot as pl
, karena harus diset terlebih dahulu. Lihat jawaban ini untuk informasi lebih lanjut.
(Ada opsi backend lain, tetapi mengubah backend menjadi TkAgg
bekerja untuk saya ketika saya memiliki masalah yang sama)
Pengujian dengan https://matplotlib.org/examples/animation/dynamic_image.html saya hanya menambahkan
%matplotlib notebook
yang tampaknya bekerja tetapi sedikit bergelombang. Saya harus menghentikan kernal sekarang dan kemudian :-(