特征选择模块 simple_ml.feature_select


Filter方法

from simple_ml.base.base_model import BaseTransform
from simple_ml.base.base_enum import FilterType


class Filter(BaseTransform):

    def __init__(self, top_k, filter_type=FilterType.var):
        pass

初始化

  名称 类型 描述
Parameters: filter_type FilterType Filter类型
  tok_k int 希望取几个特征

类方法

def fit(self, x, y=None)

拟合特征

  名称 类型 描述
Parameters: x np.2darray 特征
  y np.array 标签,可以没有
Returns:   Void  

2.

def transform(self, x)

转换特征,转为特征选择之后的形式,输出维度为(n, top_k),n为样本数,top_k为初始化值

  名称 类型 描述
Parameters: x np.2darray 特征
Returns:   np.2darray 特征选择后的数组

3.

def fit_transform(self, x, y)

拟合并且转换为处理后的数组

  名称 类型 描述
Parameters: x np.2darray 特征
  y np.array 标签,可以没有
Returns:   np.2darray 特征选择后的数组

类属性

None


Embedded方法

Embedded特征选择方法通过模型自身的特性进行选择,simple_ml提供了两种特征选择方法

注: Lasso用于离散特征,GBDT用于连续特征

from simple_ml.base.base_model import BaseTransform
from simple_ml.base.base_enum import EmbeddedType

class Embedded(BaseTransform):

    def __init__(self, top_k, embedded_type=EmbeddedType.Lasso):
        pass    

初始化

  名称 类型 描述
Parameters: embedded_type EmbeddedType Embedded类型
  tok_k int 希望取几个特征

类方法

1.

def fit(self, x, y=None)

拟合特征

  名称 类型 描述
Parameters: x np.2darray 特征
  y np.array 标签,可以没有
Returns:   Void  

2.

def transform(self, x)

转换特征,转为特征选择之后的形式,输出维度为(n, top_k),n为样本数,top_k为初始化值

  名称 类型 描述
Parameters: x np.2darray 特征
Returns:   np.2darray 特征选择后的数组

3.

def fit_transform(self, x, y)

拟合并且转换为处理后的数组

  名称 类型 描述
Parameters: x np.2darray 特征
  y np.array 标签,可以没有
Returns:   np.2darray 特征选择后的数组

类属性

None

Example

from simple_ml.feature_select import Filter, Embedded
from simple_ml.base.base_enum import FilterType, EmbeddedType
import numpy as np
from simple_ml.classify_data import get_wine


x, y = get_wine()
x = x[(y == 0) | (y == 1)]
y = y[(y == 0) | (y == 1)]

_filter = Filter(FilterType.corr, 3)
x_filter = _filter.fit_transform(x, y)
print(x_filter.shape)

_filter = Filter(FilterType.var, 3)
x_filter = _filter.fit_transform(x, y)
print(x_filter.shape)

_filter = Filter(FilterType.entropy, 3)
x_filter = _filter.fit_transform(x, y)
print(x_filter.shape)

embedded = Embedded(3, EmbeddedType.Lasso)
x_embedded = embedded.fit_transform(x, y)
print(x_embedded.shape) # lasso后稀疏到只有两个值非0,因此只输出了两个特征

# GBDT暂时只支持离散特征
embedded = Embedded(3, EmbeddedType.GBDT)
x = np.random.choice([0, 1], 50).reshape(10, 5)
y = np.random.rand(10)
x_embedded = embedded.fit_transform(x, y)
print(x_embedded, y)

返回主页