如何获取多项式特征的系数

20
我知道可以通过使用polynomial_features.transform(X)来获得多项式特征作为数字。根据manual,对于二次多项式,特征是:[1, a, b, a^2, ab, b^2]。但是,如何获得更高阶的特征描述呢?.get_params()没有显示任何特征列表。
3个回答

38

顺便提一下,现在有更适合的函数了:PolynomialFeatures.get_feature_names

from sklearn.preprocessing import PolynomialFeatures
import pandas as pd
import numpy as np

data = pd.DataFrame.from_dict({
    'x': np.random.randint(low=1, high=10, size=5),
    'y': np.random.randint(low=-1, high=1, size=5),
})

p = PolynomialFeatures(degree=2).fit(data)
print p.get_feature_names(data.columns)

这将输出如下内容:

['1', 'x', 'y', 'x^2', 'x y', 'y^2']

请注意,在使用get_feature_names()之前,你必须先适配你的PolynomialFeatures对象。

如果你像我一样热爱Pandas,你可以轻松地用以下方式创建包含所有新特征的DataFrame:

features = DataFrame(p.transform(data), columns=p.get_feature_names(data.columns))
print features

结果会看起来像这样:

     1    x    y   x^2  x y  y^2
0  1.0  8.0 -1.0  64.0 -8.0  1.0
1  1.0  9.0 -1.0  81.0 -9.0  1.0
2  1.0  1.0  0.0  1.0   0.0  0.0
3  1.0  6.0  0.0  36.0  0.0  0.0
4  1.0  5.0 -1.0  25.0 -5.0  1.0

1
函数get_feature_names已经被弃用,请使用get_feature_names_out代替。 - juandesant

7
import numpy as np
from sklearn.preprocessing import PolynomialFeatures

X = np.array([2,3])

poly = PolynomialFeatures(3)
Y = poly.fit_transform(X)
print Y
# prints [[ 1  2  3  4  6  9  8 12 18 27]]
print poly.powers_

这段代码将会输出:
[[0 0]
 [1 0]
 [0 1]
 [2 0]
 [1 1]
 [0 2]
 [3 0]
 [2 1]
 [1 2]
 [0 3]]

因此,如果第i个单元格为(x,y),则意味着Y [i] =(a ** x)*(b ** y)。 例如,在代码示例中,[2 1]等于(2 ** 2)*(3 ** 1)= 12

0

对于这样的数据框

import pandas as pd
import numpy as np
from sklearn.preprocessing import PolynomialFeatures

data = pd.DataFrame({
    'x': np.random.randint(low=1, high=10, size=5),
    'y': np.random.randint(low=-1, high=1, size=5)})

这是我是如何做到的,

PolyFeats = PolynomialFeatures(degree=2)
dfPoly = pd.DataFrame(
    data=PolyFeats.fit_transform(data), 
    columns=PolyFeats.get_feature_names(data.columns))

要得到类似这样的输出,
In [50]: dfPoly
Out[50]: 
     1    x    y   x^2  x y  y^2
0  1.0  5.0  0.0  25.0  0.0  0.0
1  1.0  6.0 -1.0  36.0 -6.0  1.0
2  1.0  1.0 -1.0   1.0 -1.0  1.0
3  1.0  5.0 -1.0  25.0 -5.0  1.0
4  1.0  6.0  0.0  36.0  0.0  0.0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接