You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 03:24:59