机器学习 - 特征筛选与降维

特征决定了最优效果的上限,算法与模型只是让效果更逼近这个上限,所以特征工程与选择什么样的特征很重要!

以下是一些特征筛选与降维技巧

# -*- coding:utf-8 -*-
import scipy as sc
import libsvm_file_process as data_process
import numpy as np
from minepy import MINE
from sklearn.feature_selection import VarianceThreshold
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
from sklearn.feature_selection import f_regression
from sklearn.feature_selection import RFE
from sklearn.svm import SVR
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

class feature_select:
    """
    特征筛选方式:
        相关链接:http://scikit-learn.org/stable/modules/classes.html#module-sklearn.feature_selection
        皮尔逊相关性
        互信息
        单因素 - 卡方判断,F值,假正率
        方差过滤
        递归特征消除法 - 每次消除一个特征,依据是特征前面的系数
        基于模型(LR/GBDT等)的特征选择 SelectFromModel
            模型(LR/GBDT)必须有feature_importances_ 或 coef_这个属性
    降维:
        PCA(unsurperised):一般用于无监督情况下的降维,有监督的时候,也可以小幅降维 去除噪音,然后再使用LDA 降维

        LDA(surperised):本质上是一个分类器,在使用上,要求降低的维度要小于分类的维度
    """

    def __init__(self):
        self.data_path = "/trainData/libsvm2/"
        self.trainData = ["20180101"]
        # 计算互信息
        self.mine = MINE(alpha=0.6, c=15, est="mic_approx")
        # 方差过滤 一般用于无监督学习
        self.variance_filter = VarianceThreshold(threshold=0.1)
        # chi2 - 卡方检验; f_regression - f值; SelectFpr-假正率;等
        self.chi_squared = SelectKBest(f_regression, k=2)
        # 递归特征消除
        self.estimator = LogisticRegression()  # SVR(kernel="linear")
        self.selector = RFE(self.estimator, 5, step=1)
        # PCA 降维
        self.pca = PCA(n_components=5)
        # LDA 降维
        self.lda = LinearDiscriminantAnalysis(n_components=2)

    def select(self):
        for i in range(len(self.trainData)):
            generator = data_process.get_data_batch(self.data_path + self.trainData[i] + "/part-00000", 100000)
            labels, features = generator.next()
            # 方差过滤
            filter1 = self.variance_filter.fit_transform(features)
            print filter1.shape, features.shape
            print self.variance_filter.get_support()
            # 卡方检验
            filter2 = self.chi_squared.fit_transform(features, labels)
            print filter2.shape
            print self.chi_squared.get_support()
            # 递归特征消除(比较耗时 暂时先注释掉)
            # self.selector.fit(features, labels)
            # print self.selector.support_
            # PCA 降维
            transform1 = self.pca.fit_transform(features)
            print ‘transform1:‘, transform1
            # LDA降维
            self.lda.fit(features, labels)
            transform2 = self.lda.transform(features)
            print ‘transform2:‘, transform2
            for j in range(int(features.shape[1]) - 870):
                features_j = features[0:, j + 870: j + 871]
                self.mine.compute_score(features_j.flatten(), labels.flatten())
                # 计算互信息
                print self.mine.mic()
                # 计算皮尔逊系数
                print j, sc.stats.pearsonr(features_j.reshape(-1, 1), labels.reshape(-1, 1))

if __name__ == ‘__main__‘:
    feature_util = feature_select()
    feature_util.select()

原文地址:https://www.cnblogs.com/tengpan-cn/p/8445224.html

时间: 2024-07-30 10:56:27

机器学习 - 特征筛选与降维的相关文章

何为优秀的机器学习特征 zz

提供好的特征是机器学习任务中最重要的工作,那么何为优秀的机器学习特征?以及如何高效地组合这些特征? 以二分类问题为例,好的特征具有很好的区分性.例如学习任务是区分两种不同类型的狗:灰猎犬(Greyhound)和拉布拉多犬(Labrador).假设有身高和眼睛的颜色两种特征.一般而言,灰猎犬的平均身高要比拉布拉多犬要高一些,而狗的眼睛的颜色不取决于够的品种,因此可以认为“身高”这个特征就比“眼睛颜色”这个特征更有用,因为“眼睛颜色”这个特征没有告诉我们任何信息. 虽然灰猎犬的平均身高要比拉布拉多犬

机器学习 特征工程之特征选择

