机器学习思维导图(基于sklearn)
文章目录
- 机器学习
- 概述
- 什么是机器学习?
- 机器学习算法分类
- 机器学习开发流程
- 特征工程
- 数据集
- 特征工程介绍
- 分类算法
- sklearn转换器和估计器
- K-近邻算法
- 模型选择与调优
- 朴素贝叶斯算法
- 决策树
- 集成学习方法之随机森林
- 回归与聚类算法
- 线性回归
- 过拟合与欠拟合
- 带有L2正则化的线性回归 — 岭回归
- 分类算法:逻辑回归与二分类
- 模型的保存与加载
- 无监督学习
- 思维导图图片形式
机器学习
概述
什么是机器学习?
- 数据+模型+预测
- 数据集构成:特征值 + 目标值
机器学习算法分类
- 监督学习
- 目标值:类别 —— 分类问题
- eg:k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归
- 目标值:连续型的数据 —— 回归问题
- eg:线性回归、岭回归
- 目标值:类别 —— 分类问题
- 无监督学习
- 目标值:无
- eg:聚类_k-means
- 目标值:无
机器学习开发流程
- 1、获取数据
- 2、数据处理
- 3、特征工程
- 4、机器学习算法训练 —— 模型
- 5、模型评估
- 6、应用
特征工程
数据集
- 可用数据集
- sklearn
- 网址:
- https://scikit-learn.org/stable/datasets/index.html#datasets
- 特点
- 数据量较小
- 方便学习
- 安装
- 安装命令:pip3 install sklean
- 检验安装成功命令:import sklearn
- API介绍
- sklearn.datasets :加载获取流行数据集
- datasets.load_*():获取小规模数据集,数据包含在datasets中
- datasets.fetch_*(data_home = None):获取大规模数据集,需要从网上下载;函数第一个参数表示数据集下载的目录,默认是”~/scikit_learn_data/“
- 数据集的返回值:datasets.base.Bunch(继承自字典)
- sklearn.datasets :加载获取流行数据集
- 网址:
- UCI
- 网址:
- http://archive.ics.uci.edu/ml/index.php
- 特点
- 收录了400+个数据集
- 覆盖科学、生活、经济等领域
- 数据集几十万
- 网址:
- Kaggle
- 网址:
- https://www.kaggle.com/datasets
- 特点
- 大数据竞赛平台
- 80万科学家
- 真实数据
- 数据量巨大
- 网址:
- sklearn
- 数据集的划分
- 训练数据集(70%~80%):用于训练,构建模型
- 测试数据集(20%~80%):在模型检验时使用,用于评估模型是否有效
特征工程介绍
- 特征工程的位置与数据处理的比较
- sklearn:对于特征的处理提供了强大的接口
- pandas:一个数据读取非常方便以及基本的处理格式的工具
- 内容包括
- 特征抽取/特征提取
- 提取API: sklearn.feature_extraction
- 字典特征提取
- 类别 -> one-hot编码:sklearn.feature_extraction.DictVectorizer(sparse = True)
- 父类:transfer类
- 返回值:sparse 矩阵
- sparse(稀疏):将非零值按位置表示出来;节省内存,提高加载效率
- 应用场景
- pclass,sex 等,数据集中类别比较多
- 1、将数据集的特征 ——》字典类型
- 2、DictVectorizer 转换
- 本身拿到的数据就是字典类型
- pclass,sex 等,数据集中类别比较多
- 文本特征提取
- 特征:特征词(单词)
- 提取方法:
- 1、CountVectorizer :统计每个单词特征词出现的个数
- 2、TfidfVectorizer :统计每个单词特征的重要程度
- TF:词频
- IDF:逆向文档频率
- 特征预处理
- API
- sklearn.preprocessing
- 内容:数值型数据的无量纲化
- 归一化
- sklearn.preprocessing.MinMaxSxaler(feature_range=(0,1)…)
- 存在问题:若存在异常值,则对最大值和最小值的影响较大。
- 缺点:鲁棒性较差
- 应用场景:只适合传统精确小数据场景
- 标准化
- sklearn.preprocessing.StandardScaler():处理后,所有数据都聚集在均值为0,标准差为1的附近
- 公式:(x - means) / std
- 标准差:集中程度
- 优点:一定量数据集下,若存在少量的异常值,对平均值和标准差的影响不大。
- 应用场景:在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景
- 归一化
- API
- 特征降维 - 降低维度
- 概述
- 降维是指在某些限定条件下,降低随机变量(特征)个数。得到一组“不相关”主变量的过程
- 内容
- 特征选择
- 定义:数据中包含冗余或相关变量(特征),旨在从原有特征中找出主要特征
- 方法
- Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间的关联
- 方差选择法:低方差特征过滤
- API:sklearn.feature_selection.VarianceThreshold(theshold = 0.0) :删除所有低方差特征
- 相关系数法:特征与特征之间的相关程度
- 皮尔逊相关系数:反应变量之间相关关系密切程度的统计指标
- API: from scipy.stats import pearsonr
pearsonr(特征1向量,特征2向量)
返回值:(相关系数,p值)
- API: from scipy.stats import pearsonr
- 也可以通过画图来观察结果
- 特点:相关系数的值介于 -1~1 之间
- 当 r >0,表示两变量正相关,r < 0 ,表示两向量负相关
- 当 | r | = 1时,表示两向量完全相关,当| r | = 0时,表示两向量无相关关系
- 当 0<|r|<1时,表示两向量存在一定的相关程度;且 | r | 越接近1,两变量间线性关系越密切;| r | 越接近0,两变量间的线性相关性越弱
- 一般可按三级划分:| r | <0.4为低度相关;0.4 < | r | <0.7为显著性相关;| r |>0.7为高度线性相关
- 结果:特征与特征之间的相关性很高
- 1、选取其中一个
- 2、加权求和
- 3、主成分分析
- 皮尔逊相关系数:反应变量之间相关关系密切程度的统计指标
- 方差选择法:低方差特征过滤
- Embedded(嵌入式): 算法自动选择特征
- 决策树:信息熵、信息增益
- 正则化:L1、L2
- 深度学习:卷积等
- Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间的关联
- 主成分分析(PCA)
- 定义:高维数据转换为低维数据的过程,在此过程中可能会舍弃原有数据,创造新的变量
- 作用:数据维度压缩,尽可能降低原数据的维度(复杂度),损失少量信息
- 应用场景:回归分析或者聚类分析当中
- API:sklearn.decomposition.PCA(n_components = None)
- n_components
- 小数:表示保留百分之多少的信息
- 整数:表示减少到多少特征
- n_components
- 特征选择
- 概述
- 特征抽取/特征提取
分类算法
sklearn转换器和估计器
- 转换器 - 特征工程的父类
- 1 实例化 (实例化的是一个转换器类(Transformer))
- 2 调用fit_transform(对于文档建立分类词频矩阵,不能同时调用)
- 估计器(estimator) - sklearn机器学习算法的实现
- 1 实例化一个estimator
- 2 estimator.fit(x_train, y_train) 计算
- 3 模型评估:
- 1)直接比对真实值和预测值
y_predict = estimator.predict(x_test)
y_test == y_predict - 2)计算准确率
accuracy = estimator.score(x_test, y_test)
- 1)直接比对真实值和预测值
K-近邻算法
- KNN核心思想:你的“邻居”来推断出你的类别
- 算法原理:计算距离
- 欧氏距离
- 曼哈顿距离
- 明可夫斯基距离
- k值取过小,容易受到异常点的影响;k值取得过大,容易受到样本不均衡影响
- 使用KNN算法需要做无量纲化的处理——标准化
- API
- sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘auto’)
- n_neighbors:k值
- sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘auto’)
- 优点
- 简单,易于理解,易于实现,无需训练
- 缺点
- 必须指定K值,K值选择不当则分类精度不能保证
- 懒惰算法,对测试样本分类时的计算量大,内存开销大
模型选择与调优
- 交叉验证
- 为了让从训练得到的模型结果更加准确,将训练集作处理:训练集_new = 训练集_old + 验证集
- 超参数搜索 - 网格搜索
- 每组超参数都采用交叉验证来进行评估,最后选出最优参数组合建立模型
- API
- sklearn.model_selection.GridSearchCV(estimator,param_grid = None,cv = None)
- 参数说明
- estimator: 估计器对象
- param_grid :估计器参数(dict){“n_neighbors”:[1,3,5]}
- cv:指定几折交叉验证
- 方法
- fit() : 输入训练数据
- score() :准确率
- 返回值
- 最佳参数: best_params_
- 最佳结果:best_score_
- 最佳估计器:best_estimator_
- 交叉验证结果: cv_results_
- 参数说明
- sklearn.model_selection.GridSearchCV(estimator,param_grid = None,cv = None)
朴素贝叶斯算法
- 概率基础
- 定义:一件事发生的可能性
- 联合概率、条件概率与相互独立
- 联合概率:包含多个条件,且所有条件同时成立的概率
- 条件概率:就是事件A在另外一个事件B已经发生条件下的发生概率
- 相互独立:P(A, B) = P(A)P(B) <=> 事件A与事件B相互独立
- 朴素? —— 假设:特征与特征之间是相互独立
- 朴素贝叶斯算法:朴素 + 贝叶斯
- 应用场景:
- 文本分类(单词作为特征)
- 拉普拉斯平滑系数:用来消除计算中,由于数据量较少,出现概率等于0的情况
- API:
- sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
- alpha为拉普拉斯平滑系数
- sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
- 优点
- 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
- 分类准确度高,速度快
- 缺点:
- 由于使用了样本属性独立性的假设,所以如果特征属性有关联时其效果不好
决策树
- 认识决策树
- 如何高效的进行决策? :特征的先后顺序
- 信息熵、信息增益
- 如何高效的进行决策? :特征的先后顺序
- 信息论基础
- 信息:消除随机不定性的东西
- 信息的衡量——信息量——信息熵(单位为:bit 比特)
- 决策树的划分依据之一:信息增益
- 信息增益 = 信息熵 - 条件熵
- API:sklearn.tree.DecisionTreeClassifier( criterion = ‘gini’, max_depth = None, random_state = None )
- 决策树分类器
- criterion: 默认是“gini”系数,也可以选择信息增益的熵“entropy”
- max_depth: 树的深度大小
- random_state:随机数种子
- 决策树可视化
- sklearn.tree.export_graphviz( estimator,out_file = “./tree.dot”,feature_names = ["",])
- 将生成文件内容拷贝到 http://webgraphviz.com/ 点击“生成”,即可看到决策树
- 优点
- 可视化 —— 可解释能力强
- 缺点
- 容易产生过拟合
- 改进
- 减枝 cart 算法(决策树API当中已经实现,随机森林参数调优有相关介绍)
- 随机森林
集成学习方法之随机森林
- 集成学习方法定义
- 集成学习通过建立几个模型组合的来解决单一预测问题
- 工作原理:生成多个分类器/模型,各自独立地学习和作出预测。这些预测最后结合成组合预测,因此优于任何一个单分类的做出预测
- 随机森林定义
- 随机:
- 森林:包含多个决策树的分类器
- 随机森林原理过程
- 训练集: N个样本 M个特征
- 两个随机
- 训练集随机 - N个样本中随机有放回的抽样N个
- bootstrap 随机有放回抽样
- 特征随机 - 从M个特征中随机抽取m个特征
- M >> m(起到 “降维”作用)
- 训练集随机 - N个样本中随机有放回的抽样N个
- API
- sklearn.ensemble.RandomForestClassifier( n_estimator = 10,criterion = “gini”, max_depth = None,bootstrap = True,random_state = None,min_samples_split = 2 )
- 随机森林分类器
- n_estimators : 森林里的树木数量(可以网格调参) ——超参数
- criteria :分割特征的测量方法,默认为“gini”
- max_depth: 树的最大深度(可网格调参)——超参数
- max_features = “auto” : 每个决策树的最大特征数量
- bootstrap:是否在构建树时使用放回抽样
- min_samples_split : 节点划分最少样本数——超参数
- min_samples_leaf :叶子节点的最小样本数——超参数
- sklearn.ensemble.RandomForestClassifier( n_estimator = 10,criterion = “gini”, max_depth = None,bootstrap = True,random_state = None,min_samples_split = 2 )
- 优点
- 在当前所有算法中,具有极好的准确性
- 能够有效地运行在大数据集上,处理具有高维特征的输入样本,而且不需要降维
- 能够评估各个特征在分类问题熵的重要性
回归与聚类算法
线性回归
- 回归问题: 目标值 - 连续型的数据
- 原理: 利用回归方程对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。
- 线性关系
- 线性 : 直线
- 非线性 : 曲线
- 线性模型
- 自变量一次:y = w1x1 + w2x2 + w3x3 + …… + wnxn + b
- 参数一次: y = w1x1 + w2x1^2 + w3x1^3 + w4x2^3 + …… + b
- 线性关系&线性模型
- 线性关系一定是线性模型,线性模型不一定是线性关系
- 线性回归的损失和优化原理
- 目标: 求模型参数——模型参数能够使得预测准确
- 损失函数/cost/成本函数/目标函数: eg: 最小二乘法
- 优化损失方法
- 正规方程
- 梯度下降(1W数据量以上常用)
过拟合与欠拟合
- 欠拟合:学习到数据的特征过少
- 解决方式:增加数据的特征数量
- 过拟合:原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾各个测试数据点
- 解决方式:正则化
- L1正则化:损失函数 + λ惩罚项(参数w的绝对值)
- 作用:可以使得其中一些W 的值直接为0,删除这个特征的影响
- LASSO 回归
- L2L正则化(更常用):损失函数 + λ惩罚项(参数w的平方)
- 作用:可以使得其中一些W都很小,都接近于0,削弱某个特征的影响
- 优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象
- Ridge 回归(岭回归)
- L1正则化:损失函数 + λ惩罚项(参数w的绝对值)
- 解决方式:正则化
带有L2正则化的线性回归 — 岭回归
分类算法:逻辑回归与二分类
- 逻辑回归的原理:
- 线性回归的输出 就是 逻辑回归的 输入
- 激活函数:sigmoid 函数 —— 1/(1+e^(-x))
- 假设函数/线性模型:1/(1 + e^(-(w1x1 + w2x2 + w3x3 + …… + wnxn + b)))
- 损失函数: 对数似然损失
- 优化损失:梯度下降
- 分类的评估方法
- 精确率与召回率
- 1.混淆矩阵
- 2.精确率(Precision)与召回率(Recall)
- 召回率:查的全不全
- F1-score:反映了模型的准确性
- 分类评估报告API:sklearn.metrics.classification_report(y_true,y_pred,labels=[],target_names=None)
- y_true:真实目标值
- y_pred: 预估器预测目标值
- labels: 指定类别对应的数字
- target_names:目标类别名称
- return:每个类别的精确率与召回率
- ROC曲线与AUC指标
- 知道TPR与FPR
- TPR = TP / (TP + FN) - 召回率
- 所有真实类别为1的样本中,预测类别为1的比例
- FPR = FP / (FP + TN)
- 所有真实类别为0的样本中,预测类别为1的比例
- TPR = TP / (TP + FN) - 召回率
- AUC计算API
- from sklearn.metrics.roc_auc_score(y_true,y_score)
- 计算ROC曲线面积,即AUC值(0.5<auc<1,越接近1,模型预测效果越好)
- y_true:每个样本的真实类别,必须为0(反例),1(正例)标记
- y_score:预测得分,可以是正类的估计概率、置信值或者分类器方法的返回值
- from sklearn.metrics.roc_auc_score(y_true,y_score)
- 知道TPR与FPR
- 精确率与召回率
模型的保存与加载
- API: from sklearn.externals import joblib
- 保存:joblib.dump(rf,’'test.pkl)
- 加载:estimator = joblib.load(‘test.pkl’)
无监督学习
- 聚类(K-means算法)
- K-means算法API
- sklearn.cluster.KMeans(n_clusters = 8,init = ‘k-means++’)
- n_clusters:开始的聚类中心数量
- init:初始化方法,默认为“k-means++”
- labels_:默认标记的类型,可以何真实值比较(不是值比较)
- sklearn.cluster.KMeans(n_clusters = 8,init = ‘k-means++’)
- K-means性能评估指标
- 轮廓系数
- 轮廓系数值分析
- 轮廓叙述的值是介于[-1,1],越趋近于1代表内聚度和分离度都相对较优
- 轮廓系数API
- sklearn.metrics.silhouette_score(X,labels)
- 计算所有样本的平均轮廓系数
- X:特征值
- labels:被聚类标记的目标值
- sklearn.metrics.silhouette_score(X,labels)
- K-means总结
- 特点分析:采用迭代式算法,直观易懂并且非常实用
- 缺点:容易收敛到局部最优解(多次聚类)
- K-means应用场景
- 没有目标值
- 分类
- NOTE: 聚类一般做在分类之前
- K-means算法API
- 降维(PCA)
思维导图图片形式
机器学习思维导图(基于sklearn)相关推荐
- 机器学习思维导图(更新中)
机器学习思维导图 此思维导图可以作为机器学习的参考,让学习者可以有一个整体的观念 #mermaid-svg-vLrM5cuai4INm1Sm .label{font-family:'trebuchet ...
- 西瓜书机器学习思维导图
机器学习西瓜书思维导图 需要xmind格式可以私信我 算了别私信我了我总看不见这个消息,那个链接总失效但我又不想让csdn占便宜,需要的可以qq或微信喊 2230244640.whj001166WHJ ...
- 计算机多媒体技术的思维导图,基于多媒体技术的思维导图在小学语文教学中的应用研究...
李敏 摘 要:随着科学技术的快速发展以及教育改革的不断深入,传统的教学方法也在潜移默化中有所改变,多媒体技术在教学活动中应用的越来越广泛,尤其基于多媒体技术的思维导图的出现与发展,显著提高了小学语文的 ...
- python机器学习思维导图脑图(完整版)
Xmind下载文件 链接:https://pan.baidu.com/s/1Mjtg8UzGqcX9mwITqSgfJw 提取码:d23v python机器学习 Xmind下载文件 机器学习分类 sk ...
- 《机器学习思维导图》,一图掌握机器学习知识要点
来源:专知本文附长图,建议阅读5分钟一图掌握机器学习知识要点. mindmap of Machine Learning 基本上是总结李宏毅老师的ML课 原图及相关资料见链接: https://gith ...
- 深度学习机器学习思维导图
deeplearning-mindmap machine-learning-mindmap
- 机器学习简介及学习思维导图
什么是机器学习 机器学习是人工智能的一个分支.人工智能的研究是从以"推理"为重点到以"知识"为重点,再到以"学习"为重点,一条自然.清晰的脉 ...
- 资源 | 8张思维导图帮你梳理深度学习机器学习多个知识点
向AI转型的程序员都关注了这个号☝☝☝ 整理 | suiling 本文是对作者@Daniel Martinez(https://twitter.com/danielmartinezf)在GitHub上 ...
- 基于网络的思维导图工具的八个独特优点
概述:新兴的基于网络的思维导图工具比起传统的桌面软件有着太多的优点,以下是笔者总结的八个独特优点. 如果你正在寻找一种低成本的用于商业的思维导图工具,那么那些基于网络的思维导图软件会是一个不错的选择. ...
- 【思维导图】人工智能与机器学习总结
图一: 人工智能.机器学习.深度学习之间的关系 图二:图片来源 知乎:机器怎么学习 图三: 机器学习思维导图 参考学习: 1.机器学习[分类]算法详述--讲得非常好,概述性很强,推荐! 2.机器学习 ...
最新文章
- 自动管理Windows2003好用的“远程桌面”
- 【转】vi编辑器中如何复制粘贴文本
- 利用java反射调用类的的私有方法--转
- 【LeetCode笔记】剑指 Offer 56 . 数组中数字出现的次数(Java、位运算)
- 通知中心 NSNotificationCenter 的简单使用方法
- mp3排序软件哪个好用_电脑录音软件哪个好用?
- jquery 鼠标移动 div内容上下或左右滚动
- SQL Server 2016 开发版将免费
- vue-cli 搭建的项目处理不同环境下请求不同域名的问题
- 探讨微软团队开发利器VSTS安装及部署篇
- php获取手机品牌,9 大国产手机品牌相机水印大比拼,哪款才是你的最爱?
- Day02 郝斌C语言自学视频之C语言编程预备知识
- w ndows7旗舰版怎么重装系统,windows7旗舰版64位怎么重装32位系统
- SaaS到底是什么东西
- 电脑快捷方式删除文件后四种找回方法
- python切割图片地图切图脚本
- python获取上一级目录
- 铁威马NAS媒体索引设置教程
- ZQOJ 1123: 最佳校友
- 基于JAVA实现的幼儿园信息管理系统