sklearn:如何获得多项式特征的系数
sklearn: how to get coefficients of polynomial features
我知道可以使用以下方法获得多项式特征作为数字:polynomial_features.transform(X)
。根据manual,对于度数的两个特征是:[1, a, b, a^2, ab, b^2]
。但是我如何获得高阶特征的描述呢? .get_params()
不显示任何功能列表。
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
.
对了,现在有更合适的功能:
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']
N.B。出于某种原因,你必须先适应 PolynomialFeatures 对象,然后才能使用 get_feature_names().
如果您是 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
对于这样的数据框
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
我知道可以使用以下方法获得多项式特征作为数字:polynomial_features.transform(X)
。根据manual,对于度数的两个特征是:[1, a, b, a^2, ab, b^2]
。但是我如何获得高阶特征的描述呢? .get_params()
不显示任何功能列表。
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
.
对了,现在有更合适的功能: 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']
N.B。出于某种原因,你必须先适应 PolynomialFeatures 对象,然后才能使用 get_feature_names().
如果您是 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
对于这样的数据框
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