Ridge.fit报错:意外关键字参数'sym_pos',求解决方案
解决Ridge回归报错TypeError: solve() got an unexpected keyword argument 'sym_pos'
错误原因
这个报错是scikit-learn与numpy版本不兼容导致的:旧版本scikit-learn(如0.24.x及更早)在Ridge回归的底层实现里,调用numpy的linalg.solve时用到了sym_pos参数,但numpy 1.24+版本已经移除了这个参数,两者搭配就会触发该错误。另外,原代码里的load_boston在sklearn 1.0+版本已被移除,升级后还需要处理数据集的替换问题。
修复方案
选以下任意一种方式即可:
方式1:版本适配
- 降低numpy版本到1.23.x及以下,执行命令:
pip install numpy==1.23.5 - 或者升级scikit-learn到1.0+版本(推荐,同时解决数据集移除问题):
pip install --upgrade scikit-learn
方式2:替换数据集(升级sklearn后)
升级sklearn后,load_boston无法使用,需要用fetch_openml获取波士顿房价数据,修改load_data函数如下:
def load_data(): from sklearn.datasets import fetch_openml boston = fetch_openml(name='boston', version=1, as_frame=False) X, y = boston.data, boston.target feature_names = boston.feature_names return X, y, feature_names
完整修复代码
以下是适配新版本sklearn后的完整可运行代码:
import matplotlib.pyplot as plt import pandas as pd import numpy as np from sklearn.linear_model import Ridge from sklearn.linear_model import Lasso from sklearn.datasets import fetch_openml def load_data(): boston = fetch_openml(name='boston', version=1, as_frame=False) X, y = boston.data, boston.target feature_names = boston.feature_names return X,y,feature_names def Ridge_regression(X, y): ridge_reg = Ridge(alpha=10) ridge_reg.fit(X,y) return ridge_reg def Lasso_regression(X, y): lasso_reg = Lasso(alpha=10) lasso_reg.fit(X,y) return lasso_reg def plot_graph(coef, title): fig = plt.figure() plt.ylim(-1,1) plt.title(title) coef.plot(kind='bar') plt.savefig(f"{title}_result.png") # 修改文件名避免两张图互相覆盖 def main(): X,y,feature_names = load_data() ridge_reg = Ridge_regression(X, y) lasso_reg = Lasso_regression(X, y) ridge_coef = pd.Series(ridge_reg.coef_, feature_names).sort_values() print("Ridge beta_i\n", ridge_coef) lasso_coef = pd.Series(lasso_reg.coef_, feature_names).sort_values() print("Lasso beta_i\n", lasso_coef) plot_graph(ridge_coef, 'Ridge') plot_graph(lasso_coef, 'Lasso') if __name__=="__main__": main()
内容的提问来源于stack exchange,提问作者comnetdat
相关产品推荐
相关产品推荐

