机器学习思维导图(基于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(继承自字典)
    • UCI
      • 网址:
        • http://archive.ics.uci.edu/ml/index.php
      • 特点
        • 收录了400+个数据集
        • 覆盖科学、生活、经济等领域
        • 数据集几十万
    • Kaggle
      • 网址:
        • https://www.kaggle.com/datasets
      • 特点
        • 大数据竞赛平台
        • 80万科学家
        • 真实数据
        • 数据量巨大
  • 数据集的划分
    • 训练数据集(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 转换
          • 本身拿到的数据就是字典类型
      • 文本特征提取
        • 特征:特征词(单词)
        • 提取方法:
          • 1、CountVectorizer :统计每个单词特征词出现的个数
          • 2、TfidfVectorizer :统计每个单词特征的重要程度
            • TF:词频
            • IDF:逆向文档频率
    • 特征预处理
      • API
        • sklearn.preprocessing
      • 内容:数值型数据的无量纲化
        • 归一化
          • sklearn.preprocessing.MinMaxSxaler(feature_range=(0,1)…)
          • 存在问题:若存在异常值,则对最大值和最小值的影响较大。
          • 缺点:鲁棒性较差
          • 应用场景:只适合传统精确小数据场景
        • 标准化
          • sklearn.preprocessing.StandardScaler():处理后,所有数据都聚集在均值为0,标准差为1的附近
          • 公式:(x - means) / std
          • 标准差:集中程度
          • 优点:一定量数据集下,若存在少量的异常值,对平均值和标准差的影响不大。
          • 应用场景:在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景
    • 特征降维 - 降低维度
      • 概述
        • 降维是指在某些限定条件下,降低随机变量(特征)个数。得到一组“不相关”主变量的过程
      • 内容
        • 特征选择
          • 定义:数据中包含冗余或相关变量(特征),旨在从原有特征中找出主要特征
          • 方法
            • Filter(过滤式):主要探究特征本身特点、特征与特征和目标值之间的关联
              • 方差选择法:低方差特征过滤
                • API:sklearn.feature_selection.VarianceThreshold(theshold = 0.0) :删除所有低方差特征
              • 相关系数法:特征与特征之间的相关程度
                • 皮尔逊相关系数:反应变量之间相关关系密切程度的统计指标
                  • API: from scipy.stats import pearsonr
                    pearsonr(特征1向量,特征2向量)
                    返回值:(相关系数,p值)
                • 也可以通过画图来观察结果
                • 特点:相关系数的值介于 -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
              • 深度学习:卷积等
        • 主成分分析(PCA)
          • 定义:高维数据转换为低维数据的过程,在此过程中可能会舍弃原有数据,创造新的变量
          • 作用:数据维度压缩,尽可能降低原数据的维度(复杂度),损失少量信息
          • 应用场景:回归分析或者聚类分析当中
          • API:sklearn.decomposition.PCA(n_components = None)
            • 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)

K-近邻算法

  • KNN核心思想:你的“邻居”来推断出你的类别
  • 算法原理:计算距离
    • 欧氏距离
    • 曼哈顿距离
    • 明可夫斯基距离
  • k值取过小,容易受到异常点的影响;k值取得过大,容易受到样本不均衡影响
  • 使用KNN算法需要做无量纲化的处理——标准化
  • API
    • sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘auto’)
      • n_neighbors:k值
  • 优点
    • 简单,易于理解,易于实现,无需训练
  • 缺点
    • 必须指定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_

朴素贝叶斯算法

  • 概率基础
    • 定义:一件事发生的可能性
    • 联合概率、条件概率与相互独立
      • 联合概率:包含多个条件,且所有条件同时成立的概率
      • 条件概率:就是事件A在另外一个事件B已经发生条件下的发生概率
      • 相互独立:P(A, B) = P(A)P(B) <=> 事件A与事件B相互独立
  • 朴素? —— 假设:特征与特征之间是相互独立
  • 朴素贝叶斯算法:朴素 + 贝叶斯
  • 应用场景:
    • 文本分类(单词作为特征)
  • 拉普拉斯平滑系数:用来消除计算中,由于数据量较少,出现概率等于0的情况
  • API:
    • sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
      • alpha为拉普拉斯平滑系数
  • 优点
    • 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
    • 分类准确度高,速度快
  • 缺点:
    • 由于使用了样本属性独立性的假设,所以如果特征属性有关联时其效果不好

决策树

  • 认识决策树
    • 如何高效的进行决策? :特征的先后顺序
      • 信息熵、信息增益
  • 信息论基础
    • 信息:消除随机不定性的东西
    • 信息的衡量——信息量——信息熵(单位为: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(起到 “降维”作用)
  • 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 :叶子节点的最小样本数——超参数
  • 优点
    • 在当前所有算法中,具有极好的准确性
    • 能够有效地运行在大数据集上,处理具有高维特征的输入样本,而且不需要降维
    • 能够评估各个特征在分类问题熵的重要性

回归与聚类算法

线性回归

  • 回归问题: 目标值 - 连续型的数据
  • 原理: 利用回归方程对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。
  • 线性关系
    • 线性 : 直线
    • 非线性 : 曲线
  • 线性模型
    • 自变量一次: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 回归(岭回归)

带有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的比例
      • AUC计算API
        • from sklearn.metrics.roc_auc_score(y_true,y_score)
          • 计算ROC曲线面积,即AUC值(0.5
          • y_true:每个样本的真实类别,必须为0(反例),1(正例)标记
          • y_score:预测得分,可以是正类的估计概率、置信值或者分类器方法的返回值

模型的保存与加载

  • 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_:默认标记的类型,可以何真实值比较(不是值比较)
    • K-means性能评估指标
      • 轮廓系数
      • 轮廓系数值分析
        • 轮廓叙述的值是介于[-1,1],越趋近于1代表内聚度和分离度都相对较优
      • 轮廓系数API
        • sklearn.metrics.silhouette_score(X,labels)
          • 计算所有样本的平均轮廓系数
          • X:特征值
          • labels:被聚类标记的目标值
    • K-means总结
      • 特点分析:采用迭代式算法,直观易懂并且非常实用
      • 缺点:容易收敛到局部最优解(多次聚类)
    • K-means应用场景
      • 没有目标值
      • 分类
      • NOTE: 聚类一般做在分类之前
  • 降维(PCA)

思维导图图片形式

你可能感兴趣的:(machine,learning,机器学习,思维导图,sklearn)