返回顶部
首页 > 资讯 > 后端开发 > Python >python基础学习之 特征工程
  • 684
分享到

python基础学习之 特征工程

2023-06-02 03:06:47 684人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

  一、特征提取  字典加载特征:DictVectorizer  文本特征提取:词频向量(CountVectorizer)TF-IDF向量(TfidfVectorizer,FfidfTransfORMer) 特征哈希向量(HashingVe

  一、特征提取

  字典加载特征:DictVectorizer

  文本特征提取:词频向量(CountVectorizer)TF-IDF向量(TfidfVectorizer,FfidfTransfORMer) 特征哈希向量(HashingVectorizer)

  图像特征的提取:提取像素矩阵边缘和兴趣点

  1.1、字典加载特征

  用python中的字典存储特征是一种常用的做法,其优点是容易理解,但是sklearn的输入特征必须是numpy或Scipy的数组。可以用DictVectorizer从字典加载特征转化成numpy,并且对分类特征会采用独热编码。

  me=[

  {'city':'Dubai','temperature':33.},

  {'city':'London','temperature':12.},

  {'city':'San Francisco','temperature':18.}

  ]

  from sklearn.feature_extraction import DictVectorizer

  vec=DictVectorizer()

  print(vec.fit_transform(me).toarray())

  vec.get_feature_names()

  [[ 1. 0. 0. 33.]

  [ 0. 1. 0. 12.]

  [ 0. 0. 1. 18.]]

  1.2、字频向量

  词库模型(Bag-of-Words model)是文字模型化最常用的方法,它为每个单词设值一个特征值,依据是用类似单词的文章意思也差不多

  CountVectorizer类会将文档全部转化成小写,然后把句子分割成块或有意义的字母序列,并统计他们出现的次数

  可以使用stop_words选项排除一些常用的但没有意义的助词。

  from sklearn.feature_extraction.text import CountVectorizer

  co=[

  'UNC played Duke in basketball',

  'Duke lost the basketball game ,game over',

  'I ate a sandwich'

  ]

  vec=CountVectorizer(stop_words='english')

  print(vec.fit_transform(co).todense())

  print(vec.vocabulary_)

  # 三行数据

  [[0 1 1 0 0 1 0 1]

  [0 1 1 2 1 0 0 0]

  [1 0 0 0 0 0 1 0]]

  {'unc': 7, 'played': 5, 'duke': 2, 'basketball': 1, 'lost': 4, 'game': 3, 'ate': 0, 'sandwich': 6}

  import jieba

  from sklearn.feature_extraction.text import CountVectorizer

  corpus=[

  '朋友,小红是我的',

  '小明对小红说:“小红,我们还是不是朋友”',

  '小明与小红是朋友'

  ]

  cutcorpus=["/".join(jieba.cut(x)) for x in corpus]

  vec==CountVectorizer(stop_words=['好的','是的'])

  counts=vec.fit_transform(cutcorpus).todense()

  print(counts)

  # 查看映射字典

  print(vec.vocabulary_)

  可以用词频向量的欧式距离(L2范数)来衡量两个文档之间的距离(距离越小越相似)

  from sklearn.feature_extraction.text import CountVectorizer

  # 计算欧式距离

  from sklearn.metrics.pairwise import euclidean_distances

  vectorizer=CountVectorizer()

  for x,y in [[0,1],[0,2],[1,2]]:

  dist=euclidean_distances(counts[x],counts[y])

  print('文档{}与文档{}的距离{}'.format(x,y,dist))

  1.3、Tf-idf权重向量

  from sklearn.feature_extraction.text import TfidfTransformer

  transformer=TfidfTransformer(smooth_idf=False)

  counts=[[3,0,1],

  [2,0,0],

  [3,0,0],

  [4,0,0],

  [3,2,0],

  [3,0,2]]

  tfidf=transformer.fit_transform(counts)

  tfidf.toarray()

  array([[0.81940995, 0. , 0.57320793],

  [1. , 0. , 0. ],

  [1. , 0. , 0. ],

  [1. , 0. , 0. ],

  [0.47330339, 0.88089948, 0. ],

  [0.58149261, 0. , 0.81355169]])

  from sklearn.feature_extraction.text import TfidfVectorizer

  vectorizer=TfidfVectorizer()

  vectorizer.fit_transform(cutcorpus).toarray()

  vectorizer.vocabulary_

  {'小明': 0, '小红': 1, '我们': 2, '是不是': 3, '朋友': 4}

  1.4、特征哈希值

  词袋模型的方法很好用,也很直接,但在有些场景下很难使用,比如分词后的词汇字典表非常大, 达到100万+,此时如果直接使用词频向量或Tf-idf权重向量的方法,将对应的样本对应特征矩阵载入内存,有可能将内存撑爆,在这种情况下我们该怎么办呢?

  我们可以应用哈希技巧进行降维。

  Hash函数可以将一个任意长度的字符串映射到_个固定长度的散列数字中去。Hash函数是一种典 型的多对一映射。

  正向快速:给定明文和hash算法,在有限时间和有限资源内能计算出hash值。

  逆向困难:给定(若干)hash值,在有限时间内很难(基本不可能)逆推出明文。

  输入敏感:原始输入信息修改一点信息,产生的hash值看起来应该都有很大不同。

  碰撞避免:很难找到两段内容不同的明文,使得它们的hash值一致(发生碰撞)。即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。

  目前流行的Hash函数包括MD4,MD5,SHA等。

  from sklearn.feature_extraction.text import HashingVectorizer

  corpus=['smart boy','ate','bacon','a cat']

  # HashingVectorizeras是无状态的,不需要fit

  vectorizer=HashingVectorizer(n_features=6,stop_words='english')

  print(vectorizer.transform(corpus).todense())

  [[-0.70710678 -0.70710678 0. 0. 0. 0. ]

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

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

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

  from sklearn.feature_extraction.text import HashingVectorizer

  corpus=[

  'UNC played Duke in basketball',

  'Duke lost the basketball game ,game over',

  'I ate a sandwich'

  ]

  vectorizer=HashingVectorizer(n_features=6)

  counts=vectorizer.transform(corpus).todense()

  print(counts)

  counts.shape

  [[ 0. 0. -0.89442719 0. 0. -0.4472136 ]

  [-0.37796447 -0.75592895 -0.37796447 0. 0. -0.37796447]

  [ 0. 0. 0.70710678 0.70710678 0. 0. ]]

  Out[9]:(3, 6)

  二、特征选择

  当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。通常来 说,从两个方面考虑来选择特征:无锡妇科医院排行 Http://www.0510bhyy.com/

  特征是否发散:如果一个特征不发散,例如方差接近于0 ,也就是说样本在这个特征上基本上没有差异,这个特征对于样本的区分并没有什么用。

  特征与目标的相关性:这点比较显见,与目标相关性高的特征,应当优选选择。除方差法外,本文介绍的其他方法均从相关性考虑。

  根据特征选择的形式又可以将特征选择方法分为3种:

  1、Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。

  2、Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。

  3、Embedded :嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。

  2.1、Filter过滤法

  2.1.1、方差选择法

  使用方差选择法,先要计算各个特征的方差,然后根据阙值,选择方差大于阙值的特征。(用的不是很多)

  from sklearn.feature_selection import VarianceThreshold

  **方差选择法,返回值为特征选择后的数据**

  **参数thresshold为方差的阙值,方差大于3(threshold=3)**

  vardata=VarianceThreshold(threshold=3).fit_transform(iris.data)

  vardata.shape

  (150, 1)

  2.1.2、相关系数法

  使用相关系数,先要计算各个特征对目标值的相关系数。用feature_selection库的SelectKBest类结合相关系数来选择

  from sklearn.feature_selection import SelectKBest

  from scipy.stats import pearsonr

  import numpy as np

  **选择K个最好的特征,返回选择特征后的数据**

  **第一个参数为计算评估特征是否好的函数,该函数输入特征矩阵和目标向量**

  **输出二元(评分,P值)的数组,数组第i项为第i个特征的评分和P值**

  f=lambda X ,Y:np.array(list(map(lambda x:pearsonr(x,Y)[0],X.T))).T

  SelectKBest(f,k=2).fit_transform(iris.data,iris.target)

  2.1.3、卡方检验

  from sklearn.feature_selection import SelectKBest

  from sklearn.feature_selection import chi2

  SelectKBest(chi2,k=2).fit_transform(iris.data,iris.target)

  2.1.4、互信息法

  经典的互信息法也是评价定性自变量对定性因变量的相关性的。相关系数,卡方检验,互信息选择原理相似,但相关系数通常只适用于连续特征选择

  import numpy as np

  from sklearn.feature_selection import SelectKBest

  from sklearn import metrics

  mic=metrics.mutual_info_score

  g=lambda X ,Y:np.array(list(map(lambda x:mic(x,Y),X.T))).T

  SelectKBest(g,k=2).fit_transform(iris.data,iris.target)

  2.2、Wrapper

  递归特征消除法(RFE)

  递归消除特征法使用一个基膜型进行多伦训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练

  from sklearn.feature_selection import RFE

  from sklearn.linear_model import LoGISticRegression

  **递归特征消除法,返回特征选择后的数据**

  **参数estimator为基膜型**

  **n_features_to_select=2特征个数**

  RFE(estimator=LogisticRegression(),n_features_to_select=2).fit_transform(iris.data,iris.target)

  2.3、Embedded嵌入法

  https://blog.csdn.net/jinping_shi/article/details/52433975

  使用带惩罚项的基模型,除了筛选出特征外同时也进行了降维。使用feature_selection库的SelectFormModel类结合带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)

  L1惩罚项降维的原理在于保留多个对目标值具有同等相关性的特征中的一个,所以没选到的特征不代表不重要。故,可结合L2惩罚项来优化。具体操作为:若一个特征在L1中的权值为1 ,选择在L2 中权值差别不大且在L1中权值为0的特征构成同类集合,将这一集合中的特征平分L1中的权值,故需要构建一个新的逻辑回归模型:

--结束END--

本文标题: python基础学习之 特征工程

本文链接: https://lsjlt.com/news/228747.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python基础学习之 特征工程
      一、特征提取  字典加载特征:DictVectorizer  文本特征提取:词频向量(CountVectorizer)TF-IDF向量(TfidfVectorizer,FfidfTransformer) 特征哈希向量(HashingVe...
    99+
    2023-06-02
  • python机器学习基础特征工程算法详解
    目录一、机器学习概述二、数据集的构成1.数据集存储2.可用的数据集3.常用数据集的结构三、特征工程1.字典数据特征抽取2.文本特征抽取3.文本特征抽取:tf-idf4.特征预处理:归...
    99+
    2024-04-02
  • python学习之路--python基础
    本文主要介绍下python列表的的一些基本操作 列表是我们在python编程中常用的数据类型之一,通过列表我们可以对数据实现最方便的存储、修改等操作。 定义列表  1 names=['ZhangSan','LiSi','WangWu'] ...
    99+
    2023-01-30
    之路 基础 python
  • Python基础学习之认识线程
    目录一、什么是线程?二、再来解释线程的代码三、线程触发业务函数,线程调用业务函数四、多了一个线程是哪个?五、总结一、什么是线程? 我们知道工人都是同时在工厂工作,复制各自的工作的。他...
    99+
    2024-04-02
  • Python基础学习教程:Python基础之基本数据类型(一)
    Python基础学习教程:Python基础之基本数据类型(一)...
    99+
    2023-06-02
  • Python基础学习之Python主要的
    Python主要是依靠众多的第三方库来增强它的数据处理能力的。常用的是Numpy库,Scipy库、Matplotlib库、Pandas库、Scikit-Learn库等。 常规版本的python需要在安装完成后另外下载相应的第三方库来安装库...
    99+
    2023-01-31
    基础 Python
  • python 基础学习
    #此代码关于python函数调用的理解学习#还不明白这段代码如何实现调用的!!!def apply_twice(func, arg):return func(func(arg)) def add_five(x):return x + 5 p...
    99+
    2023-01-31
    基础 python
  • Python基础学习
    第一个 Python 程序:Hello Worldprint("Hello World!")Python 控制流:if-else, if-elif-else:    if-else 语法:if 判断条件:     执行语句…… else: ...
    99+
    2023-01-31
    基础 Python
  • python机器学习中特征工程算法的示例分析
    这篇文章主要为大家展示了“python机器学习中特征工程算法的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python机器学习中特征工程算法的示例分析”这篇文章吧。一、机器学习概述机器...
    99+
    2023-06-25
  • python基础学习21----进程
    python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。 进程与线程的使用有很多相似之处,有关线程方面的知识请参考https://www.cnblogs.com/sfen...
    99+
    2023-01-30
    进程 基础 python
  • python基础学习22----协程
    协程,又称微线程。英文名Coroutine。 协程最大的优势就是协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。 第二大优势就是不需要多线程的...
    99+
    2023-01-30
    基础 python 协程
  • python基础学习20----线程
    什么是线程   线程,有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派...
    99+
    2023-01-30
    线程 基础 python
  • 数据挖掘篇——特征工程之特征降维
    在业界广泛流传着一句话:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。 由此可见,数据和特征是多么的重要,而在数据大多数场景下,数据已经就绪,不同人对于同样的数据处理得到的特征却千差万别,最终得到的建模...
    99+
    2019-06-23
    数据挖掘篇——特征工程之特征降维
  • python基础学习之组织文件
    目录一、Shutil 模块1.1 复制文件和文件夹1.2 移动文件和文件夹1.3 删除文件和文件夹二、遍历文件三、压缩文件3.1 创建和添加ZIP文件3.2 读取ZIP文件3.3 解...
    99+
    2024-04-02
  • Python机器学习之基础概述
    目录一、基础概述二、算法分类三、研究内容一、基础概述 机器学习(Machine Learing)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多...
    99+
    2024-04-02
  • Python学习之基础语法介绍
    目录前言基础语法编码注释行与缩进多行语句import与from…import前言 Python环境的搭建这里就不赘述了,有需要的小伙伴可以在网上搜罗出很多教程,注意安装PyChom编...
    99+
    2024-04-02
  • WEBSHELL管理工具流量特征——基础篇
    前言 前一阵子帮别人做取证题目,有很多关于WEBSHELL的流量要分析,想起来还有没好好分析过于是准备写篇文章总结一下帮助大家能够快速的辨别WEBSHELL流量,下面我们展开文章来讲。 中国菜刀 这个...
    99+
    2023-09-18
    php 开发语言
  • shell学习之编程基础知识
    有学过编程语言的同学们都能够很快入手shell因为基础的字符类型,循环语句与C语言也差不多。以下我们来了解以下新手基础:1.在学习循环语句之前先了解一些基础的字符信息:$0、$1、$2、$、$*、$#$0 ...
    99+
    2024-04-02
  • Python学习 :socket基础
     socket基础   什么是socket?   - socket为接口通道,内部封装了IP地址、端口、协议等信息;我们可以看作是以前的通过电话机拨号上网的年代,socket即为电话线   socket通信流程   我们通过下面的图来了解...
    99+
    2023-01-31
    基础 Python socket
  • Python基础学习(二)
    Python函数总结 一、函数的基本用法 1、概念: 函数是对程序逻辑进行结构化或是过程化的一种编程方法,其是组织好的,可重复使用的,用来实现单一,或者相同功能的代码段。 函数提高了应用点的模块性和代码的重复利用率 本质:函数是对功...
    99+
    2023-01-30
    基础 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作