数据筛选特征方法-方差法

在数理统计中,方差是测算随机变量离散趋势最重要、最常用的指标,方差是各变量值与其均值离差平方的平均数,它是测算数值型数据离散程度的最重要的方法。

当数据分布比较集中时,各个数据与平均数的差的平方和较小,当数据分布比较分散(即数据在平均数附近波动较大)时,各个数据与平均数的差的平方和较大,方差就较大。因此方差越大,数据的波动越大;方差越小,数据的波动就越小,因此需要优先消除方差为0或较小的特征。

sklearn库中的用于特征选择的函数,使用VarianceThreshold法,先要计算各个特征的方差,然后根据阈值,剔除方差大于阈值的特征。

# -*- coding:utf-8 -*-

import numpy as np
import pandas as pd
from sklearn.feature_selection import VarianceThreshold

class VarianceSelect():
    def __init__(self):
        pass
    # 将数据进行0-1标准化
    def MaxMinTransform(self,data):
        for var_name in data.columns:
            mi = data[var_name].min()
            ma = data[var_name].max()
            data[var_name] = data[var_name].apply(lambda x: (x - mi) / (ma - mi))
        return data
    # 方差特征筛选
    def VarianceFunc(self,data_final):
        selector = VarianceThreshold(threshold=0.01)
        result_select = selector.fit_transform(data_final)
        result_support = selector.get_support(indices=True)
        return result_select,result_support
    # 加载及调用
    def load_transform(self):
        path = r'E:\programGao\csdnProgram'
        data = pd.read_excel(path + '/dataset.xlsx', 'all')
        print('查看初始数据 : ', data.head())
        print('查看各变量均值方差 : ', np.mean(data.iloc[:, 2:]), np.var(data.iloc[:, 2:]))

        data_final = self.MaxMinTransform(data.iloc[:, 2:])
        print('查看0-1标准化后数据 : ', data_final.head())
        print('标准化后查看各变量均值方差 : ', np.mean(data_final), np.var(data_final))

        result_select, result_support = self.VarianceFunc(data_final)
        print('筛选方差大于0.01的特征 : ', result_select)
        print('方差筛选后保留特征索引 : ', result_support)

if __name__ == '__main__':
    VarianceSelect().load_transform()

  • 筛选后的结果

数据筛选特征方法-方差法_第1张图片

你可能感兴趣的:(数据处理篇,python,机器学习,数据挖掘,数据分析)