自学和实践机器学习的应用时,记录的简单流程,不全面,也可能不是非常专业,但还是比较实用,可操作,保存一份。
- 了解场景和目标
能采集到什么数据;要解决的是一个什么问题;
2、了解评估准则
计划采用什么准则,比如:准确率;
3、认识数据
比如观察数据是否平衡、数据的分布形态等;
可以利用一些方式来认识数据,常用的数据了解方法之一是数据可视化,把数据从文件或者数据库读入内存后,一般通过可视化工具,比如matplotlib、seaborn等,,把数据根据一定的标准展示为柱状、散点等图形,直观的查看数据的特点,思考特征处理的方法。
4、数据预处理:
对于机器学习的训练样本来讲,数据的一些特点是有利于提高模型训练的结果,比如:样本的均衡性、离心点较少等等。因此,在特征提取前,一般要进行数据预处理。
(1)、数据清洗(比如:剔除离心点,不可信的样本丢掉,缺省值极多的字段考虑不用);
(2)、调权(设置权重);
(3)、数据采样(下/上采样)
(4)、保证样本均衡(比如:正负样本比例是10:100,就可以考虑把负样本分成10份,和正样本组成10个数据集)等等
对于自然语言处理,有些常用的数据预处理方式:
(1)、分词;
(2)、词性标注;
(3)、词干提取、词形;
(4)、去除停止词等;
常规库就是numpy和pandas;对于自然语言处理,常用的一些库可以做相关内容处理的有NLTK、JIEBA、Stanford自然语言处理库
5、特征提取:
特征提取就是把特征变为计算机可以理解的、要拿来“喂”给模型用来训练的特征值。
- 数值型
- 类别型
- 时间类:
常做的特征处理:间隔型(比如:时间变为距离春节还剩多少日来作为特征值)、连续型(结合其他特征进行组合:比如一周内点击多少次)、离散型(比如:分为工作日和非工作日,饭点和非饭点)
- 文本类:
常常提取特征,比如:n-gram;TF-IDF;bag of words; Levenshtein 距离;word2vec;
- 统计型:
- 组合特征:
注意:sklearn.feature_extraction,封装了很多特征处理的方法和函数
sklearn.preprocessing,提供了标准化、取均值、零一化(二值化)、按比例缩放、分类特征编码(比如:红、黄、蓝编码成为[0,0,1]、[0,1,0]、[1,0,0])等函数。
6、模型选择:
在sklearn.model_selection
下面会有很多和模型选择相关的函数。
比如:常用的有交叉验证的方法选择,比如默认的K-folder。
不同应用场景会有一些常规的模型,scikit-learn给出了一张模型选择的表格,是一个可以参考的工具。
7、模型调参:
在模型选定之后,用隔点搜索等来确定该模型的超参数。比如:
model_selection.GridSearchCV(estimator, ...) | 对估计器的指定参数值进行详尽搜索 |
8、模型状态分析:
分析的目标最常见的就是训练出来的模型是否有overfitting或者underfitting,也就是看看它们有没有高方差或者高偏差。
常用的一种分析手段或者工具,就是learning_curve,学习曲线。
根据sklearn的版本不同,也可能是在这里:
学习曲线:
过拟合和欠拟合的常见处理思路:
过拟合:
增加样本;
进行正则化处理,或增强正则化程度,从而减弱模型的各项的效力。
欠拟合:
增加特征值;
特征选择;
减弱正则化程度;
9、模型融合:
常用方法:
方法1:bagging--------群众的力量是巨大的
这是一个概率取胜的方法。即,针对某种模型或多种模型,选择多个训练假设器,estimator,然后在数据集上随机选择不同的数据,每个训练器训练出不同的模型以及参数,然后对结果进行vote等方式,选择结果。
Sklearn给提供了接口函数:
方法2:stacking----站在巨人的肩膀上,类似的还有blending
把各个预测器的结果,作为第二层预测的输入,通过投票或者线性方程等再加工,得到最后的结果。
方法3:Adaboost
略,没讲。
Sklearn提供的接口函数,都在这里: