2.特征工程介绍

特征工程是机器学习中的关键步骤,包括特征抽取、预处理和选择。文本特征抽取利用CountVectorizer和jieba进行分词处理,数值型数据通过无量纲化和标准化进行预处理。特征选择涉及方差过滤和PCA降维,PCA能有效减少特征数量并保持数据集的主要信息。
摘要由CSDN通过智能技术生成

特征工程

  • 特征抽取

  • 数据特征的预处理

  • 特征选择

  • 为什么需要特征工程

    • 样本数据中的特征有可能会出现缺失值、重复值、异常值等,那么我们需要对特征中的噪点数据进行处理,处理的目的就是为了得到更加纯净的样本集,让模型基于这组数据可以有更好的预测能力。
  • 什么是特征工程?

    • 特征工程就是将原始数据转换为更好的代表预测模型的潜在问题的特征的过程,从而提高对未知数据预测的准确性:
      • 比如如果AlphaGO学习的数据中既有棋谱,又有食谱,还有歌词,那么这些干扰的数据肯定会影响AlphaGo的学习。
  • 特征工程的意义:

    • 特征工程会直接影响模型预测的结果
  • 如何实现特征工程:

    • 工具:sklearn
  • sklearn介绍

    • Python中机器学习工具,包含了很多机器学习算法的实现;
    • 功能:
      • 分类模型
      • 回归模型
      • 聚类模型
      • 特征工程

特征抽取

  • 目的:

    • 我们所采集到样本的特征数据很多时候为字符串或者其他类型的数据,我们知道电脑只可以识别二进制数值型的数据。所以,如果不是数值型的数据,机器学习苏算法是识别不了的。
  • 效果演示:

    • 将字符串转换成数字
from sklearn.feature_extraction.text import CountVectorizer
vector= CountVectorizer()
res= vector.fit_transform(['lift is short, i love python', 'I love Python'])
print(res.toarray())
[[1 1 1 1 1]
 [0 0 1 1 0]]
  • 演示后的结论:

    • 特征抽取对文本等数据进行特征值化,特征值化是为了让机器更好的理解数据。
  • 字典特征抽取

    • 对字典数据进行特征值化
    • API: from sklearn.feature_extraction import DictVectorizer
      • fit_transform(X): X为自带奶或者包含字典的迭代器,返回值为sparse矩阵
      • inverse_transform(X): X为sparse矩阵呢个或者array数组,返回值为转换之前的数据格式
      • transform(X): 按照原先的标准进行转换
      • get_feature_names(): 返回转换类别名称
from sklearn.feature_extraction import DictVectorizer
alist= [
    {
   'city': 'Beijing', 'temp': 12},
    {
   'city': 'Chengdu', 'temp': 11},
    {
   'city': 'Chongqin', 'temp': 34}
]
# 实例化一个工具类对象
d= DictVectorizer()
# 返回的是一个sparse矩阵(存储的是特征值化之后的结果)
feature= d.fit_transform(alist)
print(feature)
  (0, 0)	1.0
  (0, 3)	12.0
  (1, 1)	1.0
  (1, 3)	11.0
  (2, 2)	1.0
  (2, 3)	34.0
  • 什么是sparse矩阵,如何理解?
    • 在DictVectorizer类构造的方法中设定sparse=False则返回的就不是sparse矩阵,而是一个array数组;
      • get_feature_names():返回类别名称
    • sparse矩阵就是一个变相的数组或者李彪,目的是为了节省内存;
    • 对比下面的onehot编码,(0,0) 1.0 表示 0 行 0 列 的值为 1.0 ; (1,1) 1.0表示 1行1列的值为1.0;
from sklearn.feature_extraction import DictVectorizer
alist= [
    {
   'city': 'Beijing', 'temp': 12},
    {
   'city': 'Chengdu', 'temp': 11},
    {
   'city': 'Chongqin', 'temp': 34}
]
# 实例化一个工具类对象
d= DictVectorizer(sparse= False) # sparse= False
# 返回的是一个sparse矩阵(存储的是特征值化之后的结果)
feature= d.fit_transform(alist)
print(d.get_feature_names())
print(feature)
['city=Beijing', 'city=Chengdu', 'city=Chongqin', 'temp']
[[ 1.  0.  0. 12.]
 [ 0.  1.  0. 11.]
 [ 0.  0.  1. 34.]]
  • one-hot编码

    • sparse矩阵中的01就是onehot编码
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3W0CQxLE-1628110524140)(attachment:image.png)]
  • 为什么需要onehot编码呢?

    • 特征抽取主要目的就是对非数值型数据进行特征值化! 如果现在需要对下图中的human和alien进行手动特征值化为4, human为1.则1和4有没有优先级或者权重大小呢?
Sample Category Numerical
1 Human 1
2 Human 1
3 Penguin 2
4 Octopus 3
5 Alien 4
  • 则需要对其进行One-Hot编码:
Human Panguln Octopus Alien
1 0 0 0
1 0 0 0
0 1 0 0
0 0 1 0
  • 基于pandas实现one-hot编码:
    • pd.get_dummies(df[‘col’])
import pandas as pd
df
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值