[英]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.