python - 如何查看 sklearn.preprocessing.PolynomialFeatures 的效果?

标签 python scikit-learn preprocessor sympy

如果我有中等数量的基本特征,并从中生成中等阶的多项式特征,那么要知道特征数组 preprocess_XX 的哪一列对应于哪个转换可能会有点困惑的基本特征。

我曾经用旧版本的 sklearn(可能是 0.14?)做类似下面的事情:

import numpy as np
from sympy import Symbol
from sklearn.preprocessing import PolynomialFeatures
poly = PolynomialFeatures(4)
x1 = Symbol('x1')
x2 = Symbol('x2')
x3 = Symbol('x3')
XX = np.random.rand(1000, 3)  # replace with the actual data array
preprocess_symXX = poly.fit_transform([x1, x2, x3])
preprocess_XX = poly.fit_transform(XX)
print preprocess_symXX

这太棒了。它会产生像 [1, x1, x2, x3, x1**2, ... ] 这样的输出,这会让我知道 preprocess_XX 列的多项式函数实际来自。

但现在当我这样做时,它会提示 TypeError: can't convert expression to float。引发此异常的原因是 sklearn.utils.validation 中名为 check_array() 的函数,它试图将输入转换为 poly.fit_transform()dtype=float

关于如何查看fit_transform() 输出中的哪一列对应的基本特征的多项式,您有什么建议吗?,现在sympy不再似乎可以与 fit_transform 一起使用?

最佳答案

使用 poly.powers_ 获得权力。然后您可以将其转换为人类可读的内容,如下所示:

import numpy as np
from sklearn.preprocessing import PolynomialFeatures

X = np.random.rand(1000, 3)

poly = PolynomialFeatures(4)
Y = poly.fit_transform(X)

features = ['X1','X2','X3']

print(poly.powers_)

for entry in poly.powers_:
    newFeature = []
    for feat, coef in zip(features, entry):
        if coef > 0:
            newFeature.append(feat+'**'+str(coef))
    if not newFeature:
        print(1) # If all powers are 0
    else:
        print(' + '.join(newFeature))

打印(在打印 poly.powers_ 之后):

1
X1**1
X2**1
X3**1
X1**2
X1**1 + X2**1
X1**1 + X3**1
X2**2
X2**1 + X3**1
X3**2
X1**3
X1**2 + X2**1
X1**2 + X3**1
X1**1 + X2**2
X1**1 + X2**1 + X3**1
X1**1 + X3**2
X2**3
X2**2 + X3**1
X2**1 + X3**2
X3**3
X1**4
X1**3 + X2**1
X1**3 + X3**1
X1**2 + X2**2
X1**2 + X2**1 + X3**1
X1**2 + X3**2
X1**1 + X2**3
X1**1 + X2**2 + X3**1
X1**1 + X2**1 + X3**2
X1**1 + X3**3
X2**4
X2**3 + X3**1
X2**2 + X3**2
X2**1 + X3**3
X3**4

关于python - 如何查看 sklearn.preprocessing.PolynomialFeatures 的效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34869851/

相关文章:

python - 在 Python 中流式传输 Twitter 数据并保存到 csv

python - 如何使用 Numpy.concatenate 连接空数组?

python - Seaborn - 为零计数类别压缩 violinplot

python - 如何修正 sklearn.naive_bayes 中的 sample_weight?

c - IAR Pragma data_alignment 不工作

c++ - 与 C 代码相比,为什么 C++ 代码不需要 "#define _POSIX_C_SOURCE 200809L"?

python - DataFrame行和前一行计算

python - sklearn 上的分类报告是否要求输入 x 和 y 的长度相同?

python - Python中的主成分分析(PCA)

c - 宏内容的长度有限制吗?