算法 特征工程
2.2.1 为什么需要特征工程
2.2.2 什么是特征工程
sklearn 特征工程
pandas 数据清洗、数据处理
特征抽取 / 特征提取
机器学习算法 -统计方法 - 数学公式
文本类型 ->数值
类型 - 》数值 (One-Hot 编码)
特征提取
(将任意数据(如文本或图像)转换成可用于机器学习的数字特征)
**特征值化是为了计算机更好的去理解数据
字典特征提取(特征离散化)
文本特征提取
图像特征提取(深度学习)
sklearn中特征提取api sklearn.feature_extraction
字典特征提取
作用:对字典数据进行特征值化
sklearn.feature_extraction.DictVectorzer(sparse=True....)
vector 数学:向量, 物理:矢量
矩阵 matrix 二维数组
向量 vector 一维数组
父类 : 转换器类 (from sklearn.feature_extraction import DictVectorizer)
返回sparse 矩阵
sparse稀疏
将非零值 按位置表示出来
节省内存 - 提高加载效率
**
#1实例化一个转化器类 transfer = DictVectorizer(sparse=False) #2调用fit_transform() data_new = transfer.fit_transform(data) #显示特征名 print("特征名", transfer.feature_names_) print(data_new)
**
应用场景:
1)pclass,sex 数据集中类别特征比较多
1、将数据集的特征-》字典类型
2、DicVectorizer转换
2)本身拿到的数据就是字典类型
文本特征提取
把单词作为特征
句子、短语、单词、字母
特征:单词(特征词)
方法1:CountVectorizer
统计每个特征值出现的个数(同一句子中)
参数stop_words 停用词
def count_demo():
'''
文本特征抽取
:return:
'''
data = ['life is short , i like like python','life is too long,i dislike python']
#1 实例化一个转换器
tranfer = CountVectorizer()
#2调用fit_tranform
data_new = tranfer.fit_transform(data)
print("特证名",tranfer.get_feature_names_out())
print(data_new.toarray())
return None
关键词:在文章中,出现的次数很多,但是在其他类别的文章中出现很少
方法二:Tf-idf文本特征提取(可以找到那些词更为重要,更能找到关键词)
TF-IDF的主要思想是:如果某个词或者短语在一篇文章中出现的频率高,并且在其他文章中很少出现,则认为该词或者短语具有很好的类别区分能力,适合用来分类。
TF-IDF的作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
TF-IDF的公式:
词频(TF)指的是某一个给定的词语在该文件中出现的频率
逆向文档频率(IDF)是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语的文件的数目,再将得到的商取以10为底的对数得到
最后 tfidf = tf × idf
最终可以理解为重要程度
TF-IDF的重要性:
分类机器学习算法进行文章分类中前期数据处理方式
在数据集划分后,训练集用fit_transform 测试集用transform是因为
训练集和测试集的每个样本都是从同一分布中抽样得到的,所以在训练集中fit之后在测试集就不能再fit了,要不然二者可能不是同一分布模型,预测效果会很糟糕。
处理中文文本
需要先分词
CountVectorizer 与 DicVectorizer 的对比
1. DictVectorizer(sparse=False) DicVectorizer在转换成矩阵时,是可以直接加参数sparse =False ,不让其返回稀疏矩阵。 而,CounterVectorizer()不可以使用该参数,只能在调用fit_ transform后,用返回值调用toarray()
特征处理
什么是特征处理?就是统一量级
为什么我们要归一化/标准化?特征是按照相同等级来进行计算的,但由于每个特征的数值范围不同导致偏小的特征不起作用。
无量纲化
归一化
归一化公式:
def minmax_demo():
'''
归一化
:return:
'''
#1 获取数据
data = pd.read_csv("./data/dating.txt")
print(data)
data = data.iloc[:,:3]
print(data)
#2 实例化一个转换器类
tranfer = MinMaxScaler()
#3 调用fit_transform
data_new = tranfer.fit_transform(data)
print("data_new\n",data_new)
return None
在归一化时会出现异常值:一般在最大值、最小值
归一化总结:
注意最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。
标准化
公式: (x-mean)/std
mean为平均值,std为标准差
标准差反应的是集中程度
标准化总结
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据的场景。
归一化与标准差
对于归一化来说:如果出现异常点,影响到了最大值和最小值,那么结果显然会发生改变。
对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响不大,从而方差改变较小。
降维
降维 - 降低维度
降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程。
降维的两种方法
特征选择
主成分分析(可以理解成一种特征提取的方式)
特征选择的定义
数据中包含冗余或相关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征。
特征选择的方法
Filter过滤式
方差选择法:低方差特征过滤(将低方差的特征过滤掉)
相关系数-特征与特征之间的相关程度
{皮尔逊相关系数 : 取值范围 -1<=r <= 1
1.当 r>0时,表示两变量正相关,当r<0时,表示两变量负相关,when r = 0,表示两个变量毫无关系
2.一般划分为三个等级:|r| < 0.4 低相关; 0.4<= |r| <= 0.7; 0.7 <= |r| < 1 高度相关
}
Embeded嵌入式
决策树
正则化
深度学习
主成分分析(pca)
定义:就是在降维时,能够尽量保存 更多的原有特征
sklearn.decomposition.PCA(n_components=None)
n_components:
如果为小数:表示保留百分之多少的信息
如果为整数:减少到多少特征