Python 绘制matplotlib后的Sklearn回归拟合错误
已解决 问题似乎在于Anaconda安装的软件包和全局安装的pip软件包之间存在冲突(我安装了Python 3.8单机版)。我不是100%知道冲突的确切来源,但是在卸载Python 3.8和Anaconda(然后重新安装Anaconda和我需要的所有软件包)之后,Python 绘制matplotlib后的Sklearn回归拟合错误,python,numpy,matplotlib,scikit-learn,Python,Numpy,Matplotlib,Scikit Learn,已解决 问题似乎在于Anaconda安装的软件包和全局安装的pip软件包之间存在冲突(我安装了Python 3.8单机版)。我不是100%知道冲突的确切来源,但是在卸载Python 3.8和Anaconda(然后重新安装Anaconda和我需要的所有软件包)之后,ValueError不再发生。这让我相信,当我用pip安装一个包时,sklearn或它的一个依赖项是用pip全局安装的(意外地全局安装),并且这个包与Anaconda版本冲突,导致ValueError 我用Python创建了一个回归图
ValueError
不再发生。这让我相信,当我用pip安装一个包时,sklearn或它的一个依赖项是用pip全局安装的(意外地全局安装),并且这个包与Anaconda版本冲突,导致ValueError
我用Python创建了一个回归图,用sklearn拟合数据,然后在JupyterLab中用matplotlib绘制。问题是,每隔运行一次单元格,我就会在internal None的第4个参数中得到一个
ValueError:非法值
因此,如果我第一次运行该单元,所有操作都按预期进行,那么第二次运行它时,它将给出该错误(最后出现完整错误,代码如下)。请注意,只有当数据(x数组和y数组)的长度为9或更长时(无论单元格运行多少次,长度为8或更短都不会导致任何错误),才会发生这种情况(至少在我这边)
理想情况下,我希望通过在我的代码中添加一些东西或者如果我需要更新/降级一个包来修复他的问题。下面我按以下顺序列出了我的代码单元、错误消息、软件包版本(与anaconda一起安装)以及我尝试过但不起作用的解决方案
注意:ValueError仅在每隔一次运行时发生(因此第一次运行正常),如果我重新运行单元格或运行另一个基本相同但输入不同的单元格(x和y),ValueError将立即发生
(一)
在另一个stackoverflow上,有一条评论提到可能会出现坏的scipy
install,我尝试使用conda强制重新安装,但没有效果
另一个(在同一页上)提到了plt.show()
,但是从代码单元格中包含或排除它对错误的发生没有影响。我有完全相同的经验(使用PyCharm和no Anaconda)-再次运行有问题的行,它会工作
LinalError回溯(最近一次调用上次)
在里面
---->1 lm.装配(X_系列、y_系列)
~\pycharmprojects\jupyternotebooks\venv\lib\site packages\sklearn\linear\u model\u base.py适合(自身、X、y、样本重量)
545其他:
546 self.coef_,self.residence,self.rank,self.singular _=
-->547 linalg.lstsq(X,y)
548 self.coef=self.coef.T
549
lstsq中的~\pycharmprojects\jupyternotebooks\venv\lib\site packages\scipy\linalg\basic.py(a、b、cond、overwrite\u a、overwrite\u b、check\u finite、lapack\u驱动程序)
1219秒,假,假)
1220如果信息>0:
->1221上升直线误差(“SVD未在线性最小二乘中收敛”)
1222如果信息<0:
1223 raise VALUERROR('内部%s的第%d个参数中的值非法'
LinalError:SVD没有在线性最小二乘法中收敛我有完全相同的经验(使用PyCharm和no Anaconda)-再次运行有问题的行,它会工作
LinalError回溯(最近一次调用上次)
在里面
---->1 lm.装配(X_系列、y_系列)
~\pycharmprojects\jupyternotebooks\venv\lib\site packages\sklearn\linear\u model\u base.py适合(自身、X、y、样本重量)
545其他:
546 self.coef_,self.residence,self.rank,self.singular _=
-->547 linalg.lstsq(X,y)
548 self.coef=self.coef.T
549
lstsq中的~\pycharmprojects\jupyternotebooks\venv\lib\site packages\scipy\linalg\basic.py(a、b、cond、overwrite\u a、overwrite\u b、check\u finite、lapack\u驱动程序)
1219秒,假,假)
1220如果信息>0:
->1221上升直线误差(“SVD未在线性最小二乘中收敛”)
1222如果信息<0:
1223 raise VALUERROR('内部%s的第%d个参数中的值非法'
LinalError:SVD没有以线性最小二乘法收敛无法再现错误..您的软件包是同一版本吗?您是使用anaconda安装的吗?我将尝试创建一个新的anaconda虚拟环境,只安装基本功能(Jupyter Lab、numpy、matplotlib、scipy、scikit learn等)看看我安装的其他软件包是否有问题,这些软件包破坏了scikit learn或我在代码中使用的其他软件包的安装。如果是版本问题,你可以简单地更新你的软件包。我无法重现你的错误,这意味着代码没有问题。尝试重新安装:)结果不是版本问题,相反,我认为这是我的Python3.8安装和Anaconda安装之间的冲突,在这两个安装中,我安装了一个带有pip的包(但它没有使用Anaconda的虚拟环境的pip,而是使用了Python3.8安装全局pip)我想发生的事情是,我有两个不同版本的sklearn或它的一个依赖项,这导致了这个问题。无法重现错误。您的包是相同的版本吗?你是用anaconda安装的吗?我将尝试创建一个新的anaconda虚拟环境,只安装基础(Jupyter Lab、numpy、matplotlib、scipy、scikit learn等),看看我安装的其他软件包是否有问题,这些软件包破坏了scikit learn的安装或我在代码中使用的其他软件包之一。如果是版本问题,你可以简单地更新你的软件包。我无法重现您的错误,这意味着代码正常。尝试重新安装:)结果表明这不是版本问题,而是冲突
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