1. 程式人生 > >Introduction to Machine Learning with Python/Python機器學習基礎教程_程式碼修改與更新

Introduction to Machine Learning with Python/Python機器學習基礎教程_程式碼修改與更新

2.3.1樣本資料集

--程式碼bug及修改意見

import matplotlib.pyplot as plt
import mglearn
X,y=mglearn.datasets.make_forge()
mglearn.discrete_scatter(X[:,0],X[:,1],y)
plt.legend(["class 0","class 1"],loc=4)
plt.xlabel("first feature")
plt.ylabel("second feature")
print(X.shape)

執行此段程式碼會出現錯誤。

檢視錯誤原因: scipy.misc 不能匯出 imread,於是上網查詢scipy.misc官方文件中imread,發現最新版imread有更新。scipy庫在1.0.0版本已經棄用imread這種表達,最新版改為imageio.imread。

錯誤原因解析

因mglearn庫需要from scipy.misc import imread,但是scipy庫在1.0.0版本已經棄用imread這種表達,最新版改為imageio.imread。scipy.misc 不能匯出 imread屬於版本更新問題。

解決方案: 開啟錯誤提示路徑中的py原始檔:plot_interactive_tree.py, 將其from scipy.misc import imread註釋,並新增為最新版的imread匯入方式。程式碼如下:

#from scipy.misc import imread
#imread is deprecated in SciPy 1.0.0, Use imageio.imread instead
from imageio import imread

儲存後執行一次程式碼,這時候會出現報錯。

Traceback (most recent call last):
  File "F:\CS\Python\Lib\site-packages\mglearn\plot_interactive_tree.py", line 8, in <module>
    from scipy.misc import imread
ImportError: cannot import name 'imread'

注意

因為mglearn庫中涉及相對方式的檔案呼叫,即from .tools import discrete_scatter,不能單獨執行該檔案檢查修改是否正確。應該在全域性下進行除錯。 正確方式是:在Jupyter Notebook(或測試終端)上除錯。

執行後發現plot_interactive_tree.py檔案中匯入imread錯誤消失了,說明我們修改正確。 但是還有plot_animal_tree.py出現同樣的錯誤提示。同理修改一下相應原始碼。

最後執行Jupyter Notebook,便可繪製出正確的散點圖。