用scikit做特征提取

现实世界中多数特征都不是连续变量,比如分类、文字、图像等,为了对非连续变量做特征表述,需要对这些特征做数学化表述,因此就用到了特征提取。

1、分类变量的特征提取

比如城市作为一个特征,那么就是一系列散列的城市标记,这类特征我们用二进制编码来表示,是这个城市为1,不是这个城市为0

比如有三个城市:北京、天津、上海,我们用scikit-learn的DictVector做特征提取,如下:

from sklearn.feature_extraction import DictVectorizer
onehot_encoder = DictVectorizer()
instances = [{‘city‘: ‘北京‘},{‘city‘: ‘天津‘}, {‘city‘: ‘上海‘}]
print(onehot_encoder.fit_transform(instances).toarray())

编码结果:

[[ 0.  1.  0.]
 [ 0.  0.  1.]
 [ 1.  0.  0.]]

2、文字特征提取

文字特征无非这几种:有这个词还是没有、这个词的TF-IDF

第一种情况用词库表示法,如下:

1 from sklearn.feature_extraction.text import CountVectorizer
2 corpus = [‘UNC played Duke in basketball‘, ‘Duke lost the basketball game‘ ]
3 vectorizer = CountVectorizer()
4 print(vectorizer.fit_transform(corpus).todense())
5 vectorizer.vocabulary_

编码结果:

1 [[1 1 0 1 0 1 0 1]
2  [1 1 1 0 1 0 1 0]]
3 {u‘duke‘: 1, u‘basketball‘: 0, u‘lost‘: 4, u‘played‘: 5, u‘game‘: 2, u‘unc‘: 7, u‘in‘: 3, u‘the‘: 6}

数值为1表示词表中的这个词出现,为0表示未出现,词表中的数值表示单词的坐标位置。这个是按照字母先后顺序排的。

第二种情况TF-IDF表示词的重要性,如下:

from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [‘The dog ate a sandwich and I ate a sandwich‘, ‘The wizard transfigured a sandwich‘ ]
vectorizer = TfidfVectorizer(stop_words=‘english‘)
print(vectorizer.fit_transform(corpus).todense())
print(vectorizer.vocabulary_)

结果:

[[ 0.75458397  0.37729199  0.53689271  0.          0.        ]
 [ 0.          0.          0.44943642  0.6316672   0.6316672 ]]
{u‘sandwich‘: 2, u‘wizard‘: 4, u‘dog‘: 1, u‘transfigured‘: 3, u‘ate‘: 0}

值最高的是第一个句子中的ate,因为它在这一个句子里出现了两次。

值最低的自然是本句子未出现的单词。

3、数据标准化

数据标准化就是把数据转成均值为0,是单位方差的。比如对如下矩阵做标准化:

1 from sklearn import preprocessing
2 import numpy as np
3 X = np.array([[0., 0., 5., 13., 9., 1.], [0., 0., 13., 15., 10., 15.], [0., 3., 15., 2., 0., 11.]])
4 print(preprocessing.scale(X))

执行结果:

1 [[ 0.         -0.70710678 -1.38873015  0.52489066  0.59299945 -1.35873244]
2  [ 0.         -0.70710678  0.46291005  0.87481777  0.81537425  1.01904933]
3  [ 0.          1.41421356  0.9258201  -1.39970842 -1.4083737   0.33968311]]

  

时间: 2024-10-10 15:15:14

用scikit做特征提取的相关文章

数据预处理:分类变量实体嵌入做特征提取

实体嵌入(embedding)目的将表格数据中的分类属性(一个至多个)向量化. 1.实体嵌入简介: 实体嵌入是主要应用于深度学习中处理表格分类数据的一种技术,或者更确切地说NLP领域最为火爆,word2vec就是在做word的embedding. 神经网络相比于当下的流行的xgboost.LGBM等树模型并不能很好地直接处理大量分类水平的分类特征.因为神经网络要求输入的分类数据进行one-hot处理.当分类特征的水平很高的时候,one-hot经常带来维度爆炸问题,紧接着就是参数爆炸,局部极小值点

机器学习精简入门教程

