File size: 1,036 Bytes
8d6ba76
cbd8f49
8d6ba76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from sklearn.base import BaseEstimator, TransformerMixin
import numpy as np

class RemoveZeroVarianceFeatures(BaseEstimator, TransformerMixin):
    def fit(self, X, y=None):
        self.non_zero_variance_features_ = np.var(X, axis=0) > 0
        return self
    
    def transform(self, X, y=None):
        return X[:, self.non_zero_variance_features_]

class RemoveAutocorrelatedFeatures(BaseEstimator, TransformerMixin):
    def __init__(self, threshold=0.95):
        self.threshold = threshold
    
    def fit(self, X, y=None):
        corr_matrix = np.corrcoef(X, rowvar=False)
        upper_triangle_indices = np.triu_indices_from(corr_matrix, k=1)
        self.to_remove_ = set()
        
        for i, j in zip(*upper_triangle_indices):
            if abs(corr_matrix[i, j]) > self.threshold:
                self.to_remove_.add(j)
        
        return self
    
    def transform(self, X, y=None):
        features_to_keep = [i for i in range(X.shape[1]) if i not in self.to_remove_]
        return X[:, features_to_keep]