我正在 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]
添加回答
舉報
0/150
提交
取消