簡體   English   中英

matplotlib繪圖后的Sklearn回歸擬合錯誤

[英]Sklearn Regression Fit error after matplotlib plotting

解決了

問題似乎是 Anaconda 安裝的軟件包和全局安裝的 pip 軟件包(我安裝了 Python 3.8 獨立版)之間的沖突。 我不是 100% 沖突的根源究竟是什么,但是在卸載 Python 3.8 和 Anaconda(然后使用我需要的所有軟件包重新安裝 Anaconda)之后, ValueError不再發生。 這讓我相信,當我使用 pip 安裝一個包(意外地全局安裝)時,sklearn 或其依賴項是通過 pip 全局安裝的,並且該包與導致ValueError的 Anaconda 版本沖突。


我在 Python 中創建了一個回歸圖,使用 sklearn 擬合數據,然后在 JupyterLab 中使用 matplotlib 進行繪圖。 問題是我會得到一個ValueError: illegal value in 4-th argument of internal None每隔一次單元格運行。

因此,如果我第一次運行單元格,一切都按預期工作,那么第二次運行它時會出現該錯誤(最后是完整錯誤,代碼下方)。 請注意,這僅在數據(x 數組和 y 數組)的長度為 9 或更長(長度為 8 或更少不會導致任何錯誤,無論多少次單元格運行)。

理想情況下,我希望通過向我的代碼添加一些內容或者如果我需要更新/降級軟件包來修復他的問題。 下面我按以下順序列出了我的代碼單元格、錯誤消息、軟件包版本(與 anaconda 一起安裝)以及我嘗試過但沒有奏效的解決方案。

注意:如果我重新運行單元格或運行另一個基本相同但輸入不同的單元格(x 和 y),則 ValueError 僅每隔一次運行(因此第一次運行正常運行)才會發生,ValueError 將發生。

1)

import matplotlib.pyplot as plt
import numpy as np

from sklearn.linear_model import LinearRegression

data_length = 9  # ValueErrors occur at 9 or greater (8 or less doesn't produce any errors)

x = np.random.rand(data_length)
x_train = x[:, np.newaxis]

y = np.random.rand(data_length)

model = LinearRegression().fit(x_train, y)

plt.figure(figsize=(8, 6))
plt.title('Example Regression that Produces a ValueError Every Other Run')

plt.yticks(fontsize=14)
plt.xticks(fontsize=14)

plt.xlabel('M03A 28% SVR Activity (%)', fontsize=14)
plt.ylabel('Reference Activity (%)', fontsize=14)

ax = plt.gca()

color=next(ax._get_lines.prop_cycler)['color']

plt.plot(x, model.predict(x[:, np.newaxis]), label='Line of Best Fit', color=color)

plt.text(
    .05,
    .5,
    'y = {}x {} {}\n$R^2$ = {}'.format(
        round(model.coef_[0], 2), '-' if model.intercept_ < 0 else '+', abs(round(model.intercept_, 2)), round(model.score(x_train, y), 2)),
    bbox=dict(facecolor='white', edgecolor=color),
    color=color,
    transform=ax.transAxes,
)

color=next(ax._get_lines.prop_cycler)['color']

plt.plot(x, y, 'o', color=color, label='Data')

plt.xlim(0, np.max(x)*1.1)
plt.ylim(0, np.max(y)*1.1)

plt.legend()
plt.show()  # removing this makes no difference
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-40-c3d4bd1a69a4> in <module>
      6 y = np.random.rand(data_length)
      7 
----> 8 model = LinearRegression().fit(x_train, y)
      9 
     10 plt.figure(figsize=(8, 6))

~\Anaconda3\lib\site-packages\sklearn\linear_model\_base.py in fit(self, X, y, sample_weight)
    545         else:
    546             self.coef_, self._residues, self.rank_, self.singular_ = \
--> 547                 linalg.lstsq(X, y)
    548             self.coef_ = self.coef_.T
    549 

~\AppData\Roaming\Python\Python38\site-packages\scipy\linalg\basic.py in lstsq(a, b, cond, overwrite_a, overwrite_b, check_finite, lapack_driver)
   1223             raise LinAlgError("SVD did not converge in Linear Least Squares")
   1224         if info < 0:
-> 1225             raise ValueError('illegal value in %d-th argument of internal %s'
   1226                              % (-info, lapack_driver))
   1227         resids = np.asarray([], dtype=x.dtype)

ValueError: illegal value in 4-th argument of internal None
​```
matplotlib -> 3.3.1
numpy -> 1.19.1
scikit-learn -> 0.23.2
scipy -> 1.5.0

在另一個 stackoverflow 頁面上,其中一條評論提到了scipy安裝損壞的scipy ,我嘗試用scipy強制重新安裝它,但沒有任何效果。

另一個(在同一頁面上)提到了plt.show()但是在代碼單元中包含或排除它對錯誤的發生沒有影響。

我有完全相同的經驗(使用 PyCharm 而沒有 Anaconda) - 再次運行違規行,它起作用了!!


----> 1 lm.fit(X_train,y_train) 中的 LinAlgError 回溯(最近一次調用)

~\\pycharmprojects\\jupyternotebooks\\venv\\lib\\site-packages\\sklearn\\linear_model_base.py in fit(self, X, y, sample_weight) 545 else: 546 self.coef_, self. 殘基,self.rank ,self.singular_ =
--> 547 linalg.lstsq(X, y) 548 self.coef_ = self.coef_.T 549

~\\pycharmprojects\\jupyternotebooks\\venv\\lib\\site-packages\\scipy\\linalg\\basic.py in lstsq(a, b, cond, overwrite_a, overwrite_b, check_finite, lapack_driver) 1219 cond, False, False) 1220 if info > 0 :-> 1221 raise LinAlgError("SVD 沒有收斂於線性最小二乘法") 1222 if info < 0: 1223 raise ValueError('內部 %s 的第 %d 個參數中的非法值'

LinAlgError:SVD 在線性最小二乘法中沒有收斂

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM