为了账号安全,请及时绑定邮箱和手机立即绑定

sklearn 中的自定义转换器

sklearn 中的自定义转换器

DIEA 2021-11-09 16:35:55
我正在 sklearn 中构建一个转换器,它会删除相关系数低于指定阈值的特征。它适用于训练集。但是,当我转换测试集时。测试集上的所有特征都消失了。我假设 Transformer 正在计算测试数据和训练标签之间的相关性,并且由于这些都是低的,因此它正在删除所有功能。我如何让它只计算训练集上的相关性并从转换的测试集中删除这些特征?class CorrelatedFeatures(BaseEstimator, TransformerMixin): #Selects only features that have a correlation coefficient higher than threshold with the response label    def __init__(self, response, threshold=0.1):        self.threshold = threshold        self.response = response    def fit(self, X, y=None):        return self    def transform(self, X, y=None):        df = pd.concat([X, self.response], axis=1)        cols = df.columns[abs(df.corr()[df.columns[-1]]) > self.threshold].drop(self.response.columns)        return X[cols]
查看完整描述

1 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

您计算并存储该相关性和要删除的列fit(),然后transform()只需转换这些列。


像这样的东西:


....

....


def fit(self, X, y=None):

    df = pd.concat([X, self.response], axis=1)

    self.cols = df.columns[abs(df.corr()[df.columns[-1]]) > self.threshold].drop(self.response.columns)

    return self

def transform(self, X, y=None):

    return X[self.cols]


查看完整回答
反对 回复 2021-11-09
  • 1 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信