1. 概述
1.1 发展
人工智能起点:1956年,达特茅斯会议。
机器学习:1980年代
深度学习:2010年代
1.2 应用场景
预测,图像,NLP等
1.3 机器学习
使用数学工具在数据集学习规律,应用规律解决新问题。
数据集 = 特征值 + 目标值(标签)
分类:
- 监督学习(有标签)
- 目标值为类别,离散,分类,k-近邻,贝叶斯决策树和随机森林,逻辑回归
- 目标值连续,回归,线性回归,岭回归
- 无监督学习/零样本学习(无标签)
- 聚类,k-means
- 强化学习(奖励和惩罚)
1.4 开发流程
- 数据获取,拿到数据集
- 数据处理
- 构建特征,特征工程
- 模型训练
- 模型评估
2. 数据处理
2.1 开源数据集
- sklearn
- kaggle
- UCI
2.2 sklearn数据集
2.2.1 sklearn数据集获取
- sklearn.datasets
- 从该数据集中获取到我们需要的具体的数据集
- datasets.load_*()
- 获取小规模的数据集
- datasets.fetch_*(data_home=None)
- 获取大规模的数据集,一般即时从网络上下载,data_home表示数据集下载的目录,默认参数为~/scikit_learn_data
2.2.2 小数据集获取
- sklearn.datasets.load_iris(),鸢尾花数据集
- sklearn.datasets.load_boston(),波士顿房价
2.2.3 大数据集获取
- sklearn.datasets.fetch_20newsgroups(data_home=None, subset=’all’)
- subset,可为train, test, all,表示加载训练集,测试集或全部
2.2.4 数据集返回值
load和fetch均返回的是datasets.base.Bunch(字典)
- data:数据特征数组,二维数组
- target:标签数组
- DESCR:数据描述
- feature_names:特征名,回归数据集是没有的
- target_names:标签名
访问:dict[key]=value or dict.ket=value
1 | from sklearn.datasets import load_iris |
2.2.5 数据集划分
数据集一般化为训练数据集和测试数据集,一般训练集会更大以获取更好的训练效果
数据集划分的api
sklearn.model_selection.train_test_split(arrays, *options)
- x数据集的特征值
- y数据集的标签值
- test_size 测试集的大小,一般为float,20%传0.2
- random_state随机数种子,不同种子采样的结果不同,相同的种子采样结果相同
- return 训练集特征值(x_train),测试集特征值(x_test),训练集目标值(y_trian),测试集目标值(y_test)
1 | from sklearn.model_selection import train_test_split |
2.3 特征工程
2.3.1 介绍
- pandas 用于清洗数据,基本处理
- sklearn 提供了强大的接口处理特征
2.3.2 特征提取
将数据转化为数字特征,方便计算机更好的理解数据
- 字典特征提取(特征离散化)
- 文本特征提取
- 图像特征提取(深度学习)
API:sklearn.feature_extraction
1. 字典特征提取
对字典数据进行特征值化
对字典中属于类别的数据转化为one-hot编码
- sklearn.feature_extraction.DictVectorizer(sparse=True,…)
- DictVectorizer.fit_transform(x) x为字典类型,返回sparse矩阵(稀疏矩阵)
- DictVectorizer.inverse_transform(x) 上述方法的逆方法,x为数组或sparse矩阵,返回字典类型
- DictVectorizer.get_feature_names() 返回类别的名称
默认返回的是稀疏矩阵,可以通过sparse = False取消
1 | from sklearn.feature_extraction import DictVectorizer |
2. 文本特征提取
方法1:CountVectorizer
对文本数据进行特征化
一般将单词、短语等作为特征基本单位
- sklearn.feature_extraction.text.CountVectorizer(stop_words=[]):stop_words选取停用词,这些停用词删除,默认英文的停用词(i,the,a,an这些无意义的词),返回词频矩阵
- CountVectorizer.fit_transform(x):以文本l列表为输入,返回sparse矩阵
- CountVectorizer.inverse_transform(x):上述方法的逆方法
1 | from sklearn.feature_extraction.text import CountVectorizer |
中文文本特征提取
需要用到结巴分词
1 | from sklearn.feature_extraction.text import CountVectorizer |
方法2:TfidfVectorizer
关键词:某句话中能够表征该句话特征的关键词
TF-IDF主要思想:某个词或短语在一篇文章中出现概率高,而在其他的文章中出现的概率低,则该词具有很好的类别区分能力,适合用来分类。可以用来评估一个词在一篇文章或者语料库中的重要程度。
- TF(term frequency):词频
- IDF(inverse document frequency):逆向文档频率,度量一个词语的普遍重要性,IDF=lg(总文章数/包含该词的文章数)。
- TF-IDF=TF*IDF
API:
- sklearn.feature_extraction.text.TfidfVectorizer(stop_word=[], …):返回词的权重矩阵
- TfidfVectorizer.fit_transform(x):x为文本,返回sparse矩阵
- TfidfVectorizer.inverse_transform(x):上述的逆方法
- TfidfVectorizer.get_feature_names():返回标签列表
1 | from sklearn.feature_extraction.text import TfidfVectorizer |
2.4 特征预处理
通过合适的转化函数将特征数据转化为更适合算法模型的数据
两种无量纲化(消除量纲的影响):
- 归一化
- 标准化
2.4.1 归一化
将原始数据映射到(0,1)的范围内
公式:x1 = (x - min) / (max - min), x2 = x1 *(mx - mn)+ mn,mx和mi为指定区间的值,默认mx=1,mi=0
API:
- sklearn.preprocessing.MinMaxScaler(feature_range=(0,1), …)
- MinMaxScaler.fit_transform(x):x为numpy array格式的数据[n_samples, n_features],返回同样格式的归一化后的数据
2.4.2 标准化
归一化的最大最小值选取容易受到异常值的影响,因此鲁棒性较差,适用于小数据场景
标准化:将原始数据变换到均值为0,标准差为1的范围内,(x - mean) / std
API:
- sklearn.preprocessing.StandardScaler():处理后的数据均值为0,标准差为1
- StandardScaler.fit_transform(x):x为numpy array类型数据,返回标准化后的同样形状的数据
2.5 特征降维
降低特征向量维数,即降低特征个数,得到一组互相”不相关“的主变量的过程
- 特征选择
- 主成分分析
2.5.1 特征选择
在包含冗余特征的数据中找出主要特征
方法
- Filter:过滤式
- 方差选择法:过滤低方差特征(特征间差距小)
- 相关系数:过滤相关系数大的特征(特征间相关性强)
- Embedded:嵌入式
- 决策树
- 正则化
- 深度学习
API
1 | sklearn.feature_selection |
1. 过滤式
- 删除低方差特征:将方差较低的那一列特征删除
- sklearn.feature_selection.VarianceThreshold(threshold = 0.0):threshold默认为0.0,即将方差为0的特征删除,可以自己设定
- Variance.fit_transform(x):x为特征矩阵,返回删除低方差特征后的特征矩阵
- sklearn.feature_selection.VarianceThreshold(threshold = 0.0):threshold默认为0.0,即将方差为0的特征删除,可以自己设定
- 皮尔逊相关系数:反应变量间相关关系的密切程度,相关系数的范围一般为-1到1,r>0,正相关,r<0,负相关,绝对值越接近1,相关性越大。
- 特征间相关性极高:选取其中一个;加权求和;主成分分析
2.5.2 主成分分析(PCA)
对数据维数进行压缩,尽可能在信息损失比较少的情况下降低维度。
API
- sklearn.decomposition.PCA(n_components=None):将数据分解到较低维数
- n_components:
- 小数:表示保留百分之多少的信息
- 整数:表示减少到多少特征
- PCA.fit_transform(x):X为特征矩阵,返回指定维数的特征矩阵
- n_components:
1 | from sklearn.decomposition import PCA |