1. 机器学习遇到问题概述
了解场景和目标
了解评估准则
认识数据
数据预处理(清洗,调权)
特征工程
模型调参
模型状态分析
模型融合
2. 机器学习算法简述
按照不同的分类标准,可以把机器学习的算法做不同的分类。
2.1 从机器学习问题角度分类
我们先从机器学习问题本身分类的角度来看,我们可以分成下列类型的算法:
机器学习中有一大部分的问题属于『监督学习』的范畴,简单口语化地说明,这类问题中,给定的训练样本中,每个样本的输入xx都对应一个确定的结果yy,我们需要训练出一个模型(数学上看是一个x→yx→y的映射关系ff),在未知的样本x′x′给定后,我们能对结果y′y′做出预测。
3.1 数据预处理
- 数据清洗
- 不可信的样本丢掉
- 缺省值极多的字段考虑不用
- 数据采样
- 下/上采样
- 保证样本均衡
- 工具
hive sql/spark sql
3.2 特征工程
- 数值型
- 类别型
- 时间类
- 文本型
- 统计型
- 组合特征
1.从文本中抽取特征
2. 标准化、取均值、方差
参考两个文档:1.sklearn数据预处理文档 2.API Reference
3.2.1 标准化
去除均值和方差缩放:通过(X-X_mean)/std计算每个属性(每列),进而使所有数据聚集在0附近,方差为1.
(1)、sklearn.preprocessing.scale()
直接将给定数据进行标准化
X_scaled.mean(axis=0)
array([ 0., 0., 0.])
X_scaled.std(axis=0)
array([ 1., 1., 1.])
(2)、sklearn.preprocessing.StandardScaler()
可保存训练集中的均值、方差参数,然后直接用于转换测试集数据。
3.2.2 缩放到指定范围 Scaling & Binarization
将属性缩放到一个指定的最大和最小值(通常是1-0)之间,这样处理可对方差非常小的属性增强其稳定性,也可维持稀疏矩阵中为0的条目。 但这里我们会有一个binarization,是保留我们最想要的最大值以及最小值,如下所示,太大的我们不要,太小的我们不取,也就是将连续值切除。
preprocessing.MinMaxScaler(feature_range=(0, 1), copy=True)
计算公式:
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std * (max - min) + min
其中
feature_range : tuple (min, max), default=(0, 1)
minmaxscaler = preprocessing.MinMaxScaler().fit(X)
minmaxscaler.transform(X)
array([[ 0.5 , 0. , 1. ],
[ 1. , 0.5 , 0.33333333],
[ 0. , 1. , 0. ]])
minmaxscaler.scale_
array([ 0.5 , 0.5 , 0.33333333])
minmaxscaler.min_
array([ 0. , 0.5 , 0.33333333])
3.2.3 对值进行一个Encoding
3.2.4 正则化
对每个样本计算其p-范数,再对每个元素除以该范数,这使得每个处理后样本的p-范数(l1-norm,l2-norm)等于1。如果后续要使用二次型等方法计算两个样本之间的相似性会有用。
preprocessing.Normalizer(norm=’l2’, copy=True)
normalizer = preprocessing.Normalizer().fit(X)
normalizer.transform(X)
array([[ 0.40824829, -0.40824829, 0.81649658],
[ 1. , 0. , 0. ],
[ 0. , 0.70710678, -0.70710678]])
3.3 特征选择
- 过滤型
from sklearn.feature_selection import SelectKBest
- 包裹型
from sklearn.feature_selection import RFE
对特征重要度进行排序,后剔出特征
- 嵌入型
- feature_selection.SelectFromModel
- Linear model,L1正则化
L1正则化后,对结果影响不大的特征权重会变成0,会基于模型来做Selection
3.4 模型选择
- sklearn cheetsheet提供的候选
- 交叉验证(cross validation)
- K折交叉验证(K-fold cross validation)
3.5 模型参数选择
- 交叉验证(cross validation)
参考链接:Link1
3.6 模型状态评估
3.6.1 模型状态
- 过拟合(overfitting/high variance)
- 欠拟合(underfitting/high bias)
3.6.2 学习曲线
具体参考我的github链接:
3.7 模型融合
- 群众的力量是伟大的,集体智慧是惊人的
- Bagging
- 随机森林/Random forest
2. 站在巨人的肩膀上,能看得更远
- 模型stacking
3.一万小时定律
- Adaboost
- 逐步增强树/Gradient Boosting Tree
3.7.1 模型融合:Bagging
- 模型很多时候效果不好的原因是什么?Overfitting
- 如何缓解?
- 少给点题,别让它死记硬背这么多东西
- 多找几个同学来做题,综合一下他们的答案
1. 用一个算法
Ø 不用全部的数据集,每次取一个子集训练一个模型
Ø 分类:用这些模型的结果做vote
Ø 回归:对这些模型的结果取平均
2.用不同的算法
Ø 用这些模型的结果做vote 或 求平均
3.7.2 模型融合:Stacking
1. 用多种predictor结果作为特征训练
3.7.3 模型融合:Boosting
Adaboost
问: 考得不好的原因是什么?
1. 还不够努力,练习题要多次学习
重复迭代和训练
2. 时间分配要合理,要多练习之前做错的题
每次分配给分错的样本更高的权重
3. 我不聪明,但是脚踏实地,用最简单的知识不断积累,成为专家
最简单的分类器的叠加