首先,我有一个非线性模型,我想用它执行套索回归:
我这样做的方法是创建一个包含变量向量的所有可能组合的新数据框,它应该 = J + J^2
在我的数据中,我有 J=19,即 19 个预测变量,所以我希望总共产生 171 列。使用它,我可以使用 Sklearn 执行套索回归。
到目前为止,我的方法是:
for j in df2.iteritems():
for k in df2.iteritems():
df3[j*k] = df2[j]*df2[k]
这个解决方案不起作用,但它是我思考过程的一个例子。我也不太确定如何在循环中每次重命名列,因此每列都有唯一的名称。
答案 0 :(得分:1)
如果我正确理解您的要求,那么这可能对您有用。如果没有,那么也许您可以使用这些概念来满足您的需求。
用您的数字预测值创建一个列表:(我通过 range()
创建了一些代表)
p19 = range(10,29)
从该列表中生成所有组合:
combs = list(itertools.combinations(p19, 2))
对每个数字组合执行您需要的操作:(我只是将它们相乘)
col_vals = [x[0]*x[1] for x in combs]
使用预测变量列表,创建一个带有一些列标题的 DF:
df_p = pd.DataFrame(p19).transpose().rename(columns = lambda x: 'P' + str(x+1))
使用计算出的列值,创建一个带有一些列标题的值 DF:
df_c = pd.DataFrame(col_vals).transpose().rename(columns = lambda x: 'C' + str(x+1))
然后组合两个DF:
df = pd.concat([df_p,df_c], axis=1)