关于特征工程的一些学习、思考与错误的纠正

特征工程的整体思路:

1. 对于特征的理解、评估

2. 特征处理:

  2.1 特征处理

    2.1.1 特征清洗

      清洗异常、采样

    2.1.2 预处理

      单特征情况:归一化、离散化、哑变量编码、缺失值填充等。数据变换例如log服从正态分布。

      多特征情况:

        降维:PCA、LDA(这个不太了解、待学习)

        特征选择:三种大方法,Filter——x与y之间的关联,Wrapper——目标函数检验(MSE),Embedded——机器学习方法,正则化、决策树、深度学习。

3. 特征监控

有效性分析和监控。

Python相关:特征工程主要使用sklearn处理。

预处理

所谓无量纲化:

1. 平常所说的标准化就是无量纲化的一种。

from sklearn.preprocessing import StandardScaler

#标准化,返回值为标准化后的数据
StandardScaler().fit_transform(iris.data)

2. 区间缩放,我记得吴恩达的机器学习教程就是这个方法。

from sklearn.preprocessing import MinMaxScaler

#区间缩放,返回值为缩放到[0, 1]区间的数据
MinMaxScaler().fit_transform(iris.data)

注意:标准化与归一化的区别,标准化按列处理,归一化按行处理。

二值化:

from sklearn.preprocessing import Binarizer

#二值化,阈值设置为3,返回值为二值化后的数据
Binarizer(threshold=3).fit_transform(iris.data)

哑编码:

from sklearn.preprocessing import OneHotEncoder

#哑编码,对IRIS数据集的目标值,返回值为哑编码后的数据
OneHotEncoder().fit_transform(iris.target.reshape((-1,1)))

缺失值填充:

这里写一个填充方法的备忘,其实个人认为相比于均值填充,众数和中位数填充更加准确

from numpy import vstack, array, nan
from sklearn.preprocessing import Imputer

#缺失值计算,返回值为计算缺失值后的数据
#参数missing_value为缺失值的表示形式,默认为NaN
#参数strategy为缺失值填充方式,默认为mean(均值)
Imputer().fit_transform(vstack((array([nan, nan, nan, nan]), iris.data)))

数据变换:

在吴恩达的机器学习非常明确的讲过这个理论,其实就是对原有feature进行“升维”的变换,也就是提升幂次。来达到突出更多特征的目的。

from sklearn.preprocessing import PolynomialFeatures

#多项式转换
#参数degree为度,默认值为2
PolynomialFeatures().fit_transform(iris.data)

特征选择的思路:

方差法,如果特征不发散即方差接近0,直接丢掉。

特征与目标的相关性,相关性高的自然就与目标联系紧密,选择优先度高。

特征选择方法:

Filter(过滤法):发散性和相关性是评分指标,设定阈值选择特征的个数。

方差:

from sklearn.feature_selection import VarianceThreshold

#方差选择法,返回值为特征选择后的数据
#参数threshold为方差的阈值
VarianceThreshold(threshold=3).fit_transform(iris.data)

相关系数:

from sklearn.feature_selection import SelectKBest
from scipy.stats import pearsonr

