机器学习(算法篇)
2023-08-29 21:01:54 11 举报
AI智能生成
登录查看完整内容
为你推荐
查看更多
机器学习(算法篇)
作者其他创作
大纲/内容
Python语言的机器学习工具
Scikit-learn包括许多知名的机器学习算法的实现
Scikit-learn文档完善,容易上手,丰富的API
scikit_learn介绍
知识准备
sklearn.datasets.load_*()
小数据集:
sklearn.datasets.fetch_*()
大数据集:\t
获取数据集
data:特征数据数组,
target: 目标值数组,
DESCR:数据描述
target_names:目标值名
数据集包含内容
sklearn数据集介绍
data -- 需要关联到的数据集
hue -- 最后显示的种类(目标值)
fit_reg -- 是否进行线性拟合
seaborn.lmplot()
查看数据分布
训练数据(训练集) -- 模型构建
测试数据(测试集) -- 模型评估
分类
训练集的特征值
测试集的特征值
训练集的目标值
测试集的目标值
返回值:调用返回顺序:
x 数据集的特征值
y 数据集的目值值
训练集 -- (70% - 80%)
测试集 -- (20% - 30%)
test_size 测试集的大小,一般为float
传入的参数:
sklearn.model_selection.train_test_split()
api的使用
数据集分类
获取数据
缺失值处理
缩小数据范围
异常数据处理
train_test_split
留出法:
sklearn.model_selection.LeaveOneOut
loo.split()
优点:评估结果往往被认为比较准确。
缺点:当数据量大的时候,效率极低。
优缺点
留一法:
留出法
gridsearchCV
确定验证集的时候,直接从数据集中获取,没有考虑分类
KFlod
确定验证集的时候,直接从数据集中获取,需要考虑分类
StratifiedKFold
StratifiedShuffleSplit
交叉验证法
每次进行有放回的抽样,最后得到的结果中,有36.8%的数据抽不到,然后把这部分数据当成测试集
优:在数据集小的时候,用起来非常有效
缺:最后确定的测试集中,数据的分布可能和训练集不同。
自助法
数据分割
imbalanced-learn
api:
减少数量较多那一类样本的数量,使得正负样本比例均衡。
欠采样方法
增加数量较少那一类样本的数量,使得正负样本比例均衡。
过采样方法
处理方式:
1.类别不平衡数据集基本介绍
增加一些少数类样本使得正、反例数目接近,然后再进行学习。
imblearn.over_sampling.RandomOverSampler
随机找一些点(少类别的点)进行复制
造成模型训练复杂度加大
造成模型的过拟合问题
缺点:
随机过采样
imblearn.over_sampling.SMOTE
可以避免过拟合问题
smote【**】
方法:
2.过采样方法
去除一些多数类中的样本使得正例、反例数目接近,然后再进行学习。
imblearn.under_sampling.RandomUnderSampler
会造成数据丢失
随机欠采样
3.欠采样方法
类别不平衡数据处理方式
...
数据基本处理
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程
定义
通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程
定义:
注意最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响
这种方法鲁棒性较差,只适合传统精确小数据场景。
小结:
归一化
sklearn.preprocessing.StandardScaler( )
在已有样本足够多的情况下比较稳定
适合现代嘈杂大数据场景。
小结
标准化
包含内容:
特征预处理
将任意数据(如文本或图像)转换为可用于机器学习的数字特征
sklearn.feature_extraction.DictVectorizer()
对于特征当中存在类别信息的我们都会做one-hot编码处理
字典特征提取
sklearn.feature_extraction.text.CountVectorizer()
文本内容抽取(英文)
文本内容抽取(中文)
sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度
from sklearn.feature_extraction.text import TfidfVectorizer
tf_idf的使用
文本特征提取
图像特征提取(深度学习将介绍)
特征抽取
指在某些限定条件下,降低随机变量(特征)个数
删除低方差的一些特征
目的:
sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
低方差特征过滤
一般可按三级划分:|r|<0.4为低度相关;0.4≤|r|<0.7为显著性相关;0.7≤|r|<1为高度线性相关
判断标准:
from scipy.stats import pearsonr
皮尔逊相关系数
from scipy.stats import spearmanr
api
斯皮尔曼相关系数
相关系数
特征选择 -- 过滤式
高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变
sklearn.decomposition.PCA(n_components=None)
主成分分析
降维的两种方式
特征降维
包含内容
特征工程
理解
sklearn.neighbors.KNeighborsClassifier()
n_neighbors的选取对结果有影响
algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’}
参数
欧式距离
曼哈顿距离
切比雪夫距离
p=1时,就是曼哈顿距离;
当p=2时,就是欧氏距离;
当p→∞时,就是切比雪夫距离。
闵可夫斯基距离
常见距离公式
连续属性
存在序的关系,转换为连续值求解
不存在序的关系,转换为向量的形式
离散属性
距离分类
距离度量
容易受到异常点的影响
意味着整体模型变得复杂,容易发生过拟合
K值过小:
受到样本均衡的问题
k值过大:
发生完全不足取的情况
此时训练的模型完全失效
判断的类别只会选择样本中样本数最多的类别
K=N(N是训练样本的个数)
K值的选择
对训练数据进行快速k近邻搜索
目标
构造根节点
通过递归方式去不断的构造
构建树
最近领域搜索
kd树实现思路
kd树
简单,易于理解,易于实现
优点:
懒惰算法,对测试样本分类时的计算量大,内存开销大
必须指定K值,K值选择不当则分类精度不能保证
K-近邻总结
使用场景:小数据场景,几千~几万样本
k-近邻算法
利用回归方程(函数)
对一个或多个自变量(特征值)和因变量(目标值)之间关系
进行建模的一种分析方式。
线性关系(重点)
非线性关系
线性回归分类
最小二乘
1. 损失函数:
只是适合小样本数据的计算
正规方程(了解)
单变量 -- 函数的微分
多变量 -- 向量
1.梯度
首先要指定初始值点[完全随机的]
知道一个学习率(步长)
2.梯度下降思路
过大 -- 避开了极小点
"-"(为什么是负梯度)
2. 优化算法
线性回归的损失和优化原理
让全部数据参与运算
运算效率低
只是随机选择一个样本进行计算
计算速度增加,但是容易受到异常值的影响
选择一部分数据参与运算
结合了前两者
在计算过程中,对前面的梯度,维持一个均值
随机平均梯度下降算法(Stochastic average gradient descent)
梯度下降方法介绍
fit_intercept:是否计算偏置
LinearRegression.coef_:回归系数
LinearRegression.intercept_:偏置
属性
sklearn.linear_model.LinearRegression()
正规方程对应的api:
sklearn.linear_model.SGDRegressor()
梯度下降法对应的api
评估-均方误差api
线性回归
带有L2正则化的线性回归
岭回归理解
alpha -- 正则化力度
slover -- 优先会选择随机平均梯度下降法(SAG)
normalize -- 是否对特征值进行标准化
sklearn.linear_model.Ridge()
岭回归中正则化变化对结果的影响
LinearRegression(不能解决拟合问题)
岭回归
小规模数据:
SGDRegressor
大规模数据:
回归算法总结
线性回归的改进-岭回归
逻辑回归就是解决二分类问题的利器
逻辑回归的输入就是线性回归输出的结果
激活函数 -- sigmoid函数
逻辑回归理解
损失函数: 对数似然损失
1) 损失
提升原本属于1类别的概率,降低原本是0类别的概率。
2) 优化
损失与优化
solver -- 可选择的梯度下降方式
penalty -- 正则化方式
C -- 正则化力度
sklearn.linear_model.LogisticRegression()
逻辑回归(分类)
一棵由多个判断节点组成的树
理解:
就是"混乱"程度的度量
如果信息越混乱-- 熵值越高
如果信息越有序-- 熵值越低
判断
-plogp
熵
以某特征划分数据集前后的熵的差值。
entroy(前) - entroy(后)
信息增益
信息增益比
从数据集D中随机抽取两个样本,其类别标记不一致的概率
Gini(D)值越小,数据集D的纯度越高
基尼值
基尼值和基尼指数
决策树分类原理
目的:防止过拟合
通过叶子节点的样本数量进行判断
通过树的深度进行判断
通过熵值进行判断
预剪枝
后剪枝
方法
cart剪枝
使用划分决策树的标准
criterion --
树的最大深度
max_depth --
sklearn.tree.DecisionTreeClassifier()
简单的理解和解释,树木可视化。
决策树学习者可以创建不能很好地推广数据的过于复杂的树,这被称为过拟合。
随机森林(集成学习的一种)
改进:
决策树总结
如何选择划分点?
如何决定叶节点的输出值?
1.需要确定问题
1.选择最优切分特征j与切分点s
3.递归完成前面两步骤,直到满足条件停止
4.确定分割点,输出函数
2.流程
回归决策树
决策树
一件事情发生的可能性
1.概率定义
联合概率
条件概率
相互独立
2.其他概率概念
p(C|W) = [p(W|C)p(C)]/[p(W)]
c -- 文档类别
w -- 文档特征值
3.贝叶斯公式
目的:为了计算中,避免部分数据值为零,导致结果为0的情况
分子 -- +a
分母 -- +am
4.拉普拉斯平滑系数
基本概念
alpha:拉普拉斯平滑系数
sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
3.分类准确度高,速度快
2.常用于文本分类
1.分类效率不错
优点
1.如果特征属性有关联时其效果不好
2.假设的先验模型会导致效果不好
缺点
朴素贝叶斯算法总结
朴素贝叶斯
寻找到一个超平面使样本分成两类,并且间隔最大。
超平面
间隔最大
支持向量
SVM中常见名词
只在数据是线性可分离的时候才有效
对异常值非常敏感
硬间隔
尽可能在保持最大间隔宽阔和限制间隔违例之间找到良好的平衡
间隔惩罚通过C值确定
软间隔
硬间隔和软间隔
0/1损失函数
Hinge损失函数【*****】
Logistic损失函数
SVM的损失函数【***】
SVM算法原理
一个从低维空间到高维空间的映射
线性核[**]
多项式核
RBF核[***]
Sigmoid核
常见核函数:
SVM的核方法
SVM回归是让尽可能多的实例位于预测线上,同时限制间隔违例(也就是不在预测线距上的实例)
SVM回归
sklearn.svm.……
SVC和NuSVC方法基本一致,唯一区别就是损失函数的度量方式不同
NuSVC中的nu参数和SVC中的C参数;
LinearSVC是实现线性核函数的支持向量分类,没有kernel参数。
在高维空间中非常高效;
即使在数据维度比样本数量大的情况下仍然有效;
通用性:不同的核函数与特定的决策函数一一对应;
SVM的优点:
如果特征数量比样本数量大得多,在选择核函数时要避免过拟合;
对缺失数据敏感;
对于核函数的高维映射解释力不强
SVM的缺点:
SVM 算法总结
SVM
期望最大化
一个为期望步(E步),
另一个为极大步(M步)
1.是什么
1.初始化参数
2.计算分布
3.重新估计参数
4.判断参数是否”重合“,如果”重合“,结束,否则继续循环
2.EM算法的流程
EM 算法
状态空间中从一个状态到另一个状态转换的随机过程。
1.概念
无记忆性:下一状态的概率分布只能由当前状态决定,在时间序列中它前面的事件均与之无关。
马尔科夫链
是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。
隐含状态
可见状态
转换概率
输出概率
常见概念
1.隐马尔可夫模型
一类序列数据是可以观测到的结果
观测序列:
不能观察到的结果,但是在里面真是存在
隐藏状态序列,简称状态序列:
隐藏状态初始概率分布
状态转移概率矩阵
观测状态概率矩阵
2.HMM模型基础
任意时刻的隐藏状态只依赖于它前一个隐藏状态
齐次马尔科夫链假设:
任意时刻的观察状态只仅仅依赖于当前时刻的隐藏状态.
观测独立性假设
3.HMM模型假设
HMM简介
即已知模型和观测序列,求观测序列出现的概率
求解问题:
前向算法:从 1 ---> N 一步步进行求解
后向算法:从 N ---> 1 一步步进行求解
思路:
前向后向算法评估观察序列概率
即给定模型和观测序列,求给定观测序列条件下,最可能出现的对应的隐藏状态序列。
1.解决问题:
输出:最有可能的隐藏状态序列
1.初始化局部状态:
3.计算时刻T最可能隐藏状态序列出现的概率
4.利用局部状态,进行回溯,寻找参数
流程:
2.怎么解决
维特比算法解码隐藏状态序列
鲍姆-韦尔奇算法简介
hmmlearn
"emissionprob_"对应我们的观测状态概率矩阵B。
属性:
HMM-api
HMM模型
一种典型的无监督学习算法
将相似的样本自动归到一个类别中
简介
n_clusters:开始的聚类中心数量
sklearn.cluster.KMeans()
API
确定常数K
选定初始点为质心
重新计算每个类的质心(即为类中心)
实现流程
下降率突然变缓时即认为是最佳的k值
1. 肘部法
2. SC系数
分数s高则聚类效果越好
3. CH系数
误差评估
Canopy粗聚类配合kmeans
Canopy+kmeans
距离越远越容易成为新的质心
kmeans++
拆除SSE最大的簇
二分k-means
K-medoids
动态聚类
ISODATA
映射到高维空间
kernel kmeans
大数据集分批聚类
Mini-batch K-Means
算法优化
了解
K-means
互相扼制变壮
bagging
弱弱组合变强
boosting
1.对数据进行重新采样(在原数据集中)
2.对新数据集分别进行学习
流程
Bagging + 决策树/ = bagging集成学习方法
n_estimator -- 森林里的树木数量
Criterion -- 分割特征的测量方法
max_depth -- 树的最大深度
bootstrap -- 是否有放回抽取
min_samples_split:节点划分最少样本数
min_samples_leaf:叶子节点的最小样本数
sklearn.ensemble.RandomForestClassifier()
随机森林
1.均可在原有算法上提高约2%左右的泛化正确率
优势
2.计算这个学习器在训练数据中的错误率
3.计算这个学习器的投票权重
4.根据投票权重对训练数据重新赋权
5.重复执行1-4步骤m次
6.对m个学习器进行加权投票
bagging和boosting的区别
梯度提升决策树
算法由多棵决策树组成,所有树的结论累加起来做最终答案
GBDT = 梯度下降 + Boosting + 决策树+一阶导数
2.公式
1.使用梯度下降法优化代价函数;
2.使用一层决策树作为弱学习器,负梯度作为目标值;
3.利用boosting思想进行集成。
3.GBDT主要执行思想
gbdt
经验风险最小化(一味追求,容易发生过拟合)
追求目标:结构⻛险最⼩化
1.最优模型的构建⽅法
损失函数+模型复杂度
目标函数:
树的结构
各个叶子节点的值
模型复杂度:
前向分布算法
二阶泰勒展开式
损失函数推导
目标函数,最后转化为打分函数
2.XGBoost的⽬标函数推导
打分函数,主要用于回归树构建过程中,判断是否进行再次节点划分
tips:\\gamma值 -- 代表树的复杂度
Gain = 划分之前打分函数值-划分之后打分函数值
Gain<0
max_depth
阈值
停⽌分裂条件判断
3.XGBoost的回归树构建⽅法
XGBOOST = 梯度下降 + Boosting + 决策树/Linear+二阶阶导数
xgboost算法原理
pip3 install xgboost
通用参数
Tree Booster
Linear Booster
Booster 参数
学习目标参数
api介绍
xgboost在构建过程中考虑了输的复杂度
gbdt是在剪枝步骤,考虑输的复杂度
1.区别一:
gbdt -- 一阶导
xgboost -- 二阶导
2.区别二:
xgboost -- 对特征数据,可以进行并行处理
gbdt -- 只能串行处理
3.区别三:
XGBoost与GBDT的区别
xgboost
通过神经网络等算法选择一部分数据进行训练
lightGBM 也是在选择数据集的时候,通过min-batch方式进行训练
1.启发
速度惊人
支持分布式
代码清晰易懂
2.特点
基于Histogram(直方图)的决策树算法
Lightgbm 的Histogram(直方图)做差加速
带深度限制的Leaf-wise的叶子生长策略
直接支持类别特征
直接支持高效并行
3.优化内容:
lightGBM基本介绍
pip3 install lightgbm
1.api
Control Parameters
Core Parameters
IO parameter
2.参数
lightGBM算法api介绍
lightGBM
集成学习
机器学习(算法)
MSE(均方误差)
MAE(平均绝对误差)
RMSE(均方根误差)
……
回归模型
预测正确的数占样本总数的比例。
准确率
正确预测为正占全部预测为正的比例
精确率
正确预测为正占全部正样本的比例
召回率
主要用于评估模型的稳健性
F1-score
主要用于评估样本不均衡的情况
AUC指标
分类模型
模型评估
模型过于简单
在训练数据和测试数据上都不能得到很好的拟合
解决办法:增加数据的特征数量
欠拟合
模型过于复杂
解决办法:正则化
过拟合
欠拟合和过拟合
训练集:训练集+验证集
测试集:测试集
分支主题
交叉验证
网格搜索:\t
estimator:估计器对象
cv:指定几折交叉验证
参数:
fit:输入训练数据
score:准确率
方法:
best_score_:在交叉验证中验证的最好结果
best_estimator_:最好的参数模型
cv_results_:每次交叉验证后的验证集准确率结果和训练集准确率结果
属性:
交叉验证、网格搜索
使用for循环,调整单个参数
模型选择与调优
from sklearn.externals import joblib
最新版
import joblib
保存:
estimator = joblib.load('test.pkl')
加载:
模型保存与加载
模型评估与调优
机器学习(算法篇)
0 条评论
回复 删除
下一页