在featuretools中,如何自定义2列的基本体?

2024-09-30 01:23:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了如下自定义基本体

class Correlate(TransformPrimitive):
name = 'correlate'
input_types = [Numeric,Numeric]
return_type = Numeric
commutative = True
compatibility = [Library.PANDAS, Library.DASK, Library.KOALAS]

def get_function(self):
    def correlate(column1,column2):
        return np.correlate(column1,column2,"same")
    
    return correlate

然后我检查了下面的计算,以防万一

np.correlate(feature_matrix["alcohol"], feature_matrix["chlorides"],mode="same")

但以上功能结果与以下功能结果存在差异

你知道为什么这些是不同的吗

如果我的代码基本上是错的,请纠正我


Tags: 功能returndefnplibrarymatrixfeatureclass
1条回答
网友
1楼 · 发布于 2024-09-30 01:23:03

谢谢你的提问!通过使用TransformPrimitive作为基类,可以创建一个带有固定参数的自定义原语来计算这种关联。我将使用这些数据进行一个示例

import pandas as pd

data = [
    [0.40168819, 0.0857946],
    [0.06268886, 0.27811651],
    [0.16931269, 0.96509497],
    [0.15123022, 0.80546244],
    [0.58610794, 0.56928692],
]

df = pd.DataFrame(data=data, columns=list('ab'))
df.reset_index(inplace=True)
df
index         a         b
    0  0.401688  0.085795
    1  0.062689  0.278117
    2  0.169313  0.965095
    3  0.151230  0.805462
    4  0.586108  0.569287

函数np.correlate是参数mode=same时的转换,因此使用TransformPrimitive作为基类定义自定义原语

from featuretools.primitives import TransformPrimitive
from featuretools.variable_types import Numeric
import numpy as np


class Correlate(TransformPrimitive):
    name = 'correlate'
    input_types = [Numeric, Numeric]
    return_type = Numeric

    def get_function(self):
        def correlate(a, b):
            return np.correlate(a, b, mode='same')

        return correlate

DFS调用要求将数据结构化为EntitySet,然后可以使用自定义原语

import featuretools as ft

es = ft.EntitySet()

es.entity_from_dataframe(
    entity_id='data',
    dataframe=df,
    index='index',
)

fm, fd = ft.dfs(
    entityset=es,
    target_entity='data',
    trans_primitives=[Correlate],
    max_depth=1,
)

fm[['CORRELATE(a, b)']]
       CORRELATE(a, b)
index                 
0             0.534548
1             0.394685
2             0.670774
3             0.670506
4             0.622236

您应该在特征矩阵和np.correlate之间获得相同的值

actual = fm['CORRELATE(a, b)'].values
expected = np.correlate(df['a'], df['b'], mode='same')
np.testing.assert_array_equal(actual, expected)

您可以了解有关在链接页面中定义simple custom primitivesadvanced custom primitives的更多信息。如果你觉得这有帮助,请告诉我

相关问题 更多 >

    热门问题