以下内容皆为原创,制作不易,请帅锅、镁铝点点赞赞和关注吧❥(^_^)
一.提问环节
机器学习是什么?
机器学习就是通过自动分析大量数据去建立模型,训练模型,预测数据。
这么好记的概念,你应该记住了吧??
机器学习的概念关:http://t.csdnimg.cn/arRtn
机器学习的流程?
- 获取数据(有数据你才能得到模型啊,有数据你才能训练模型)
- 数据预处理(把那些无用的数据删掉,比如:空值,无意义的,乱码)
- 特征工程(对特征值进行处理)
- 机器学习算法训练--模型
- 模型评估(如果模型不行的话,从第二步开始重新看看,再优化一下,直到模型评估良好)
- 应用(模型好了,我们才能应用)
没错,这就是第一关的重点,我们这关主要是搞特征工程。
二.特征工程
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