机器学习教程 一-不懂这些线性代数知识 别说你是搞机器学习的(2016-04-01) 机器学习教程 二-安装octave绘制3D函数图像(2016-04-30) 机器学习教程 三-用scikit-learn求解一元线性回归问题(2016-05-30) 机器学习教程 四-用scikit-learn求解多元线性回归问题(2016-05-30) 机器学习教程 五-用matplotlib绘制精美的图表(2016-05-31) 机器学习教程 六-用scikit-learn求解多项式回归问题(2016-06

论文笔记《Feedforward semantic segmentation with zoom-out features》

<Feedforward semantic segmentation with zoom-out features>,CVPR 2015 这篇文章的方法是superpixel-level的,主要是基于CNN实现,是fully supervised. 首先对输入图像以superpixel为单位提取CNN特征(使用VGG16),然后把这些特征作为CNN classifier(使用imageNet)的输入,imageNet输出是每个superpixel的class. 这篇文章的亮点应该是:1,它把C

GBDT与LR融合提升广告点击率预估模型

1GBDT和LR融合 LR模型是线性的,处理能力有限,所以要想处理大规模问题,需要大量人力进行特征工程,组合相似的特征,例如user和Ad维度的特征进行组合. GDBT天然适合做特征提取,因为GBDT由回归树组成所以, 每棵回归树就是天然的有区分性的特征及组合特征,然后给LR模型训练,提高点击率预估模型(很多公司技术发展应用过,本人认为dnn才是趋势). 例如,输入样本x,GBDT模型得到两颗树tree1和tree2,遍历两颗树,每个叶子节点都是LR模型的一个维度特征,在求和每个叶子*权重及时L

深度学习方法(十一):卷积神经网络结构变化——Google Inception V1-V4,Xception(depthwise convolution)

技术交流QQ群:433250724,欢迎对算法.机器学习技术感兴趣的同学加入. 上一篇讲了深度学习方法(十):卷积神经网络结构变化--Maxout Networks,Network In Network,Global Average Pooling,本篇讲一讲Google的Inception系列net,以及还是Google的Xception.(扯一下,Google的Researcher们还是给了很多很棒的idea的,希望读者朋友和我自己在了解paper之余,可以提出自己的想法,并实现.) 如果想

机器学习笔记----四大降维方法之PCA(内带python及matlab实现)

大家看了之后,可以点一波关注或者推荐一下,以后我也会尽心尽力地写出好的文章和大家分享. 本文先导:在我们平时看NBA的时候,可能我们只关心球员是否能把球打进,而不太关心这个球的颜色,品牌,只要有3D效果,看到球员扣篮的动作就可以了,比如下图: 如果我们直接对篮球照片进行几百万像素的处理,会有几千维甚至几万维的数据要计算,计算量很大.而往往我们只需要大概勾勒出篮球的大概形状就可以描述问题,所以必须对此类数据降维,这样会使处理数据更加轻松.这个在人脸识别中必须要降维,因为我们在做特征提取的时候几万维

图像拼接 SIFT资料合集

图像拼接SIFT资料合集 转自 http://blog.csdn.net/stellar0/article/details/8741780 分类: 最近也注意一些图像拼接方面的文章,很多很多,尤其是全景图拼接的,实际上类似佳能相机附加的软件,好多具备全景图拼接,多幅图像自动软件实现拼接,构成(合成)一幅全景图像(风景).Sift算法,我略知一二,无法仔细描述(刚也贴了2个最近的资料).      当就尺度空间(scale space),我想,其在计算机视觉(Computer Vision)\图像

TensorFlow实战--阅读笔记part3

一.Tensorflow实现卷积神经网络 卷积神经网络的概念最早出自19世纪60年代科学技术提出的感受野.当时科学家通过对猫的视觉皮层细胞研究发现,每一个视觉神经元只会处理一小块区域的视觉图像,即感受野. 一个卷积层中可以有多个不同的卷积核,而每一个卷积核都对应一个滤波后映射出的新图像,同一个新图像中每一个像素都来自完全相同的卷积核,这就是卷积核的权值共享. 权值共享是为了降低模型复杂度,减轻过拟合并降低计算量. 一个隐含节点对应于新产生的图的一个像素点 1994年LeNet (Yann LeC

LDA_PCA_SVD导论

作者:金良([email protected]) csdn博客:http://blog.csdn.net/u012176591 资源链接 http://download.csdn.net/detail/u012176591/8257297 相关源码: svd.py import numpy import random import matplotlib.pyplot as pyplot data = numpy.array([[1,0.6,1,0,0.4], [2,1.7,2,0.2,0], [