概念 首先看一下维基百科中关于特征选择的介绍: 在机器学习和统计学中,特征选择 也被称为变量选择.属性选择 或变量子集选择 .它是指:为了构建模型而选择相关特征(即属性.指标)子集的过程. 在机器学习中,每个特征对于目标类别的影响并不相同,所以需要从特征集中挑选出一组最具统计意义的特征子集,把其他无用数据删掉,达到降维的目的. 特征选择的目标是寻找最优特征子集.特征选择能剔除不相关(irrelevant)或冗余(redundant )的特征,从而达到减少特征个数,提高模型精确度,减少运行时间的目

【Machine Learning】机器学习の特征

绘制了一张导图,有不对的地方欢迎指正: 下载地址 机器学习中,特征是很关键的.其中包括,特征的提取和特征的选择.他们是降维的两种方法,但又有所不同: 特征抽取(Feature Extraction):Creatting a subset of new features by combinations of the exsiting features.也就是说,特征抽取后的新特征是原来特征的一个映射. 特征选择(Feature Selection):choosing a subset of all

特征工程之降维

真理之言 特征工程决定了机器学习的上限,而算法和模型只是逼近这个上限. 特征工程是什么 模型设计.算法训练之前的所有针对数据的准备工作,都称之为特征工程. 特征工程包含哪些工作 分析任务.获取数据.特征数据处理-异常值.空值.重复值.标准化等.特征处理-衍化.二值化.哑编码.降维等.这个过程中很多环节都要依赖高度的业务理解程度. 降维前面的都不再细说了,该如何已了然于心.至于降维,工作过程中用的最多的还是根据经验人工识别后手动删除或者赋不同权重.其实这是非常有效的方法:二八法则保留黄金特征,往往

机器学习之特征选择和降维的理解

在机器学习中,特征选择和降维感觉好像差不多,维度都降低了,今天和其他同学交流学习才知道其实不然,区别很大. 一般情况下,我们不会使用原始数据直接去进行训练,因为原始数据的特征明显,信息丰富,我们训练后的效果对于训练集非常好,而对于测试集来说就很差了.这就是过拟合问题. 当我们进行特征提取后,维度依然不减,为了解决过拟合问题,就使用降维(常用PCA)或特征选择. 对于特征选择,就是从众多个特征中选择部分特征作为训练集的特征,抛弃剩余部分的特征,这样维度就减少了,但是选中的这部分特征就是原始数据中的

用wxpython制作可以用于 特征筛选gui程序

现在我们已经用wxpython制作一个gui程序,目前它只能用于筛选有用的特征组.我们知道好的特征是非常重要,但有用的特征组是同等重要,这个工具可以使我们更加迅速的筛选有用的特征组合,大大节约我们的时间,而且操作起来非常简单. 这个工具的缺点是:从几十个特征中筛选出十个特征速度为最优,如果特征数增加则速度将变慢.这个工具目前只能用于筛选特征,并不能进行其他操作. 总而言之,虽能有些不足,但对于我们来说这又是一个巨大的进步.

机器学习特征表达——日期与时间特征做离散处理(数字到分类的映射),稀疏类分组(相似特征归档),创建虚拟变量(提取新特征) 本质就是要么多变少,或少变多

特征表达 接下来要谈到的特征工程类型虽然简单却影响巨大.我们将其称为特征表达. 你的数据并不一定总是理想格式.你需要考虑是否有必要通过另一种形式进行特征表达以获取有用信息. 日期与时间特征: 我们假设你拥有purchase_datetime特征.从中提取purchase_day_of_week与purchase_hour_of_day两项特征可能会更有用.你还可以进行观察聚类以创建诸如purchases_over_last_30_days这类特征. 数字到分类的映射: 假设你拥有years_in

机器学习 | 特征工程- 超参数调优方法整理

特征工程是机器学习当中很重要的部分,可以帮助我们设计.创建新特征,以便模型从中提取重要相关性.本文将记录并持续更新相关特征工程的工具包介绍,包括自动模型选择和超参数调优等各方面. · Featuretools Featuretools 是一个开源的Python 库,用于自动化特征工程.自动特征工程能够缩减时间成本,构建更优秀的预测模型,生成更有意义的特征,还能防止数据泄漏(data leakage). 目标任务:从数据表格集中获取所有的数据信息并整合到一张表中,再创建特征. 解决方案:采用深度特

[机器学习]特征归一化

re: 1. 机器学习之特征归一化(normalization); 2. 详解特征归一化; 3. zhihu; 4. 最大最小标准化与Z-score标准化; End 原文地址:https://www.cnblogs.com/happyamyhope/p/10179680.html