机器学习(第二篇)

一.特征工程

1.1 什么是特征工程?

特征工程是使用专业背景知识和技巧处理数据使得特征能在机器学习算法上发挥更好的作用的过程

也就是说,使用特征工程之后,能够更好的进行机器学习,机器可以根据一些特有特征来预测结果。

1.2 特征工程包含什么?

a. 特征抽取(将任意的数据可以转化为机器可以学习的数字)

b. 特征预处理(通过一些转换函数将特征数据转换成更加适合算法模型特征数据

c. 特征降维(降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程)

1.3 特征抽取

特征抽取主要体现在三个方面:

1.字典特征提取

2.文本特征提取

3.图像特征提取

1.4 字典特征提取举例

现在我们对以下数据进行特征提取

[{'fruit': '香蕉','num':100}
{'fruit': '苹果','num':60}
{'fruit': '桃子','num':30}]

 结果如下:

 如何实现的呢?

 代码如下:

from sklearn.feature_extraction import DictVectorizer

def dict_demo():

    data = [{'fruit': '香蕉','num':100},{'fruit': '苹果','num':60},{'fruit': '桃子','num':30}]
    # 1、实例化一个转换器类
    transfer = DictVectorizer(sparse=False)
    # 2、调用fit_transform
    data = transfer.fit_transform(data)
    print("返回的结果:\n", data)
    # 打印特征名字
    print("特征名字:\n", transfer.get_feature_names())

    return None

dict_demo()

 值得注意的是,我们在进行特征提取时,要进行上述代码所示的1、2步,首先需要实例化转换器,其次进行特征提取。

那么会有人问了,为什么要进行实例化转换器呢?

在代码中’DictVectorizer‘  是  ‘sklearn’ 库中的一个工具,它用于将字典对象转换为机器学习算法可以接受的格式。在这里,‘sparse=False’ 表示转换后的特征矩阵不是稀疏矩阵而是稠密矩阵,在内存中占用更多空间但可加快运算

当我们没有加入“sparse=False”会怎么样呢?

from sklearn.feature_extraction.text import CountVectorizer

def text_count_demo():

    data = ["life is short,i like like python", "life is too long,i dislike python"]
    # 1、实例化一个转换器类
    # transfer = CountVectorizer(sparse=False)
    transfer = CountVectorizer()
    # 2、调用fit_transform
    data = transfer.fit_transform(data)
    print("文本特征抽取的结果:\n", data.toarray())
    print("返回特征名字:\n", transfer.get_feature_names())

    return None

 这是我们想要的样子吗?该结果与加了“sparse=False”的结果有什么不同?

我们观察可知,(0,2)在加了“sparse=False”中表示在列表的第1号位的列表上的第三个数是1.0 ,由此可知,(0,3)表示在列表的第1号位的列表上的第四个数为100.0 , 那么剩下没有的数都是什么呢?对的,剩下没有说明的数都是0。二者在数据处理上速度上相差很大,我们将这个技巧称为“one-hot”编码

1.5  文本特征提取举例

 我们对以下两句话进行特征提取:

"life is short,i like like python", "life is too long,i dislike python"

代码如下:

 

from sklearn.feature_extraction.text import CountVectorizer

def text_count_demo():

    data = ["life is short,i like like python", "life is too long,i dislike python"]
    # 1、实例化一个转换器类
    # transfer = CountVectorizer(sparse=False)
    transfer = CountVectorizer()
    # 2、调用fit_transform
    data = transfer.fit_transform(data)
    print("文本特征抽取的结果:\n", data.toarray())
    print("返回特征名字:\n", transfer.get_feature_names())

    return None

结果如下:

 因为我们对文本进行特征提取,所以我们此时需要将上一步对于字典的提取中的实例化代码换为CountVectorizer(),此时就可以进行文本特征提取!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

睡不醒的恒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值