#选择K个最好的特征,返回选择特征后的数据
#第一个参数为计算评估特征是否好的函数,该函数输入特征矩阵和目标向量,输出二元组(评分,P值)的数组,数组第i项为第i个特征的评分和P值。在此定义为计算相关系数
#参数k为选择的特征个数
SelectKBest(lambda X, Y: array(map(lambda x:pearsonr(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)

卡方检验:

from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2

#选择K个最好的特征,返回选择特征后的数据
SelectKBest(chi2, k=2).fit_transform(iris.data, iris.target)

互信息法:

from sklearn.feature_selection import SelectKBest
 from minepy import MINE

 #由于MINE的设计不是函数式的,定义mic方法将其为函数式的,返回一个二元组,二元组的第2项设置成固定的P值0.5
 def mic(x, y):
     m = MINE()
     m.compute_score(x, y)
     return (m.mic(), 0.5)

#选择K个最好的特征,返回特征选择后的数据
SelectKBest(lambda X, Y: array(map(lambda x:mic(x, Y), X.T)).T, k=2).fit_transform(iris.data, iris.target)

Wrapper(包装法):目标函数评分,选择或派出若干特征。

递归特征消除法:

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

#递归特征消除法,返回特征选择后的数据
#参数estimator为基模型
#参数n_features_to_select为选择的特征个数
RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)

Embedded(集成法):机器学习方法,得到的特征权值系数用来进行特征选择。

feature_selection的方法之前使用过,不过没有针对性,L1惩罚项代码:

from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression

#带L1惩罚项的逻辑回归作为基模型的特征选择
SelectFromModel(LogisticRegression(penalty="l1", C=0.1)).fit_transform(iris.data, iris.target)

降维:

这个之前尝试过,但是不知道出了什么错误或者使用的方法不对,结果奇差。还需学习。

PCA:让映射后的样本具有最大的发散性,无监督降维

LDA:让映射后的岩本有最好的分类性能,有监督降维

from sklearn.decomposition import PCA

#主成分分析法,返回降维后的数据
#参数n_components为主成分数目
PCA(n_components=2).fit_transform(iris.data)
from sklearn.lda import LDA

#线性判别分析法,返回降维后的数据
#参数n_components为降维后的维数
LDA(n_components=2).fit_transform(iris.data, iris.target)

参考资料:http://www.cnblogs.com/jasonfreak/p/5448385.html

感谢jasonfreak的博客给我的启发。

原文地址:https://www.cnblogs.com/fancyUtech/p/9254858.html

时间: 2024-08-03 20:50:29

关于特征工程的一些学习、思考与错误的纠正的相关文章

特征工程(Feature Enginnering)学习记要

最近学习特征工程(Feature Enginnering)的相关技术,主要包含两块:特征选取(Feature Selection)和特征抓取(Feature Extraction).这里记录一些要点,作为备忘. 特征选取 R中的FSelector包实现了一些特征选取的算法,主要分两大类: Algorithms for filtering attributes: cfs, chi.squared, information.gain, gain.ratio, symmetrical.uncertai

【特征工程】特征选择与特征学习

http://www.jianshu.com/p/ab697790090f 特征选择与特征学习 在机器学习的具体实践任务中,选择一组具有代表性的特征用于构建模型是非常重要的问题.特征选择通常选择与类别相关性强.且特征彼此间相关性弱的特征子集,具体特征选择算法通过定义合适的子集评价函数来体现.在现实世界中,数据通常是复杂冗余,富有变化的,有必要从原始数据发现有用的特性.人工选取出来的特征依赖人力和专业知识,不利于推广.于是我们需要通过机器来学习和抽取特征,促进特征工程的工作更加快速.有效. 特征选

特征工程学习01-sklearn单机特征工程

特征工程学习01-sklearn单机特征工程 小书匠 kindle 0.数据的导入 from sklearn.datasets import load_iris #导入IRIS数据集  iris=load_iris()  #特征矩阵  print(iris.data[:5],len(iris.data))  #目标向量  print(iris.target[:5],len(iris.target))  [[ 5.1 3.5 1.4 0.2] [ 4.9 3. 1.4 0.2]  [ 4.7 3.

AI学习---特征工程(Feature Engineering)

为什么需要特征工程(Feature Engineering) 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已 什么是特征工程 帮助我们使得算法性能更好发挥性能而已 sklearn主要用于特征工程pandas主要用于数据清洗.数据处理 特征工程包含如下3个内容: 1.特征抽取/特征提取 |__>字典特征抽取 |__>文本特征抽取 |__>图像特征抽取(深度学习) 2.特征预处理 3.特征降维 特征抽取/特征提取 我们常说的机器学习算法实际上就是我们统计学上的统计方法也就是

机器学习之(四)特征工程以及特征选择的工程方法

关于特征工程(Feature Engineering),已经是很古老很常见的话题了,坊间常说:"数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已".由此可见,特征工程在机器学习中占有相当重要的地位.在实际应用当中,可以说特征工程是机器学习成功的关键.纵观Kaggle.KDD等国内外大大小小的比赛,每个竞赛的冠军其实并没有用到很高深的算法,大多数都是在特征工程这个环节做出了出色的工作,然后使用一些常见的算法,比如LR,就能得到出色的性能.遗憾的是,在很多的书籍中并没有直接

【特征工程】特征工程技术与方法

引言 在之前学习机器学习技术中,很少关注特征工程(Feature Engineering),然而,单纯学习机器学习的算法流程,可能仍然不会使用这些算法,尤其是应用到实际问题的时候,常常不知道怎么提取特征来建模. 特征是机器学习系统的原材料,对最终模型的影响是毋庸置疑的. 特征工程的重要意义 数据特征会直接影响你使用的预测模型和实现的预测结果.准备和选择的特征越好,则实现的结果越好. 影响预测结果好坏的因素:模型的选择.可用的数据.特征的提取. 优质的特征往往描述了数据的固有结构. 大多数模型都可

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

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

最近看到的“特征工程”相关文章,特汇总在一起方便浏览~

最近看到的“特征工程”相关文章,特汇总在一起方便浏览~ 对于搞数据的和玩深度学习的特征工程是不可少的一环,尤其是特征选择,好的特征选择能够提升模型的性能,更能帮助我们理解数据的特点.底层结构,这对进一步改善模型.算法都有着重要作用. 这里先上一篇总括<特征工程技术与方法> 这篇文章详细梳理了特征工程所包含的内容,对机器学习中的特征.特征的重要性.特征提取与选择.特征的构建.学习等子类问题也给与了总结,总之看过这篇文章之后对特征工程就能有一个总体的认识.(这张图总结的太好了,一目了然,贴出来!)

互联网广告综述之点击率特征工程

互联网广告综述之点击率特征工程 声明: 1)该博文是整理自网上很大牛和专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的版本声明也参考原文献 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应,更有些部分本来就是直接从其他博客复制过来的.如果某部分不小心侵犯了大家的利益,还望海涵,并联系老衲删除或修改,直到相关人士满意为止. 3)本人才疏学浅,整理总结的时候难免出错,还望各位前辈不吝指正,谢谢. 4)阅读本文需要机器学习.统计学习理论.优化算法等等基础(如果没有也没关