01_d1-机器学习与特征工程概述
知识框架
### 1. 数据类型
- 数据类型
- 离散型数据:由记录不同类别个体的数目所得到的数据,又称计数数据,所
有这些数据全部都是整数,而且不能再细分,也不能进一步提高他
们的精确度。
- 连续型数据:变量可以在某个范围内取任一数,即变量的取值可以是连续的,如,长度、时间、质量值等,这类整数通常是非整数,含有小数
部分。
注:只要记住一点,离散型是区间内不可分,连续型是区间内可分
- 离散型数据:分类问题
- 连续型数据:回归问题(线性回归)
- 常用数据集数据的结构组成
- 结构:
- 特征值+目标值---->监督学习
- 特征值---->无监督学习
- 结构:
有些数据集可以没有目标值, 只有特征值(无监督学习)
适合用于聚类操作(物以类聚,人以群分)
2.特征提取&sklearn
- 特征抽取针对非连续型数据
- 特征抽取对文本等数据进行特征值化
1. 字典数据提取
- API: sklearn.feature_extraction.DictVectorizer
- DictVectorizer(sparse=True,…)
- DictVectorizer.fit_transform(X)
- X:字典或者包含字典的迭代器
- 返回值:返回sparse矩阵
- DictVectorizer.inverse_transform(X)
- X:array数组或者sparse矩阵
- 返回值:转换之前数据格式
- DictVectorizer.get_feature_names()
- 返回类别名称
- DictVectorizer.transform(X) 和fit方法
- 按照原先的标准转换
from sklearn.feature_extraction import DictVectorizer
def dict_vec():
"""
字典特征提取
:return:
"""
# 0.获取字典数据
data = [{'city': '北京','temperature':100},
{'city': '上海','temperature':60},
{'city': '深圳','temperature':30}]
# 1.创建字典提取对象将数据转换为矩阵
# dictvec = DictVectorizer(sparse=False)
# 转换为稀疏的矩阵
dictvec = DictVectorizer()
# 2.调用fit_transform 完成数据特征值的建立以及数据的转换
# data1 = dictvec.fit(data)
# print(data1)
# data = dictvec.transform(data)
# print(data)
data = dictvec.fit_transform(data)
# 获取特证名
print(dictvec.get_feature_names())
# 3.验证转换的数据
# 将数据转为数据类型的数据
print(data.toarray())
# 将数据转回初始数据
data = dictvec.inverse_transform(data)
print(data)
if __name__ == '__main__':
dict_vec()
2. 文本数据提取
- API:sklearn.feature_extraction.text.CountVectorizer
- CountVectorizer(max_df=1.0,min_df=1,…)
- 返回词频矩阵
- 不支持单个中文字!
![image.png](https://img-blog.csdnimg.cn/img_convert/c3321086e386b04f631cdf808a8e139c.png#align=left&display=inline&height=69&margin=[object Object]&name=image.png&originHeight=138&originWidth=1032&size=45350&status=done&style=none&width=516)
- CountVectorizer.fit_transform(X,y)
- X:文本或者包含文本字符串的可迭代对象
- 返回值:返回sparse矩阵
- CountVectorizer.inverse_transform(X)
- X:array数组或者sparse矩阵
- 返回值:转换之前数据格式
- CountVectorizer.get_feature_names()
- 返回值:单词列表
- one-hot 编码分析 热编码
- CountVectorizer(max_df=1.0,min_df=1,…)
3.jieba 分词 td-idf模型原理使用
准备句子,利用jieba.cut进行分词 实例化CountVectorizer将分词结果变成字符串当作fit_transform的输入值
- TF-IDF
TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,
并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分
能力,适合用来分类。
TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
词频(TF)= 某个词在文章中出现的次数/文章的总次数
逆文档频率(IDF)= log( 语料库的文档总数 / 包含该词的文档数 + 1 )
- API: sklearn.feature_extction.text.TfidfVectorizer
- TfidfVectorizer(stop_words=None,…)
- 返回词的权重矩阵
- TfidfVectorizer.fit_transform(X,y)
- X:文本或者包含文本字符串的可迭代对象
- 返回值:返回sparse矩阵
- TfidfVectorizer.inverse_transform(X)
- X:array数组或者sparse矩阵
返回值:转换之前数据格式
- X:array数组或者sparse矩阵
- TfidfVectorizer.get_feature_names()
- 返回值:单词列表
- TfidfVectorizer(stop_words=None,…)
4.特征预处理
- 通过特定的统计方法(数学方法)将数据转换成算法要求的数据
- 数值型数据:标准缩放:
- 1、归一化
- 2、标准化
- 3、缺失值
- 类别型数据:one-hot编码
- 时间类型:时间的切分
- 数值型数据:标准缩放:
- sklearn. preprocessing
1. 归一化
- API:sklearn.preprocessing.MinMaxScaler
- MinMaxScalar(feature_range=(0,1)…)
- 每个特征缩放到给定范围(默认[0,1])
- MinMaxScalar.fit_transform(X)
- X: numpy array 格式的数据 [n_samples,n_features]
- 返回值:转换后的形状相同的array
- MinMaxScalar(feature_range=(0,1)…)
- 应用场景:注意在特定场景下最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。
2. 标准化
- 特点:通过对原始数据进行变换把数据变换到均值为0,方差为1范围内
注:作用于每一列,mean为平均值,σ为标准差(考量数据的稳定性)
std成为方差,std= (〖(x1-mean)〗2+〖(x2-mean)〗2+…)/(n(每个特征的样本数)),σ= √std
- 对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
- 对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。
- API: scikit-learn.preprocessing.StandardScaler
-
StandardScaler(…)
- 处理之后每列来说所有数据都聚集在均值0附近方差为1
-
StandardScaler.fit_transform(X,y)
- X:numpy array格式的数据[n_samples,n_features]
- 返回值:转换后的形状相同的array
-
StandardScaler.mean_
- 原始数据中每列特征的平均值
-
StandardScaler.std_
- 原始数据每列特征的方差
-
- 应用场景:在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
3. 缺失值处理
![image.png](https://img-blog.csdnimg.cn/img_convert/5b4fc23b11eded980d747ebec496ddbc.png#align=left&display=inline&height=54&margin=[object Object]&name=image.png&originHeight=108&originWidth=586&size=19932&status=done&style=none&width=293)
- API: sklearn.preprocessing.Imputer
- Imputer(missing_values=‘NaN’, strategy=‘mean’, axis=0)
- 完成缺失值插补
- Imputer.fit_transform(X,y)
- X:numpy array格式的数据[n_samples,n_features]
- 返回值:转换后的形状相同的array
- Imputer(missing_values=‘NaN’, strategy=‘mean’, axis=0)
5.特征选择
特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,
特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯
定比选择前小,毕竟我们只选择了其中的一部分特征。
- 冗余:部分特征的相关度高,容易消耗计算性能
- 噪声:部分特征对预测结果有负影响
主要方法(三大武器):Filter(过滤式):VarianceThreshold> Embedded(嵌入式):正则化、决策树> Wrapper(包裹式)
- API:sklearn.feature_selection.VarianceThreshold
- VarianceThreshold(threshold = 0.0)
- 删除所有低方差特征
- Variance.fit_transform(X,y)
- X:numpy array格式的数据[n_samples,n_features]
- 返回值:训练集差异低于threshold的特征将被删除。
- 默认值是保留所有非零方差特征,即删除所有样本中具有相同值的特征。
- VarianceThreshold(threshold = 0.0)
- 其他特征选择:神经网络
6.特征降维
- API:sklearn. decomposition
- PCA(主成分分析)
本质:PCA是一种分析、简化数据集的技术
目的:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
作用:可以削减回归分析或者聚类分析中特征的数量
特征之间通常是线性相关的
- PCA(n_components=None)
- 将数据分解为较低维数空间
- PCA.fit_transform(X)
- X:numpy array格式的数据[n_samples,n_features]
- 返回值:转换后指定维度的array
其它降维方法: 线性判别分析LDA
https://blog.codinglabs.org/articles/pca-tutorial.html
https://blog.csdn.net/yimixgg/article/details/82894578
https://zhuanlan.zhihu.com/p/77151308
7.开发流程
算法是核心,数据和计算是基础
![image.png](https://img-blog.csdnimg.cn/img_convert/4ee82355240641e01c9f7b251e4e8080.png#align=left&display=inline&height=199&margin=[object Object]&name=image.png&originHeight=402&originWidth=360&size=29830&status=done&style=none&width=178)
8.机器算法基础
机器学习算法分类:
- 监督学习(既有特征值也有目标值)
- 分类(离散) k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归、神经网络
- 回归(连续) 线性回归、岭回归
- 标注 隐马尔可夫模型 (不做要求)
- 无监督学习(只有特征值没有目标值)
- 聚类 k-means
![image.png](https://img-blog.csdnimg.cn/img_convert/114a7d37553060f1ab0f676657390354.png#align=left&display=inline&height=181&margin=[object Object]&name=image.png&originHeight=362&originWidth=778&size=125120&status=done&style=none&width=389)
- 监督学习(英语:Supervised learning),可以由输入数据中学到或建立一个模型,并依此模式推测新的结果。输入数据是由输入特征值和目标值所组成。函数的输出可以是一个连续的值(称为回归),或是输出是有限个离散值(称作分类)。
- 分类:概念:分类是监督学习的一个核心问题,在监督学习中,当输出变量取有限个离散值时,预测问题变成为分类问题。最基础的便是二分类问题,即判断是非,从两个类别中选择一个作为预测结果;
- **回归:概念:**回归是监督学习的另一个重要问题。回归用于预测输入变量和输出变量之间的关系,输出是连续型的值。
- 无监督学习(英语:Supervised learning),可以由输入数据中学到或建立一个模型,并依此模式推测新的结果。输入数据是由输入特征值所组成。