【问题标题】:Scikit - Format Output of Polynomial RegressionScikit - 多项式回归的格式输出
【发布时间】:2025-12-24 04:10:10
【问题描述】:

我使用 scikit learn 进行多项式回归并尝试解释系数。但不知何故 scikit 不会格式化输出。所以它看起来像这样:

[ 0.,0.95545289,0.,0.20682341,-0.,0.,-0.,-0.,0.,0.,0.,-0.,0.,-0.,-0.,]

如何将系数映射到创建的特征? 到目前为止我的代码:

poly = PolynomialFeatures(interaction_only=True)
X_ = poly.fit_transform(X_train_minmax)
X_test1 = poly.fit_transform(X_test_minmax)

lasso_model = linear_model.LassoCV(cv = 10, copy_X = True, normalize = False)
lasso_fit = lasso_model.fit(X_, y_train)
lasso_path = lasso_model.score(X_, y_train)
y_pred= lasso_model.predict(X_test1)
lasso_model.coef_

谢谢!

【问题讨论】:

  • 你试过zip(X_.columns, lasso_model.coef_)吗?
  • 您好,感谢您的回复。不幸的是 X_ 不是 DataFrame 而是数组表示中的矩阵。所以 .columns 在这里不起作用

标签: python scikit-learn regression non-linear-regression


【解决方案1】:

根据the docs中的PolynomialFeatures

powers_[i, j] 是第 i 个输出中第 j 个输入的指数。

所以这样的事情应该可以工作:

columns = ['_'.join(['x{var}^{exp}'.format(var=var, exp=exp) for var, exp in enumerate(a[i, :])]) for i in range(a.shape[0])
zip(columns, lasso_model.coef_)

重要的一行是第一行。 :)

【讨论】:

    【解决方案2】:

    假设您正在运行二次多项式回归。所以,

    poly = PolynomialFeature(degree =2)  #generate a polynomial object
    X_ = poly.fit_transform(input_data)  #ndarray to be used for regression.
    

    在哪里input_data = [X1,X2,X3,...] #actually ndarray represented as a List for simplicity

    要在列表Lasso.coef_ 中查找存在(例如)X1 因子的索引,即 X1、X1**2、X1*X2、X1*X3、...X1*Xn,请使用以下命令

    list_of_index = []
    

    for j in range(len(input_data)):#iterate over each input, X1, X2, etc temp =[] for i in X_.shape[1]:#iterate over the polynomial ndarray object columnwise if poly.powers_[i,j] != 0: temp.append(i) list_of_index.append(temp) list_of_index 将是一个列表列表,其中包含具有 X1、X2 等因素的位置索引。

    例子:

    对于仅使用 X1 和 X2 的二阶回归, 生成的 ndarray 将是 [1 , X1, X2, X1**2, X1*X2, X2**2]

    list_of_lists 将是 [[1,3,4],[2,4,5]]

    您可以使用它来访问lasso_model.coef_

    【讨论】: