机器学习知识点整理(按实践流程排序)

一 数据预处理/数据清洗

描述性统计

作用:查看数据分布特点,获取明显异常点
df.describe()

连续型变量

箱线图
频率分布直方图

离散型变量

熟练使用DataFrame.groupby().size(), agg(), apply() 函数
计算不同组别分布数量

缺失值处理

缺失值判断
df.info(), 基本统计
sum(df.isnull())
df.isnull().any() 含缺失值的列
df,loc[:,df.isnull().any()] 缺失值定位

常见处理方式

  1. 删除:缺失较多(70%)
  2. 简单填充: 均值,众数
  3. 作为单独类别处理:缺失有特殊意义,如透露样本信息等
    问题:xgboost缺失值处理
  4. 专业算法预测:
    问题: 什么时候有必要使用算法预测?
  5. 重测数据

异常值处理

异常值判断

统计学方法:
标准化残差 |( x - mean(x) ) / np.std(x) | >3,
前提(缺陷):满足正态分布

专业算法:(待完善
非监督算法 (聚类)

处理方式
可以当作缺失值处理
连续变量离散化
问题:(1)连续变量离散化好处? (2)什么时候使用one-hot编码?
问题:模型复杂度与特征工程关系

类型转换

  1. 连续型: 归一化
    问题:为什么要归一化?
    梯度下降速率,支持向量机要求
  2. 离散变量:编码方式
    2.1 无序离散变量(待完善):
    one-hot编码 pd.get_dummies()
    适用:无序变量,
    特点:n取值返回n列
    优点:给模型增加非线性特性
    缺点:产生大量稀疏矩阵,计算耗内存,时间,除非算法本身有相关优化,如svm
    bin count: 用不同取值出现的频数编码,再归一化
    embedding:
    2.2 有序离散变量:
    因子化: pd.factorize(), LabelEncoder()
    适用:有序变量
    特点:n取值返回1列(0,1,2,…,n-1)
    优点:只返回一列,节省内存,时间
    局限性:取值必须有序
    缺点:对于y而言,依然为线行不可分,简单模型易欠拟合,复杂模型容易过拟合

相关性矩阵

df.corr()
查看特征与标签相关性,初步预估模型结果

二 确定评估指标

确定最终模型适合的评估指标(优化模型的依据)
常见的模型评估指标:

分类

  1. 准确率(accuracy):
    公式:(TP+TN)/(TP+TN+FP+FN)
  2. 精度(precision,查准率):
    公式: TP/(TP+FP)
  3. 召回率(recall,查全率):
    公式: TP/(TP+FN)
  4. f1_score:
    公式: 2/(1/precision +1/recall)
    优点:综合考虑precision和recall
  5. ROC曲线:
    横轴: FPR 没病的人有多少判断为有病 FPR=FP/(FP+TN)
    纵轴: TPR 有病的人有多少判断为有病 TPR=TP/(TP+FN)
    auc越大,FPR越低,TPR越高
    问题:(1)数据平衡性会影响auc吗?(2)什么样的roc图像最优?
  6. PR曲线:
    横轴:Recall
    纵轴:Precision
  7. 混淆矩阵
    常用,最真实

回归

  1. MSE
  2. MAE
  3. R^2
    问题:什么时候用什么指标?

三 特征构造

实践中理解
头脑风暴,尽可能多,初次尝试先不筛选特征
问题:如何确定特征数量信息足够解决任务?过拟合训练

特征组合

特征交叉

问题:特征组合和交叉区别?

四 训练集类别平衡性处理

数据不平衡的后果

Naive behavor,在训练集数据类别差异较大的情况下,模型容易将所有样本判断为占比较多的类别。
DataFrame.y.value_counts()

问题
一定有影响吗?什么时候影响较大?
网上数据:10:1 引起注意,20:1必须处理
个人经验:
(1)与特征工程完善度有关;
(2)与网上数据稍有出入;

常见处理方式

  1. 数据重采样(均改变样本分布)
    (1)过采样:随机过采样,合成少数类过采样技术(smote)
    过采样运行速度慢
    (2)欠采样:随机欠抽样,集成欠采样(EasyEnsemble)
    欠采样运行速度快,但可能丢失关键信息(集成欠采样在全局看来不会丢失)
    问题
    (1)常规机器学习假设?
    (2)训练集,验证集,测试集数据分布一定要一致吗?
    (吴恩达:机器学习笔记)
    (3)什么是数据不匹配问题?如何解决?
    (4)数据不匹配如何调参?
    (5)如何判断训练集和测试集样本分布是否相同?对抗训练

  2. 代价敏感学习
    (1)样本加权(模型训练中)
    当小比例样本划分错误时候,给予更大的罚分
    实践: 调节class_weight参数
    (2)阈值移动(模型训练后)
    计算出某标签概率后,大于标签先验概率才视作该标签

注意:比较重采样与代价敏感学习效果差距(O2O实践PPT)

五 模型训练

掌握常见模型推导(代价函数),理论,优缺点及应用场景

普通最小二乘法 vs lasso回归 vs 岭回归
问题:
(1)什么是正则化?
(2)l1正则化 vs l2正则化? 应用场景?
(3)梯度下降推导,问题,改进

逻辑回归
问题:
(1)为什么不用二次代价函数?
(2)交叉熵代价函数推导
(3)应用场景
(4)风控问题的对模型的优化

svm
问题:
(1)优缺点;
(2)适用场景
(3)推导

随机森林vs极端随机森林
问题:
(1)决策树相关:信息增益ID3,信息增益率C4.5,gini系数Cart,不同版本树区别;
(2)随机森林vs极端随机森林;
(3)如何理解bagging:“好而不同”,“方差”,“并行”,“投票”
(4)增大模型多样性方法:特征扰动,抽样扰动,输出扰动,输入参数扰动,融合多个扰动(随机森林)

adaBoost vs gbm vs xgboost
问题:
(1)推导
(2)理论思路:
adaboost:分错样本在下一个学习器加大权重;
gbm,xgboost:下一个学习器针对上一个学习器的预测參差进行预测(加法模型)
(3)xgboost vs gbm 重要
(4)bagging vs boosting
(5)泛化误差的分解

神经网络
问题:
(1)感知机模型;
(2)推导;
(3)代价函数的选择:
二次代价函数缺陷,交叉熵代价函数优点
(4)常见代价函数优缺点

分类模型

(1)线性模型:lasso回归,岭回归
问题:
l1,l2正则化?
各自适用场景

(2)广义线性模型:逻辑回归(sigmoid函数,交叉熵代价函数)
问题:
为什么选择sigmod函数?
为什么交叉熵函数?
推导交叉熵函数,梯度下降求解
优缺点,适用场景,如何引入给模型非线性

(2)支持向量机SVM
问题:
目标函数?
硬间隔,软间隔?
非线性可分数据如何处理?
常用核函数(线性核,高斯核,多项式核,拉普拉斯核)
优缺点,适用场景

(3)决策树
问题:
信息熵,条件熵
信息增益(互信息),信息增益比率,gini系数
ID3,C4.5,Cart树比较
缺失值处理
优缺点,适用场景

(4)KNN
(5)集成模型:
bagging:随机森林,极端随机森林
boosting:adaBoost,GBM,XGBoost,lightGBM
(6)神经网络
感知机模型
二次代价函数存在的问题
交叉熵代价函数

回归模型

(1)线性模型:普通最小二乘法线性回归,Lasso回归,岭回归
(2)支持向量机回归
(3)随机森林回归
(4)集成模型:bagging,boosting

六 调参

相关参数

线性模型:正则化程度C,学习率

支持向量机:

  1. 正则化参数:C, 越大表示分类犯错罚分越大,越容易过拟合
  2. 核函数:
    线性核:C
    高斯核:gamma,与C调节方向一致,调节相似函数宽度
    多项式核:degree 阶数

决策树:

  1. 最大深度:max_depth
  2. 叶节点最小样本数:min_samples_leaf
  3. 最大特征数: max_features
  4. 内部节点再划分最小样本数:min_samples_split

KNN:

  1. 邻居数:K
  2. 邻近点权重:等权重/依据距离赋权

随机森林:

  1. 最大深度:
  2. 叶节点最小样本数
  3. 最大特征数:
  4. 抽样比例:
  5. 估计器数目:n_estimators

XGBoost:
1.boost参数: learning_rate, n_estimators
2.树参数: max_depth, min_class_weight, max_features
3. 其他参数:n_jobs, random_state

GBM
1.boost参数: learning_rate,n_estimators
2.树参数: max_depth,min_samples_leaf,max_features
3.其他参数: n_jobs,random_state

  • 注意:XGBoost与GBDT调参比较特殊(多轮调参)

调参方法

网格搜索GridSearchCV:给定范围,遍历所有参数组合
优点:简单
方式:先确定大范围,再确定小范围
缺陷:慢,对于非凸代价函数,可能陷入局部最优解

随机搜索RandomizedSearchCV
优点:快速
缺点:对于非凸代价函数,可能陷入局部最优解

贝叶斯优化
思路:依据后验信息不断更新目标函数先验分布,预测最优参数可能出现的位置
优点:(1)迭代次数少,速度快; (2)对于非凸代价函数依然稳健

七 模型评估

泛化误差分解

期望泛化误差=偏差+方差+噪声
偏差:学习算法的性能(在数据充分前提下,算法预测输出与实际值偏离程度)
方差:数据是否充分(数据扰动的影响)
噪声:学习任务本身的难度(数据集标注与实际值偏离)

判断模型状态

学习曲线learning_curve

过拟合

表现在训练集与验证集服从同一分布下,低trainSet error 高testSet error
解决
(1)增加训练集数量;
(2)减少特征数目;
(3)调参:
正则化程度:增大模型正则化程度
模型参数:svm,树类,xgboost,神经网络
(4)早停法
(5)数据清洗:剔除异常值等

欠拟合

表现:高trainSet error 高testSet error
解决
(1)增加特征数量,构造特征(组合,交叉);
(2)调参

数据不匹配

吴恩达:机器学习笔记

八 特征选择

特征选择常用方法:

过滤式filtering

特点:
(1)统计学方法过滤,衡量特征与输出的关系;
(2)特征选择后再进行训练,两者独立
方法:
a. 相关系数
b. 方差
c. 卡方检验
d. 互信息
在没有什么思路时,优先使用c.d.

包裹式wrapper

特点:训练模型后,以训练模型结果确定是否加入/减少该特征 (评估指标:AIC,BIC等)
方法:启发式搜索(递归消除特征法RFE)

嵌入式embeding

特点:模型训练结束后,同时也完成特征的选择,一般选择可以获取特征系数以及特征重要程度的算法
方法:
(1)基于L1,L2正则化选择(如逻辑回归,lasso回归,岭回归);
(2)树类模型:特征重要度,越接近根节点越重要;

九 重跑模型

根据选择的特征重跑,重新调參

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值