自定义转换器在sklearn中的应用

我正在构建一个sklearn中的转换器,用于删除相关系数低于指定阈值的特征。

它在训练集上运行良好。然而,当我转换测试集时,测试集上的所有特征都消失了。我猜测转换器是在计算测试数据与训练标签之间的相关系数,由于这些相关系数都很低,所以它删除了所有特征。我该如何让它只在训练集上计算相关系数,并在转换时从测试集中删除这些特征呢?

class CorrelatedFeatures(BaseEstimator, TransformerMixin): #选择与响应标签相关系数高于阈值的特征    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]

回答:

您可以在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 selfdef transform(self, X, y=None):    return X[self.cols]

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注