使用LogisticRegression.fit时遇AttributeError:numpy无matrix属性
问题:Numpy 1.26.2下Scikit-learn报错
AttributeError: module 'numpy' has no attribute 'matrix' 问题场景
运行以下LogisticRegression相关代码时触发错误:
import pandas as pd import matplotlib import matplotlib.pyplot as plt import numpy as np %matplotlib inline from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report, accuracy_score from sklearn.metrics import confusion_matrix from sklearn.linear_model import LogisticRegression from sklearn import metrics import seaborn as sns from numpy import matrix logisticreg = LogisticRegression() logisticreg.fit(xtrain, ytrain)
报错详情
File ...\Python\Python312\Lib\site-packages\sklearn\linear_model\_logistic.py:1303, in LogisticRegression.fit(self, X, y, sample_weight) 1300 else: 1301 n_threads = 1 -> 1303 fold_coefs_ = Parallel(n_jobs=self.n_jobs, verbose=self.verbose, prefer=prefer)( 1304 path_func( 1305 X, 1306 y, 1307 pos_class=class_, 1308 Cs=[C_], ... -> 1871 if isinstance(a, np.matrix): 1872 return asarray(a).ravel(order=order) 1873 else: AttributeError: module 'numpy' has no attribute 'matrix'
额外测试
当前使用Numpy版本1.26.2,尝试运行LinearRegression示例代码,仍出现相同错误:
import numpy as np from sklearn.linear_model import LinearRegression X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]]) # y = 1 * x_0 + 2 * x_1 + 3 y = np.dot(X, np.array([1, 2])) + 3 reg = LinearRegression().fit(X, y) reg.score(X, y) reg.coef_ reg.intercept_ reg.predict(np.array([[3, 5]]))
解决方案
- 核心原因:Numpy 1.26.x版本正式移除了
np.matrix相关旧API,而你的scikit-learn版本过旧,尚未适配这一变更。 - 修复步骤:
- 升级scikit-learn到兼容Numpy 1.26+的版本,执行命令:
pip install --upgrade scikit-learn - 删除代码中多余的
from numpy import matrix行,现在推荐使用np.array替代所有np.matrix的使用场景。
- 升级scikit-learn到兼容Numpy 1.26+的版本,执行命令:
内容的提问来源于stack exchange,提问作者Apple
相关产品推荐
相关产品推荐

