机器学习——特征工程

机器学习-----特征工程

概述:机器学习是当前解决人工智能问题的主要技术,在人工智能领域处于核心地位。

1.什么是特征工程

  **特征工程**是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高对未知数据预测的准确性。包括<font color="Red">特征抽取、特征预处理、数据降维。<font >

2.特征抽取

特征抽取,将一个文本转换成具体的数字,即对文本等数据特征值化,包括字典特征抽取、文本特征抽取。

2.1字典特征抽取

**字典特征抽取**(DictVectorizer)即把字典中一些类别数据分别进行(one-hot编码)进行特征转换。

语法:在这里插入图片描述

  • 1.字典特征抽取API
from sklearn.feature_extraction import DictVectorizer

sklearn中特征抽取API在feature_extraction下,DictVectorizer用于字典特征抽取。

  • 2.创建一个字典类型数据dic
dic = [{'city':'北京','temperature':30},
       {'city':'上海','temperature':40},
       {'city':'广州','temperature':50}]``

fit_transform()和get_feature_names()的使用

def dictv_ex():
    """字典特征抽取"""
    dict = DictVectorizer();#sparse=false则返回数组
    data = dict.fit_transform(dic)
    print("返回类别名称:",dict.get_feature_names())
    print("转换后:",data)
    print("转换前:",dict.inverse_transform(data))
    return None

2.2文本特征抽取

语法:
List item
英文文本本身就有分词。

  • API
from sklearn.feature_extraction.text import CountVectorizer
  • 定义一个字符串
str = "There are moments in life when you miss someone so much that you just want to pick them from your dreams and hug them for real! Dream what you want to dream;go where you want to go;be what you want to be,because you have only one life and one chance to do all the things you want to do."
  • 进行特征抽取
    CountVectorizer对英文文本进行特征抽取,fit_transform()函数将英文文本进行转换,其特征值类别就是一个个单词。get_feature_names()返回单词列表。
def contv_ex():
    """文本特征抽取---英文"""
    coun = CountVectorizer()
    data = coun.fit_transform([str])
    print("单词列表:",coun.get_feature_names())
    print("转换后:",data.toarray())#转成array数组
    print("转换前:",coun.inverse_transform(data))
    return None

2.2Tfidf文本分类

如果某个词在一篇文章中出现概率高,并在其它文章中很少出现,则认为该词或短语具有很好的文本区分,这就是tfidf,它的作用是用以评估一个词对于一个文件集或一个语料库中的其中一份文件的重要程度。
语法:在这里插入图片描述
jieba分词API如下:

import jieba
  • 使用jieba分词进行中文文本分割,cut()函数生成词语。
content1 = jieba.cut("我是一个程序员,我喜欢做python开发。")
content2 = jieba.cut("我是一个学生,我的任务是好好读书,报效国家。")
  • 转换成list列表并用空格将每个词语隔开
#字符串转list列表
    cont1 = list(content1)
    cont2 = list(content2)
    #join分割
    c1 = " ".join(cont1)
    c2 = " ".join(cont2)
  • 实例化TfidfVectorizer
    tf = TfidfVectorizer()
  • 使用fit_transform()进行抽取并使用get_feature_names()返回词语列表
    data = tf.fit_transform([c1,c2])
    print("单词列表:", tf.get_feature_names())
    print("转换后:", data.toarray())  # 转成array数组

3.特征预处理

特征预处理:通过特定方法将数据转换成算法要求的数据。主要有归一化、标准化、缺失值处理等。

3.1数据归一化

将原始数据映射到区间[mi,mx]上。公式是X=[(x-min)/(max-min)]x(mx-mi)+mi,其中mi,mx为指定区间,max,min为某列最大最小值。

  • 语法
    在这里插入图片描述
    默认转换在0,1区间上,语法中X要求是二维数组。
  • API:
from sklearn.preprocessing import MinMaxScaler
  • 实例化
mm = MinMaxScaler(feature_range=(0,1))
  • 数据获取及转换
    data = mm.fit_transform(data_sz)
    print("归一化后:",data)
    print("归一化前:",mm.inverse_transform(data))

3.2数据标准化

对原始数据进行处理,将其变换到均值为0,方差为1范围内。
公式:X = (x-mean)/o,其中o为标准差。

  • 语法:
    在这里插入图片描述
  • API:
from sklearn.preprocessing import StandardScaler
  • 实例化
ss = StandardScaler()
  • 数据转换
    data = ss.fit_transform(data_sz)
    print("标准化后:",data)

3.3缺失值处理

对数据列表中缺失值进行处理。可通过中位数,平均值,众数等进行插补,也可自定义数据。

  • Python3以上版本API:
from sklearn.impute import SimpleImputer#缺失值API
  • 实例化
 im = SimpleImputer(missing_values=np.nan,strategy='mean')

在这里插入图片描述
在这里插入图片描述

4.数据降维

特征选择使用方差的过滤(VarianceThreshold),过滤掉threshold大小方差,为0时,删除低方差数据。
PCA主成分分析是一种数据分析、简化的工具。目的是对数据维度进行压缩,并尽可能少的损失少量信息。特征值数量达到上百时应考虑PCA降维。

  1. VarianceThreshold语法

在这里插入图片描述
PCA降维语法在这里插入图片描述

  • VarianceThreshold方差过滤和PCA主成分分析API
from sklearn.feature_selection import VarianceThreshold#特征选择
from sklearn.decomposition import PCA
  • 代码实现
#数据降维
from sklearn.feature_selection import VarianceThreshold#特征选择
from sklearn.decomposition import PCA
data_sz = [[19,25,23,17],[33,25,29,25],[43,25,39,45]]
def var():
    var = VarianceThreshold(threshold=0.0)#把方差为0的去掉
    data = var.fit_transform(data_sz)
    print("特征选择:",data)
    return None
def pca():
    pca = PCA(n_components=0.9)
    data = pca.fit_transform(data_sz)
    print("主成分分析pca:",data)
    return None
if __name__=="__main__":
    var()
    pca()

数据降维会存在信息损失。PCA的参数n_components通常使用小数,一般不使用整数,设置0.9~0.95时较佳。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐大队队长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值