如何在 python 的数据框中快速生成二次数值特征?
How to quickly generate quadratic numeric features in a dataframe in python?
使用 python 和标准库,我想为机器学习模型(分类器或回归器)快速生成交互功能。因为手动特征工程可能很耗时,所以我正在寻找可以半自动化某些过程的标准 python 库和方法。例如,要生成用于分析的二次特征,我有以下代码:
import pandas as pd
import numpy as np
df = pd.DataFrame({'a': ['abc', 'def', 'ghi', 'kjl'],
'b': [2, 5, 7, 8],
'c': [1.2, 3, 4, 6]})
num_cols = [col for col in df.columns if df[col].dtype in [np.int64, np.float64]]
quadratic_cols = [tuple(sorted((i,j))) for i in num_cols for j in num_cols]
quad_col_pairs = list(set(quadratic_cols))
for col_pair in quad_col_pairs:
col1, col2 = col_pair
quadratic_col = '{}*{}'.format(*col_pair)
df[quadratic_col] = df[col1] * df[col2]
我想简化这段代码,因为这种特征工程应该更加标准化和快速部署。 它也有不足之处,因为它需要更多代码行才能通过特征列的加法、减法或除法生成派生特征。
如何简化上面的代码?是否有标准 python 方法或库可以更有效地生成用于构建模型的派生特征?
尝试使用此方法获取所需的列并避免循环,
import itertools
L=df.select_dtypes(include=[np.number]).columns.tolist()
quad_col_pairs = list(itertools.combinations_with_replacement(L,2))
for col_pair in quad_col_pairs:
col1, col2 = col_pair
quadratic_col = '{}*{}'.format(*col_pair)
df[quadratic_col] = df[col1] * df[col2]
由于您使用 scikit-learn 明确标记它:您可以使用 PolynomialFeatures:
from sklearn.preprocessing import PolynomialFeatures
pf = PolynomialFeatures(include_bias=False)
pf.fit_transform(df._get_numeric_data())
#array([[ 2. , 1.2 , 4. , 2.4 , 1.44],
# [ 5. , 3. , 25. , 15. , 9. ],
# [ 7. , 4. , 49. , 28. , 16. ],
# [ 8. , 6. , 64. , 48. , 36. ]])
它还为您提供了使用高阶多项式和仅包含交互项的选项。
使用 python 和标准库,我想为机器学习模型(分类器或回归器)快速生成交互功能。因为手动特征工程可能很耗时,所以我正在寻找可以半自动化某些过程的标准 python 库和方法。例如,要生成用于分析的二次特征,我有以下代码:
import pandas as pd
import numpy as np
df = pd.DataFrame({'a': ['abc', 'def', 'ghi', 'kjl'],
'b': [2, 5, 7, 8],
'c': [1.2, 3, 4, 6]})
num_cols = [col for col in df.columns if df[col].dtype in [np.int64, np.float64]]
quadratic_cols = [tuple(sorted((i,j))) for i in num_cols for j in num_cols]
quad_col_pairs = list(set(quadratic_cols))
for col_pair in quad_col_pairs:
col1, col2 = col_pair
quadratic_col = '{}*{}'.format(*col_pair)
df[quadratic_col] = df[col1] * df[col2]
我想简化这段代码,因为这种特征工程应该更加标准化和快速部署。 它也有不足之处,因为它需要更多代码行才能通过特征列的加法、减法或除法生成派生特征。
如何简化上面的代码?是否有标准 python 方法或库可以更有效地生成用于构建模型的派生特征?
尝试使用此方法获取所需的列并避免循环,
import itertools
L=df.select_dtypes(include=[np.number]).columns.tolist()
quad_col_pairs = list(itertools.combinations_with_replacement(L,2))
for col_pair in quad_col_pairs:
col1, col2 = col_pair
quadratic_col = '{}*{}'.format(*col_pair)
df[quadratic_col] = df[col1] * df[col2]
由于您使用 scikit-learn 明确标记它:您可以使用 PolynomialFeatures:
from sklearn.preprocessing import PolynomialFeatures
pf = PolynomialFeatures(include_bias=False)
pf.fit_transform(df._get_numeric_data())
#array([[ 2. , 1.2 , 4. , 2.4 , 1.44],
# [ 5. , 3. , 25. , 15. , 9. ],
# [ 7. , 4. , 49. , 28. , 16. ],
# [ 8. , 6. , 64. , 48. , 36. ]])
它还为您提供了使用高阶多项式和仅包含交互项的选项。