勇闯机器学习(第三关-特征工程)

以下内容皆为原创,制作不易,请帅锅镁铝点点赞赞和关注吧(^_^)

一.提问环节

        机器学习是什么?

机器学习就是通过自动分析大量数据去建立模型,训练模型,预测数据。

这么好记的概念,你应该记住了吧??       

 机器学习的概念关:http://t.csdnimg.cn/arRtn

        机器学习的流程?

  1. 获取数据(有数据你才能得到模型啊,有数据你才能训练模型)
  2. 数据预处理(把那些无用的数据删掉,比如:空值,无意义的,乱码)
  3. 特征工程(对特征值进行处理)
  4. 机器学习算法训练--模型
  5. 模型评估(如果模型不行的话,从第二步开始重新看看,再优化一下,直到模型评估良好)
  6. 应用(模型好了,我们才能应用)

 没错,这就是第一关的重点,我们这关主要是搞特征工程。

二.特征工程

        1.定义:

                        特征工程是使用专业的背景知识和技巧处理数据,使得特征在机器学习算法中发挥更好的作用的过程。(其实就是更高尚的处理数据,开玩笑的啊)

        2.意义:

                        直接影响机器学习的效果。

       3.与数据预处理的区别:

                        特征工程的过程中,专门用sklearn对特征进行处理。

                        而数据预处理,主要对原数据,进行数据清洗,异常值、缺失值处理。

        4.特征工程的内容:

        每个数据都有自己的特征,包括文本类型,每个字都有属于自己的特征。那么我们可以用sklearn去将它们转为数值,转化后的数值就是它们的特征。

特征抽取:用机器学习算法(就是统计方法,统计方法就是数学公式)

特征预处理

特征降维  

                        

三.特征提取

                我们今天先讲特征提取,正所谓,慢活出细糠嘛。

                

        1.将任意数据(如文本和图像)转化为机器学习的数字特征

        注:特征值化是为了让计算机更好的去理解数据。

        内心独白:你想想,计算机只认识0和1,二进制。所以我们将数据转化为特征值,这样砸门计算机才能更加深刻的理解和分析。                        

特征提取分为三类
字典特征提取(特征离散化)
文本特征提取
图像特征提取

        这三类,当你遇到字典,那就字典特征提取。当你遇到文本类型数据,那就文本特征提取。遇到图像,那就图像特征提取。

        2.特征提取API

sklearn.feature_exrtaction

四.字典特征提取

        作用:对字典数据进行特征值化

        内心独白:这些方法很好记,都是英语单词,vector向量、矢量。extraction提取。

sklearn.feature_extraction.DictVectorizer(sparse=True)
    1.DictVectorizer.fit_transform(X)
            X是字典或者包含字典的迭代器返回值,返回sparse矩阵(稀疏矩阵)
    2.DictVectorizer.inverse_transform(X)
            X是array数组或者sparse矩阵,返回值:转换之前数据格式
    3.DictVectorizer.get_feature_names()
            返回类别名称

       应用:

                我们对以下数据(字典类型的,因为这章节讲的就是字典特征提取)进行特征提取

data = [{'city':'北京','temperature':100},

                        {'city':'上海', 'temperature':60},

                        {'city':'深圳', 'temperature':30}]

                这段代码是用于对字典数据进行特征提取,它会返回一个稀疏矩阵(记住这个,等下讲到)。每个特征都会对应一个向量。

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
data = [{'city':'北京','temperature':100}, {'city':'上海', 'temperature':60}, {'city':'深圳', 'temperature':30}]
# 1.实例化一个转换器类
transfer = DictVectorizer()

# 2.调用fit_transform()
data_new = transfer.fit_transform(data)
print("data_new\n", data_new)

            

     解释时刻:

                请问返回的为什么不是一个二维数组?

        

因为这个函数方法返回的是稀疏矩阵啊,我也没办法,而且你看我们DictVectorizer()里面没有填参数,所以默认sparse=True并且返回稀疏矩阵    。所以我们要改一下参数,让sparse=False即可。            

废话不多说,开始弄。

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction import DictVectorizer
data = [{'city':'北京','temperature':100}, {'city':'上海', 'temperature':60}, {'city':'深圳', 'temperature':30}]
# 1.实例化一个转换器类
transfer = DictVectorizer(sparse=False)

# 2.调用fit_transform()
data_new = transfer.fit_transform(data)
print("data_new\n", data_new)
# 如果下面报错了,你就换最下面那个,可能是版本不同吧,方法名不一样
# print("特征名字\n", transfer.get_feature_names())
print("特征名字\n", transfer.get_feature_names_out())

 

五.总结

        

        你看这两个的区别,左边是稀疏矩阵,右边是二维数组。稀疏矩阵的六个坐标(只会将非零值按位置表现出来),分别对应右边非零值的位置。

        好,那么为什么要用非零值,而不用零值呢。将类别转为one-hot编码(独热编码),假如有1000个类别,那我转为one-hot编码,就会大大的占据空间和资源。所以为了节省空间和内存,稀疏矩阵只注重非零值,并提高效率。

六.应用场景

        (1)数据集中类别特征比较多

                        1.将数据集特征==》字典类型

                        2.DictVectorizer转换

        (2)本身拿到的数据就是字典类型

 OK,今天的分享就到这里,谢谢大家阅读,晚安2024.07.17   22:53

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

胡萝卜不甜

感谢大王的赏赐

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

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

打赏作者

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

抵扣说明:

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

余额充值