通信系统仿真

崔春雷

目录

  • 1 第一单元: MATLAB基础
    • 1.1 课程说明与资料
      • 1.1.1 作业参考答案
      • 1.1.2 移动22级作业答案
    • 1.2 MATLAB安装与运行环境
      • 1.2.1 MATLAB介绍
    • 1.3 基本数据类型:数值类型
    • 1.4 基本数据类型:字符类型
    • 1.5 数据类型转换与输出
    • 1.6 数组与矩阵基础
      • 1.6.1 矩阵运算进阶
    • 1.7 数组与矩阵常用函数
    • 1.8 matlab中的逻辑运算
    • 1.9 实验: MATLAB常用数学函数
      • 1.9.1 实验 作业答案
    • 1.10 元胞数组
    • 1.11 结构体数组
      • 1.11.1 结构体进阶
      • 1.11.2 元胞数组与结构体数组对比
      • 1.11.3 map 容器
    • 1.12 附录:MATLAB常用基础命令
    • 1.13 拓展内容:实时脚本
      • 1.13.1 实时脚本示例
    • 1.14 课程作业与答案
      • 1.14.1 《通信系统仿真》期末考试
  • 2 第二单元:Matlab 程序设计
    • 2.1 顺序结构程序
    • 2.2 分支结构—— if语句
    • 2.3 分支结构—— switch语句
    • 2.4 循环结构—— while语句
    • 2.5 循环结构—— for语句
    • 2.6 图像处理基础
    • 2.7 Matlab的函数
      • 2.7.1 函数内容的课外扩展
    • 2.8 本章实验:for循环的应用
      • 2.8.1 素数问题
        • 2.8.1.1 素数的螺旋线排列
      • 2.8.2 3X+1猜想
      • 2.8.3 7 行代码计算 π
    • 2.9 排序算法
      • 2.9.1 冒泡排序
      • 2.9.2 选择排序
      • 2.9.3 插入排序
      • 2.9.4 快速排序
      • 2.9.5 基数排序
      • 2.9.6 计数排序
      • 2.9.7 堆排序
    • 2.10 动态规划算法
      • 2.10.1 动态规划编程实例
      • 2.10.2 动态规划:01背包问题
      • 2.10.3 动态规划常见题目分析
      • 2.10.4 动态规划题目分析2
    • 2.11 常用算法简介
      • 2.11.1 剪枝算法
      • 2.11.2 二分查找
      • 2.11.3 递归算法
      • 2.11.4 回溯算法
        • 2.11.4.1 Leetcode回溯题目合集
        • 2.11.4.2 回溯算法总结
        • 2.11.4.3 回溯法解数独问题
        • 2.11.4.4 DFS与BFS
          • 2.11.4.4.1 DFS/BFS原理
          • 2.11.4.4.2 BFS的应用:Dijkstra算法
      • 2.11.5 n 皇后问题专题
      • 2.11.6 双指针算法
      • 2.11.7 数组模拟链表(约瑟夫环)
      • 2.11.8 Hash(哈希表)
      • 2.11.9 图论与路径规划
        • 2.11.9.1 迪杰斯特拉算法
        • 2.11.9.2 A*算法
          • 2.11.9.2.1 A*算法的MATLAB实现
        • 2.11.9.3 RRT路径规划算法
          • 2.11.9.3.1 RRT算法 MATLAB代码
          • 2.11.9.3.2 参考资料
      • 2.11.10 数据结构
        • 2.11.10.1 数据结构例题
      • 2.11.11 前缀和 差分 双指针
      • 2.11.12 位运算
      • 2.11.13 常用算法代码模板
    • 2.12 练习题库
    • 2.13 code
      • 2.13.1 简易计算器gui代码
      • 2.13.2 五子棋
      • 2.13.3 连连看小游戏
      • 2.13.4 递归算法与汉诺塔
      • 2.13.5 有理数的小数循环节
    • 2.14 MATLAB编程风格
      • 2.14.1 向量化编程专题
  • 3 第三单元:Matlab 图形图像处理
    • 3.1 二维图形绘图基础
    • 3.2 二维图形绘图进阶
    • 3.3 三维图形绘图
      • 3.3.1 MATLAB绘图小结
        • 3.3.1.1 用matlab绘制好看图像
    • 3.4 MATLAB高级绘图
    • 3.5 文件操作
    • 3.6 Matlab图像处理进阶
      • 3.6.1 补充:Matlab图像处理常用函数
      • 3.6.2 RGB/HSV/HSI颜色模型
      • 3.6.3 图片切换动画效果
      • 3.6.4 图像连通域标记
      • 3.6.5 图像旋转与插值
      • 3.6.6 图像的形态学
      • 3.6.7 空间滤波
        • 3.6.7.1 图像中常见的噪声类型与滤波方法
        • 3.6.7.2 matlab中的滤波函数
        • 3.6.7.3 BM3D 去噪算法
        • 3.6.7.4 双边滤波
      • 3.6.8 图像的频域处理
    • 3.7 本章总结
    • 3.8 实验 : matlab 绘图练习1
    • 3.9 实验: matlab 绘图练习2
    • 3.10 实验 :数学函数图像绘制
    • 3.11 实验:绘图综合练习
    • 3.12 实验:曲线拟合
    • 3.13 实验:牛顿法求解方程的根
    • 3.14 实验:信号的傅里叶变换
      • 3.14.1 傅里叶变换、小波变换、希尔伯特变换
      • 3.14.2 新建目录
    • 3.15 课外补充:图像处理基础1
    • 3.16 课外补充:图像处理基础2
    • 3.17 课外补充:图像处理基础3
    • 3.18 课外补充:PYTHON基础
  • 4 第五单元:MATLAB通信仿真
    • 4.1 现代通信系统的介绍
    • 4.2 模拟通信系统的仿真原理
    • 4.3 HDB3编解码的仿真实现
    • 4.4 SIMULINK和其模块简介
    • 4.5 数字通信系统的仿真原理
    • 4.6 模拟通信系统Simulink仿真
    • 4.7 数字通信系统Simulink仿真
    • 4.8 音频信号测处理与仿真
    • 4.9 图像数字水印技术
      • 4.9.1 三角函数到傅里叶变换再到语音识别与数字水印
    • 4.10 信息系统与算法
      • 4.10.1 递归算法
        • 4.10.1.1 递归与堆栈的关系
      • 4.10.2 哈希表
      • 4.10.3 双指针算法
        • 4.10.3.1 双指针算法实战
        • 4.10.3.2 双指针进阶:滑动窗口算法
      • 4.10.4 字符串匹配 KMP算法
        • 4.10.4.1 字符串匹配B-M算法
      • 4.10.5 快速傅里叶变换
      • 4.10.6 回溯算法
      • 4.10.7 动态规划
      • 4.10.8 分治算法
      • 4.10.9 Dijkstra算法
  • 5 第六单元: systemview通信仿真
    • 5.1 SystemView概述
    • 5.2 模拟通信系统 数字系统的仿真分析
    • 5.3 SystemView通信系统仿真进阶
    • 5.4 新建课程目录
  • 6 第四单元:MATLAB高级应用
    • 6.1 符号运算基础
      • 6.1.1 利用Matlab自动推导公式
    • 6.2 Matlab中的数值计算
      • 6.2.1 积分的计算
      • 6.2.2 龙格库塔:常微分方程的数值解法
      • 6.2.3 fmincon函数与非线性方程最小值
    • 6.3 统计、拟合、插值
      • 6.3.1 协方差与相关系数
    • 6.4 GUI设计初步
    • 6.5 matlab GUI界面编程
      • 6.5.1 gui实例
      • 6.5.2 gui编程中常用函数
      • 6.5.3 App Designer入门
    • 6.6 实验:GUI设计图像空间变换系统
    • 6.7 作业:利用GUI设计 计算器、信号发生器等
    • 6.8 MTALB数据导入方法
    • 6.9 课外补充:MATLAB的App会取代GUI吗?
    • 6.10 模拟退火算法matlab实现
    • 6.11 遗传算法的Matlab实现
      • 6.11.1 进化算法(Evolutionary Algorithm)及相关函数介绍
    • 6.12 粒子群算法 matlab实现
      • 6.12.1 粒子群算法及MATLAB实例仿真
    • 6.13 BP网络的应用
    • 6.14 matlab 结构体
    • 6.15 群智能算法合集
  • 7 拓展知识
    • 7.1 什么是算法的时间复杂度?
    • 7.2 Notepad++使用教程
    • 7.3 MATLAB常用函数总结
    • 7.4 MATLAB常用知识点总结
    • 7.5 MATLAB命令大全
    • 7.6 视频:MATLAB官方基础教程
    • 7.7 经典书籍:Matlab2012经典超强教程
    • 7.8 经典书籍:MATLAB揭秘(自学宝典)
    • 7.9 经典资料:MATLAB N个实用技巧
    • 7.10 Matlab编程小技巧
    • 7.11 寻优算法
      • 7.11.1 Dijkstra算法python实现
    • 7.12 PYTHON基础教程
      • 7.12.1 Python进阶
      • 7.12.2 Python小技巧
      • 7.12.3 Python总结
        • 7.12.3.1 Python循环语句总结
        • 7.12.3.2 24个顶级Python库
        • 7.12.3.3 魔法函数
      • 7.12.4 廖雪峰python
      • 7.12.5 正则表达式基础
      • 7.12.6 numpy
        • 7.12.6.1 101道Numpy习题
        • 7.12.6.2 Numpy简要语法教程
        • 7.12.6.3 Numpy实现全连接神经网络 (手写数字识别)
        • 7.12.6.4 图解NumPy
      • 7.12.7 matplotlib
        • 7.12.7.1 matplotlib练习50题
        • 7.12.7.2 Matplotlib速查表
        • 7.12.7.3 Matplotlib 实操指南
      • 7.12.8 Python3 模块 import
      • 7.12.9 Python 小项目
    • 7.13 参考资源:数据结构与算法
      • 7.13.1 十大经典排序算法总结
    • 7.14 机器学习概述
      • 7.14.1 反向传播算法
        • 7.14.1.1 反向传播的数学原理
      • 7.14.2 极大似然估计
        • 7.14.2.1 极大似然估计与最小二乘法
      • 7.14.3 Batch Normalization
        • 7.14.3.1 Batch Normalization&Dropout浅析
        • 7.14.3.2 ​BN层的梯度反向传播计算
        • 7.14.3.3 Batch Size的大小与神经网络的性能
        • 7.14.3.4 标准化和归一化
      • 7.14.4 主成分分析PCA与SVD奇异值分解
        • 7.14.4.1 岭回归 与 PCA
        • 7.14.4.2 PCA原理推导
        • 7.14.4.3 PCA原理新解
        • 7.14.4.4 svd
        • 7.14.4.5 PCA数学原理
      • 7.14.5 正则化
        • 7.14.5.1 L1、L2正则化和过拟合 总结
        • 7.14.5.2 L1 和 L2 正则化的直观解释
      • 7.14.6 SVM
        • 7.14.6.1 从零推导支持向量机(SVM)
        • 7.14.6.2 支持向量机(SVM)介绍
        • 7.14.6.3 SVM推导与实战
        • 7.14.6.4 支持向量机的直观理解
        • 7.14.6.5 浅显易懂的支持向量机SVM
      • 7.14.7 线性回归
      • 7.14.8 逻辑回归
      • 7.14.9 BP算法
        • 7.14.9.1 万能逼近——神经网络拟合任意函数原理
      • 7.14.10 激活与池化
        • 7.14.10.1 激活函数与损失函数 小结
      • 7.14.11 深度学习简述
        • 7.14.11.1 MATLAB2020深度学习实例
      • 7.14.12 损失函数与误差反向传播
        • 7.14.12.1 梯度下降与损失函数
      • 7.14.13 深度学习优化问题
      • 7.14.14 梯度下降法
        • 7.14.14.1 各类梯度下降算法的Python实现
        • 7.14.14.2 梯度下降的直观理解
        • 7.14.14.3 动量、RMSProp、Adam
      • 7.14.15 卷积的概念
        • 7.14.15.1 卷积的矩阵化算法
      • 7.14.16 局部连接
      • 7.14.17 RNN
      • 7.14.18 LSTM
      • 7.14.19 CNN-四大经典CNN技术浅析
      • 7.14.20 熵(Entropy)与交叉熵
      • 7.14.21 softmax函数详解
      • 7.14.22 自编码算法详细理解与代码实现
      • 7.14.23 pytorch
        • 7.14.23.1 ​PyTorch简介
          • 7.14.23.1.1 Pytorch快速入门资料
        • 7.14.23.2 CNN的PyTorch实现
        • 7.14.23.3 pytorch总结
        • 7.14.23.4 PyTorch trick 集锦
        • 7.14.23.5 在PyTorch上加载自定义数据集
        • 7.14.23.6 实战:Pytorch识别验证码
        • 7.14.23.7 实战:Transformer的最简洁pytorch实现
        • 7.14.23.8 使用PyTorch实现神经网络分类
      • 7.14.24 卷积神经网络CNN概述
        • 7.14.24.1 CNN 简易原理
        • 7.14.24.2 卷积神经网络CNN原理详解
        • 7.14.24.3 自己手写一个卷积神经网络
        • 7.14.24.4 CNN反向传播算法
        • 7.14.24.5 卷积计算、作用与思想
        • 7.14.24.6 用卷积神经网络CNN识别手写数字集
        • 7.14.24.7 卷积 池化 参数的计算
        • 7.14.24.8 im2col方法实现卷积算法
        • 7.14.24.9 卷积核的梯度计算
        • 7.14.24.10 卷积层反向传播推导及实现
        • 7.14.24.11 反向传输算法
          • 7.14.24.11.1 resnet残差网络
        • 7.14.24.12 CNN反向传播的MATLAB实现
      • 7.14.25 神经网络的调参技巧
      • 7.14.26 BP神经网络
        • 7.14.26.1 零开始搭建bp神经网络
        • 7.14.26.2 MATLAB自带的bp工具箱
        • 7.14.26.3 神经网络中偏置(bias)的作用
      • 7.14.27 聚类分析 k-means
        • 7.14.27.1 matlab做聚类分析(k-means)
        • 7.14.27.2 聚类模型探讨综述
        • 7.14.27.3 5种经典聚类算法
      • 7.14.28 深度学习的一些概念
      • 7.14.29 人工智能简述:AI的过去和现在
      • 7.14.30 k-NN(k近邻算法)
      • 7.14.31 神经网络中的优化器:BGD、SGD、MBGD、Momentum
      • 7.14.32 卷积神经网络的经典网络总结
        • 7.14.32.1 卷积神经网络中十大拍案叫绝的操作
      • 7.14.33 GAN 对抗样本攻击
      • 7.14.34 蒙特卡洛模拟
      • 7.14.35 dropout与随机部分连接
      • 7.14.36 Jupyter 等 IDE概览
      • 7.14.37 分类算法常用评价指标
      • 7.14.38 Inception 网络与不变性
      • 7.14.39 卷积神经网络的可视化
      • 7.14.40 隐马尔可夫模型HMM
        • 7.14.40.1 马尔科夫链
    • 7.15 MATLAB音频处理
      • 7.15.1 python处理音频信号
    • 7.16 图像处理
      • 7.16.1 图像处理中的指标
    • 7.17 代码集
    • 7.18 论文写作与阅读方法
      • 7.18.1 期刊投稿攻略
      • 7.18.2 论文排版教程
      • 7.18.3 SCI-HUB论文下载技巧
      • 7.18.4 几种论文写作神器,提高写作效率
      • 7.18.5 latex入门
      • 7.18.6 LaTeX教程
    • 7.19 机器学习常用的网站以及资源
      • 7.19.1 很详细的ML&DL学习博客
    • 7.20 SymPy 符号计算基本教程
  • 8 程序设计数学基础
    • 8.1 编程数学基础
      • 8.1.1 概率的历史
      • 8.1.2 概率
        • 8.1.2.1 常见概率分布
          • 8.1.2.1.1 二维正态分布
        • 8.1.2.2 蒙特卡罗方法
        • 8.1.2.3 置信区间
        • 8.1.2.4 协方差与相关系数
      • 8.1.3 矩阵 向量求导法则
      • 8.1.4 雅可比矩阵 海森矩阵
      • 8.1.5 矩阵的几种分解方式
      • 8.1.6 行列式和代数余子式
      • 8.1.7 向量
      • 8.1.8 矩阵的基本运算
      • 8.1.9 矩阵分析
      • 8.1.10 矩阵的LU分解
      • 8.1.11 矩阵奇异值分解(SVD)
        • 8.1.11.1 SVD分解2
        • 8.1.11.2 SVD分解逐步推导
        • 8.1.11.3 奇异值与特征值的意义
      • 8.1.12 随机向量
        • 8.1.12.1 随机过程简述
      • 8.1.13 投影矩阵和最小二乘
      • 8.1.14 知乎数学精选集
        • 8.1.14.1 高数问题集
      • 8.1.15 小波变换
      • 8.1.16 程序设计数学基础1:高等数学
      • 8.1.17 程序设计数学基础2:线性代数
      • 8.1.18 程序设计数学基础3:概率论和数理统计
      • 8.1.19 向量的距离与相似度计算
      • 8.1.20 复数
      • 8.1.21 高等数学——幂级数
      • 8.1.22 无穷小的本质
      • 8.1.23 数列极限和收敛性
      • 8.1.24 不定积分技巧总结
    • 8.2 有趣的数学题目
    • 8.3 高等数学
      • 8.3.1 泰勒级数
  • 9 路径规划与智能算法
    • 9.1 常见路径规划算法简介
    • 9.2 Dijkstra算法详细
  • 10 教学文档
    • 10.1 授课计划
    • 10.2 课程标准
机器学习概述

                         机器学习——概述


    机器学习入门概述总结

    前言:

    机器学习是一门研究在非特定编程条件下让计算机采取行动的学科。最近二十年,机器学习为我们带来了自动驾驶汽车实用的语音识别高效的网络搜索,让我们对人类基因的解读能力大大提高。当今机器学习技术已经非常普遍,我们很可能在毫无察觉情况下每天使用几十次。许多研究者还认为机器学习是人工智能(AI)取得进展的最有效途径。

    1、机器学习的定义

    (1)一个程序被认为能从经验 E 中学习解决任务 T达到性能度量值P,当且仅当,有了经验 E 后经过 P 评判,程序在处理 T 时的性能有所提升

    (2)从广义上来说,机器学习是一种能够赋予机器学习的能力以此让它完成直接编程无法完成的功能的方法。但从实践的意义上来说,机器学习是一种通过利用数据,训练出模型,然后使用模型预测的一种方法。

    (3)机器学习的定义用一句简单的话概述就是把一堆无序的数据转化成有用的信息

    (4)机器学习主要是研究如何使计算机从给定的数据中学习规律,即从观测数据(样本)中寻找规律,并利用学习到的规律(模型)对位置或无法观测的数据进行预测


    2、机器学习的领域

    机器学习与模式识别,统计学习,数据挖掘,计算机视觉,语音识别,自然语言处理等领域有着很深的联系;

    从范围上来说,机器学习跟模式识别,统计学习,数据挖掘是类似的。

    机器学习与其他领域的处理技术的结合,形成了计算机视觉、语音识别、自然语言处理等交叉学科。因此,一般说数据挖掘时,可以等同于说机器学习。

    我们平常所说的机器学习应用,应该是通用的,不仅仅局限在结构化数据,还有图像,音频等应用。


    3、机器学习算法类型

    (1)监督学习(Supervised Learning)

    每组训练数据都有一个明确的标签和结果,利用这些已知的数据来学习模型的参数,使得模型预测的目标标签和真实标签尽可能接近。

    监督学习主要应用:预测房屋的价格,股票的涨停,垃圾邮件检测等。

    监督学习主要算法:回归和分类(线性回归,逻辑回归,神经网络,SVM、k-近邻、决策树(ID3、C4.5等)、朴素贝叶斯、AdaBoost等)

    注: 把实例数据划分到合适的分类中(即分类)

    用于预测数值型数据(即回归)

    (2)无监督学习(Unsupervised Learning)

    学习的数据不包含目标标签,需要学习算法自动学习到一些有价值的信息。

    无监督学习主要应用:社交网络的分析,天文数据分析,新闻事件分类等。

    无监督学习主要算法:聚类和密度估计(奇异值分解、主成分分析,独立成分分析、k-均值、Apriori算法和FP-growth)

    注: 将数据集合分成由类似的对象组成的多个类的过程称为聚类

    将寻找描述数据统计值的过程称为密度估计

    (4)半监督学习(Semi-supervised Learning)

    输入数据少量有目标标签的样本和大量没有目标标签的样本。首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。

    应用场景:包括分类和回归,算法包括一些对常用监督式学习算法的延伸

    主要算法:图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM)等

    (5)强化学习(Reinforcement Learning)

    输入数据直接反馈到模型,模型必须对此立刻做出调整。也就是常说的从经验中总结提升。

    常见的应用场景:动态系统以及机器人控制等,Google的AlphaGo就是运用了这种学习方式。算法本身会总结失败和成功的经验来达到很高的成功率。

    常见算法:Q-Learning以及时间差学习(Temporal difference learning)

    (6) 遗传算法(Genetic Algorithm)

    模拟进化理论,适者生存不适者淘汰,通过淘汰机制选择最优化的模型。

    (7)推荐算法(Recommendation Algorithm

    分类:基于内容的推荐算法、协同过滤推荐算法和基于知识的推荐算法

    注:企业数据应用的场景下, 人们最常用的可能就是监督式学习非监督式学习的模型。 在图像识别等领域,由于存在大量的非标识的数据和少量的可标识数据, 目前半监督式学习是一个很热的话题。 而强化学习更多的应用在机器人控制及其他需要进行系统控制的领域

    4、监督学习和无监督学习的区别

    监督学习中样本的输入属性x和输出y都给出,目的是学习从输入到输出的映射关系。

    无监督学习中只给出了输入数据,我们的目的是发现输入数据中的规律。

    5、在具体应用中如何选择算法

    (1)首先考虑机器学习算法的目的。

    (2)如果是想要预测目标变量的值,则选择监督学习算法,否则选择无监督学习算法

    如果选择了监督学习算法,则要进一步确定目标变量类型,如果目标变量是离散的,则选择分类器算法,若果是连续的,则选择回归算法

    6、开发机器学习应用程序的步骤

    (1)收集数据:方法:从网站上抽取数据、实例数据、公开可用的数据等。

    (2)数据输入:把收集到的数据转变为符合格式要求的数据。

    (3)分析输入的数据:查看是否有空值或异常值,常用的方法是画出可视化图形。

    (4)训练算法:机器学习算法的开始,是算法的核心。(但在无监督学习中不需要此步骤)

    (5)测试算法:目的是为了评估算法。在监督学习中,需用已知目标值的数据进行评估;对于无监督学习,需用其他的评测手段检验算法的成功率。

    (6)使用算法:将机器学习算法转化为应用程序执行任务。

    7、机器学习主要算法简单概述

    (1)回归算法(Regression Algorithm

    在大部分机器学习课程中,回归算法都是介绍的第一个算法。原因有两个:一是回归算法比较简单,介绍它可以让人平滑地从统计学迁移到机器学习中。二是回归算法是后面若干强大算法的基石,如果不理解回归算法,无法学习那些强大的算法。回归算法有两个重要的子类:即线性回归逻辑回归

      从本质上讲,线型回归处理的问题类型与逻辑回归不一致。线性回归处理的是数值问题,也就是最后预测出的结果是数字,例如房价。而逻辑回归属于分类算法,也就说,逻辑回归预测结果是离散的分类,例如判断这封邮件是否是垃圾邮件,以及用户是否会点击此广告等等。

    常见的回归算法包括:最小二乘法(Ordinary Least Square),逻辑回归(Logistic Regression),逐步式回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)以及本地散点平滑估计(Locally Estimated Scatterplot Smoothing)

    回归算法在现实世界的应用,如:

    • 信用评分

    • 度量营销活动的成功率

    • 预测某一产品的收入

    • 在一个特定的日子里会发生地震吗?等

    下图为:逻辑回归的直接展示


    (2)人工神经网络(Artificial Neural Network)

    人工神经网络算法模拟生物神经网络,是一类模式匹配算法。通常用于解决分类回归问题。(神经网络(也称之为人工神经网络,ANN)算法)

    简单的神经网络的逻辑架构分成输入层隐藏层,和输出层输入层负责接收信号,隐藏层负责对数据的分解与处理,最后的结果被整合到输出层。每层中的一个圆代表一个处理单元,可以认为是模拟了一个神经元,若干个处理单元组成了一个层,若干个层再组成了一个网络,也就是"神经网络"。

    在神经网络中,每个处理单元事实上就是一个逻辑回归模型,逻辑回归模型接收上层的输入,把模型的预测结果作为输出传输到下一个层次。通过这样的过程,神经网络可以完成非常复杂的非线性分类。

    重要的人工神经网络算法包括:感知器神经网络(Perceptron Neural Network), 反向传递(Back Propagation), Hopfield网络,自组织映射(Self-Organizing Map, SOM)。学习矢量量化(Learning Vector Quantization, LVQ)


     下图会演示神经网络在图像识别领域的一个著名应用,这个程序叫做LeNet,是一个基于多个隐层构建的神经网络。通过LeNet可以识别多种手写数字,并且达到很高的识别精度。


    (3)SVM(支持向量机)

    支持向量机算法是诞生于统计学习界,同时在机器学习界大放光彩的经典算法

      支持向量机算法从某种意义上来说是逻辑回归算法的强化,通过给予逻辑回归算法更严格的优化条件,支持向量机算法可以获得比逻辑回归更好的分类界线。

      通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。“核”事实上就是一种特殊的函数,最典型的特征就是可以将低维的空间映射到高维的空间

    (4)聚类算法

    在聚类算法中,训练数据都是不含标签的,而算法的目的则是通过训练,推测出这些数据的标签。这类算法有一个统称,即无监督算法。无监督算法中最典型的代表就是聚类算法。

    常见的聚类算法包括 k-Means算法以及期望最大化算法(Expectation Maximization, EM)。

    (5)降维算法

    降维算法也是一种无监督学习算法,其主要特征是将数据从高维降低到低维层次。在这里,维度其实表示的是数据的特征量的大小,例如,房价包含房子的长、宽、面积与房间数量四个特征,也就是维度为4维的数据。可以看出来,长与宽事实上与面积表示的信息重叠了,例如面积=长 × 宽。通过降维算法我们就可以去除冗余信息,将特征减少为面积与房间数量两个特征,即从4维的数据压缩到2维。于是我们将数据从高维降低到低维,不仅利于表示,同时在计算上也能带来加速。

      刚才说的降维过程中减少的维度属于肉眼可视的层次,同时压缩也不会带来信息的损失(因为信息冗余了)。如果肉眼不可视,或者没有冗余的特征,降维算法也能工作,不过这样会带来一些信息的损失。但是,降维算法可以从数学上证明,从高维压缩到的低维中最大程度地保留了数据的信息。因此,使用降维算法仍然有很多的好处。

      降维算法的主要作用压缩数据与提升机器学习其他算法的效率。通过降维算法,可以将具有几千个特征的数据压缩至若干个特征。另外,降维算法的另一个好处是数据的可视化,例如将5维的数据压缩至2维,然后可以用二维平面来可视。

    降维算法的主要代表是PCA算法(即主成分分析算法)。

    (6)推荐算法

    推荐算法是目前业界非常火的一种算法,在电商界,如亚马逊,天猫,京东等得到了广泛的运用。

    推荐算法的主要特征就是可以自动向用户推荐他们最感兴趣的东西,从而增加购买率,提升效益。

    推荐算法有两个主要的类别:

      (1)基于物品内容的推荐,是将与用户购买的内容近似的物品推荐给用户,这样的前提是每个物品都得有若干个标签,因此才可以找出与用户购买物品类似的物品,这样推荐的好处是关联程度较大,但是由于每个物品都需要贴标签,因此工作量较大。

      (2)基于用户相似度的推荐,则是将与目标用户兴趣相同的其他用户购买的东西推荐给目标用户,例如小A历史上买了物品B和C,经过算法分析,发现另一个与小A近似的用户小D购买了物品E,于是将物品E推荐给小A。

      两类推荐都有各自的优缺点,在一般的电商应用中,一般是两类混合使用。推荐算法中最有名的算法就是协同过滤算法

    (7)决策树算法

      决策树算法根据数据的属性采用树状结构建立决策模型, 决策树模型常常用来解决分类和回归问题。

    常见的算法包括:分类及回归树(Classification And Regression Tree, CART), ID3 (Iterative Dichotomiser 3), C4.5, Chi-squared Automatic Interaction Detection(CHAID), Decision Stump, 随机森林(Random Forest), 多元自适应回归样条(MARS)以及梯度推进机(Gradient Boosting Machine, GBM)



    ===========================================================


    机器学习十大算法都是何方神圣?


    • 机器学习与人工智能变得越来越热。大数据原本在工业界中就已经炙手可热,而基于大数据的机器学习则更加流行,因为其通过对数据的计算,可以实现数据预测、为公司提供决策依据。跟我们生活息息相关的最常见机器学习算法包括电影推荐算法、图书推荐算法。这些算法都是基于你的电影观看记录或图书购买记录来给你做推荐的。

    James Le 在 KDnuggets 上发布了一篇文章,介绍了他是如何入门机器学习的。此外,他在其中摸索出十大常用的机器学习算法,并逐一进行介绍。雷锋网编译如下,未经许可不得转载。

    如果你想学机器学习,那怎么入门呢?对于我来说,我是这样开始我的机器学习的,首先,我选修了一门人工智能课程。教我课程的老师是Technical University of Denmark的大学教授,他的研究方向就是逻辑与人工智能。我们用的教材是人工智能的经典教材: Peter Norvig's Artificial Intelligence — A Modern Approach。这本书主要讲了智能主体、对抗搜索、概率论、多智能系统、AI哲学等等。这门课程我上了三个学期,最后我做了一个简单的基于搜索的智能系统,这个系统可以完成虚拟环境下的传输任务。

    通过这门课程我学到了很多知识,在将来我还要继续学习。最近几周,我有幸在旧金山的举办的机器学习大会上与众多机器学习大牛交谈,我和他们聊了很多关于深度学习、神经网络、数据结构的内容。此外,我还在网上选修了一门机器学习入门课程,正巧刚刚修完。在接下来内容中,我将和大家分享我在这门课程中所学到的机器学习常用算法。

    机器学习算法分为三类:有监督学习、无监督学习、增强学习。有监督学习需要标识数据(用于训练,即有正例又有负例),无监督学习不需要标识数据,增强学习介于两者之间(有部分标识数据)。下面我将向大家具体介绍机器学习中10大算法(只介绍有监督、无监督两类,暂不介绍增强学习)。

    一、有监督学习

    算法一:决策树

    决策树是一种树形结构,为人们提供决策依据,决策树可以用来回答yes和no问题,它通过树形结构将各种情况组合都表示出来,每个分支表示一次选择(选择yes还是no),直到所有选择都进行完毕,最终给出正确答案。

    机器学习十大算法都是何方神圣?看完你就懂了

    算法二:朴素贝叶斯分类器

    朴素贝叶斯分类器基于贝叶斯理论及其假设(即特征之间是独立的,是不相互影响的)

    机器学习十大算法都是何方神圣?看完你就懂了

    P(A|B) 是后验概率, P(B|A) 是似然,P(A)为先验概率,P(B) 为我们要预测的值。

    具体应用有:垃圾邮件检测、文章分类、情感分类、人脸识别等。

    算法三:最小二乘法

    如果你对统计学有所了解,那么你必定听说过线性回归。最小均方就是用来求线性回归的。如下图所示,平面内会有一系列点,然后我们求取一条线,使得这条线尽可能拟合这些点分布,这就是线性回归。这条线有多种找法,最小二乘法就是其中一种。最小二乘法其原理如下,找到一条线使得平面内的所有点到这条线的欧式距离和最小。这条线就是我们要求取得线。

    机器学习十大算法都是何方神圣?看完你就懂了

    线性指的是用一条线对数据进行拟合,距离代表的是数据误差,最小二乘法可以看做是误差最小化。

    算法四:逻辑回归

    逻辑回归模型是一个二分类模型,它选取不同的特征与权重来对样本进行概率分类,用一各log函数计算样本属于某一类的概率。即一个样本会有一定的概率属于一个类,会有一定的概率属于另一类,概率大的类即为样本所属类。

    机器学习十大算法都是何方神圣?看完你就懂了

    具体应用有:信用评级、营销活动成功概率、产品销售预测、某天是否将会地震发生。

    算法五:支持向量机(SVM)

    支持向量机是一个二分类算法,它可以在N维空间找到一个(N-1)维的超平面,这个超平面可以将这些点分为两类。也就是说,平面内如果存在线性可分的两类点,SVM可以找到一条最优的直线将这些点分开。SVM应用范围很广。

    机器学习十大算法都是何方神圣?看完你就懂了

    具体应用有:广告展示、性别检测、大规模图像识别等。

    算法六:集成学习

    集成学习就是将很多分类器集成在一起,每个分类器有不同的权重,将这些分类器的分类结果合并在一起,作为最终的分类结果。最初集成方法为贝叶斯决策,现在多采用error-correcting output coding, bagging, and boosting等方法进行集成。

    机器学习十大算法都是何方神圣?看完你就懂了

    那么为什集成分类器要比单个分类器效果好呢?

    1.偏差均匀化:如果你将民主党与共和党的投票数算一下均值,可定会得到你原先没有发现的结果,集成学习与这个也类似,它可以学到其它任何一种方式都学不到的东西。

    2.减少方差:总体的结果要比单一模型的结果好,因为其从多个角度考虑问题。类似于股票市场,综合考虑多只股票可以要比只考虑一只股票好,这就是为什么多数据比少数据效果好原因,因为其考虑的因素更多。

    3.不容易过拟合。如果的一个模型不过拟合,那么综合考虑多种因素的多模型就更不容易过拟合了。

    二、无监督学习

    算法七:聚类算法

    聚类算法就是将一堆数据进行处理,根据它们的相似性对数据进行聚类。

    机器学习十大算法都是何方神圣?看完你就懂了

    聚类算法有很多种,具体如下:中心聚类、关联聚类、密度聚类、概率聚类、降维、神经网络/深度学习。

    算法八:主成分分析(PCA)

    主成分分析是利用正交变换将一些列可能相关数据转换为线性无关数据,从而找到主成分。

    机器学习十大算法都是何方神圣?看完你就懂了

    PCA主要用于简单学习与可视化中数据压缩、简化。但是PCA有一定的局限性,它需要你拥有特定领域的相关知识。对噪音比较多的数据并不适用。

    算法九:SVD矩阵分解

    SVD矩阵是一个复杂的实复负数矩阵,给定一个m 行、n列的矩阵M,那么M矩阵可以分解为M = UΣV。U和V是酉矩阵,Σ为对角阵。

    机器学习十大算法都是何方神圣?看完你就懂了

    PCA实际上就是一个简化版本的SVD分解。在计算机视觉领域,第一个脸部识别算法就是基于PCA与SVD的,用特征对脸部进行特征表示,然后降维、最后进行面部匹配。尽管现在面部识别方法复杂,但是基本原理还是类似的。

    算法十:独立成分分析(ICA)

    ICA是一门统计技术,用于发现存在于随机变量下的隐性因素。ICA为给观测数据定义了一个生成模型。在这个模型中,其认为数据变量是由隐性变量,经一个混合系统线性混合而成,这个混合系统未知。并且假设潜在因素属于非高斯分布、并且相互独立,称之为可观测数据的独立成分。

    机器学习十大算法都是何方神圣?看完你就懂了

    ICA与PCA相关,但它在发现潜在因素方面效果良好。它可以应用在数字图像、档数据库、经济指标、心里测量等。

    以上就是我对机器学习算法的一些简单介绍,现在你可以通过我的介绍与你自己的理解,好好思考机器学还可以在我们的日常生活中有哪些应用。


    ===========================================================


    新手入门机器学习十大算法


      在机器学习的世界中,有一种被称为“无免费午餐”的定理。 它意在说明没有哪种算法能够完美地解决每个问题,特别是对于监督学习问题。例如,神经网络不会总是比决策树要好,反之亦然。往往是有许多因素在起作用(如:数据集的大小、结构),共同决定了最后的结果。因此,我们应该针对具体的问题尝试许多不同的算法,并选取一部分数据作为“测试集”来评估性能,最后选择性能最好的算法。当然,我们选取的算法必须要适合我们的问题,这也是完成机器学习任务的关键所在。

      然而,我们通过有监督机器学习进行建模必须遵守一个基本的原则:通过找到输入变量X到输出变量Y的映射关系:Y = f(X),最终学习得到一个目标函数f。这样就可以针对新的输入数据X通过目标函数f预测出新的输出变量Y。在机器学习中,这称为预测建模或预测分析。

      一、线性回归(Linear Regression)

      线性回归可能是统计学和机器学习中最知名且最易于理解的算法之一。线性回归是指在输入变量(x)和输出变量(y)之间找到一种最佳的拟合关系,往往这种关系是通过查找被称为系数(B)的输入变量的特定权重来描述的。例如:y = B0 + B1 * x。即:我们将在给定输入x的情况下预测y,并且线性回归学习算法的目标是找到系数B0和B1的值。我们可以使用不同的方法从数据中学习线性回归模型,例如最小二乘法和梯度下降法。

      0ef29660203472bab718913caf419734b9be8eff

      线性回归已经存在了200多年,并且已经被广泛研究。使用该方法时,我的一些经验是删除非常相似的变量,并尽可能消除数据中的噪声。总而言之,线性回归是一种快速而简单的算法,非常适合大家作为入门的第一种算法来尝试。

      二、逻辑回归(Logistic Regression)

      逻辑回归是机器学习从统计学领域借鉴过来的另一种方法。它是二分类问题的首选方法(两个类值的问题),也是学习二元分类问题并快速见面最有效的方法。逻辑回归就像线性回归一样,目标是找到每个输入变量对应的相关系数。与线性回归不同的是,它使用了一种称为“逻辑函数”的非线性函数来转换输出的预测。

      逻辑函数看起来像一个大S,并可以将任何值转换为0到1的范围。这点非常的重要,因为我们可以将逻辑函数的输出控制到0和1来预测一个类值。此外,同线性回归一样,我们可以通过删除与输出变量无关的属性以及彼此非常相似的属性,来使模型的效果更好。

      00597fa3b8ed86738a85e746293cd785128e5a30


      三、线性判别分析(Linear Discriminant Analysis)

      逻辑回归是一种仅限于两分类问题的分类算法。但如果我们有两个以上的类别,那么线性判别分析算法是首选的线性分类算法。LDA的表示是非常直接的:它由每个类计算的数据所统计的属性组成。此外对于单个输入变量,它包括:每个类别的平均值以及所有类别计算的方差。

      ef4086d8ae1f4b5dd1c5951e94fd3a067b83691b

      LDA是通过计算每个类的判别值并对具有最大值的类进行的预测。该技术的前提是假设数据具有高斯分布,因此我们需要事先从数据中删除异常值。LDA也是分类预测建模问题的一种简单而强大的算法。


      四、决策树模型(Classification and Regression Trees)

      决策树是机器学习中预测建模一种重要的算法。如下图所示,决策树模型的表示是二叉树,和算法和数据结构中的二叉树一样,每个节点表示一个输入变量(x)和该变量上的一个分割点(假设变量是数字)。

      889a659eafb57b28a85c560bbe41f2cc58326564

      树的叶节点包含用于进行预测的输出变量(y)。预测过程是通过遍历树的分裂直到到达叶节点并输出该叶节点处的类值。决策树学模型的优势在于学习以及预测的速度都非常快。并且树模型适用于各种各样的问题,不需要对数据进行任何特殊的处理。


      五、朴素贝叶斯( Naive Bayes)

      Naive Bayes是一种简单但非常强大的预测建模算法。该模型由两种类型的概率组成,可以直接根据我们的训练数据进行计算:(1)每个类的概率;(2)每个类给定每个x值的条件概率。一旦计算出来,概率模型可利用贝叶斯定理对新数据进行预测。当我们的数据是实数时,通常会采用高斯分布,这样就可以轻松估计这些概率了。

      5a3f8b53db2814de332f67bf7f16824ba46098b9

      朴素贝叶斯之所以被称为“naive”,是因为它假设每个输入变量是独立的。现实这是一个强有力的假设,对于实际数据是不成立的,但该技术对于大范围的复杂问题是非常有效。


      六、K近邻算法(K-Nearest Neighbors)

      KNN算法非常的简单、有效。KNN的模型表示是整个训练数据集。KNN算法的原理是通过搜索整个训练集来寻找K个最相似的实例,并总结这K个实例的输出变量,进而对新的数据点进行预测。对于回归问题,可能是平均输出变量;对于分类问题,可能是常见的类值。

      KNN的诀窍在于如何确定数据实例之间的相似性。如果我们的属性都具有相同的比例,则最简单的方法是使用欧几里德距离,我们可以根据每个输入变量之间的差异直接计算该数字。

      此外,KNN可能需要大量的内存或空间来存储所有数据,但只有在需要预测时才会执行计算的操作。所以,我们还可以随着时间的推移更新和调整训练实例,以保持预测效果更加准确。

      a721bd38b7372435ce8eb856fad4d04ab030bb74


      七、学习矢量量化(Learning Vector Quantization)

      K近邻的缺点是我们需要等候整个训练数据集。而学习矢量量化算法(简称LVQ)是一种神经网络算法,允许我们选择要挂起的训练实例数量,并可以准确地学习到这些实例。如果我们的数据集可以使用KNN的方法训练出良好的结果,那么就可以尝试使用LVQ算法来减少存储整个训练数据集的内存需求。

      LVQ的表示是码本(权值)向量的集合。这些码本在开始时随机选择的,并且适合于在学习算法的多次迭代中最佳地总结训练数据集。在学习之后,可我们以使用码本向量来进行与KNN类似的预测。通过计算每个码本矢量和新数据实例之间的距离来找到最相似的邻居(即最佳匹配码本矢量)。然后,将最佳匹配单元的类值或回归值(实值)作为预测返回。如果将数据重新缩放至相同范围(例如0到1之间),就可以获得最好的结果。

      75c23ee98e3703cb41ee437b25d35abd136e357e


      八、支持向量机(Support Vector Machines)

      支持向量机可能是目前最流行的机器学习算法之一。SVM算法的核心是选择一个最佳的超平面将输入变量空间中的点按照它们的类(0或1)分开。所谓的“超平面”其实就是一个分割输入变量空间的线,在二维空间中,我们可以将其可视化为一条直线,并且假设我们所有的输入点都可以被这条直线完全分开。

      0e54da9259dc6a78f09bc778741fb9d895999110

      此外,超平面和最近数据点之间的距离称为边距。可以分离两个类的最佳或最优超平面是具有最大边距的行。这些点与定义超平面和分类器的构造是有关,这些点称为支持向量。它们可以支持或定义超平面。

      最后,SVM可能是最强大的分类器之一,值得我们使用数据集尝试使用。


      九、随机森林(Bagging and Random Forest)

      随机森林是最流行和最强大的机器学习算法之一。它是一种被称为“bagging”的集成机器学习算法。Bagging是一种强大的统计方法,常用于估计从数据样本的数量。如:我们取大量的数据样本后计算平均值,然后再对所有平均值进行平均,以便更好地估计真实的平均值。

      在bagging中,要对我们的训练数据进行多次采样,然后为每个数据样本构建模型。当需要对新数据进行预测时,每个模型都进行预测,并对预测进行平均,以更好地估计真实输出值。

      随机森林是对这种方法的一种调整,通过创建决策树,使得不是选择最佳分裂点,而是通过引入随机性来进行次优分割。因此,为每个数据样本构建的模型与它们原本是不同的,这样结合它们的预测可以更好地估计真实的输出结果。

      5cf2c5f1645e2116385ab856d465450abf17b99b


      十、Boosting and Adaboost

      Boosting是一种集成方法,试图从多个弱分类器中创建强分类器。这一过程是通过从训练数据种构建模型,然后创建第二个模型来完成的,该模型试图纠正来自第一个模型的错误。以此类推,添加模型直到能完美预测训练集或是添加最大数量的模型。

      Adaboost是第一个真正成功实现Boosting的算法,是理解boosting方法的最佳起点。现在很多boosting方法都是建立在Adaboost算法之上,效果最好的当数是gradient boosting。

      此外,Adaboost通常会和短决策树一起使用。在创建第一棵树之后,使用树在每个训练实例上的性能来衡量创建的下一棵树应该对每个训练实例关注多少。往往难以预测的训练数据会被赋予更多的权重,而容易预测的实例被赋予较少的权重。这样,一个接一个地依次创建模型,每个模型更新训练实例上的权重,这些权重影响序列中的下一棵树所执行的学习。构建完所有树之后,将对新数据进行预测,并根据训练数据的准确性对每棵树的性能进行加权。

      82d0369543a924f6ee17dc41ca88dd74e5871e22




            十大Python机器学习算法(附代码)


        1、线性回归

        线性回归通常用于根据连续变量估计实际数值(房价、呼叫次数、总销售额等)。我们通过拟合最佳直线来建立自变量和因变量的关系。这条最佳直线叫做回归线,并且用 Y= a *X + b 这条线性等式来表示。

        理解线性回归的最好办法是回顾一下童年。假设在不问对方体重的情况下,让一个五年级的孩子按体重从轻到重的顺序对班上的同学排序,你觉得这个孩子会怎么做?他(她)很可能会目测人们的身高和体型,综合这些可见的参数来排列他们。这是现实生活中使用线性回归的例子。实际上,这个孩子发现了身高和体型与体重有一定的关系,这个关系看起来很像上面的等式。

        在这个等式中:

        • Y:因变量

        • a:斜率

        • x:自变量

        • b :截距

        系数 a 和 b 可以通过最小二乘法获得。

        参见下例。我们找出最佳拟合直线 y=0.2811x+13.9。已知人的身高,我们可以通过这条等式求出体重。

        640?wx_fmt=jpeg

        线性回归的两种主要类型是一元线性回归和多元线性回归。一元线性回归的特点是只有一个自变量。多元线性回归的特点正如其名,存在多个自变量。找最佳拟合直线的时候,你可以拟合到多项或者曲线回归。这些就被叫做多项或曲线回归。

        Python 代码

        640?wx_fmt=png



        2、逻辑回归

        别被它的名字迷惑了!这是一个分类算法而不是一个回归算法。该算法可根据已知的一系列因变量估计离散数值(比方说二进制数值 0 或 1 ,是或否,真或假)。简单来说,它通过将数据拟合进一个逻辑函数来预估一个事件出现的概率。因此,它也被叫做逻辑回归。因为它预估的是概率,所以它的输出值大小在 0 和 1 之间(正如所预计的一样)。

        让我们再次通过一个简单的例子来理解这个算法。

        假设你的朋友让你解开一个谜题。这只会有两个结果:你解开了或是你没有解开。想象你要解答很多道题来找出你所擅长的主题。这个研究的结果就会像是这样:假设题目是一道十年级的三角函数题,你有 70%的可能会解开这道题。然而,若题目是个五年级的历史题,你只有30%的可能性回答正确。这就是逻辑回归能提供给你的信息。

        从数学上看,在结果中,几率的对数使用的是预测变量的线性组合模型。

        640?wx_fmt=png

        在上面的式子里,p 是我们感兴趣的特征出现的概率。它选用使观察样本值的可能性最大化的值作为参数,而不是通过计算误差平方和的最小值(就如一般的回归分析用到的一样)。

        现在你也许要问了,为什么我们要求出对数呢?简而言之,这种方法是复制一个阶梯函数的最佳方法之一。我本可以更详细地讲述,但那就违背本篇指南的主旨了。

        640?wx_fmt=jpeg

        Python代码

        640?wx_fmt=png


        3、KNN(K – 最近邻算法)

        该算法可用于分类问题和回归问题。然而,在业界内,K – 最近邻算法更常用于分类问题。K – 最近邻算法是一个简单的算法。它储存所有的案例,通过周围k个案例中的大多数情况划分新的案例。根据一个距离函数,新案例会被分配到它的 K 个近邻中最普遍的类别中去。

        这些距离函数可以是欧式距离、曼哈顿距离、明式距离或者是汉明距离。前三个距离函数用于连续函数,第四个函数(汉明函数)则被用于分类变量。如果 K=1,新案例就直接被分到离其最近的案例所属的类别中。有时候,使用 KNN 建模时,选择 K 的取值是一个挑战。

        更多信息:K – 最近邻算法入门(简化版)

        640?wx_fmt=jpeg

        我们可以很容易地在现实生活中应用到 KNN。如果想要了解一个完全陌生的人,你也许想要去找他的好朋友们或者他的圈子来获得他的信息。

        在选择使用 KNN 之前,你需要考虑的事情:

        • KNN 的计算成本很高。

        • 变量应该先标准化(normalized),不然会被更高范围的变量偏倚。

        • 在使用KNN之前,要在野值去除和噪音去除等前期处理多花功夫。

        640?wx_fmt=png


        4、支持向量机

        这是一种分类方法。在这个算法中,我们将每个数据在N维空间中用点标出(N是你所有的特征总数),每个特征的值是一个坐标的值。

        举个例子,如果我们只有身高和头发长度两个特征,我们会在二维空间中标出这两个变量,每个点有两个坐标(这些坐标叫做支持向量)。

        640?wx_fmt=jpeg

        现在,我们会找到将两组不同数据分开的一条直线。两个分组中距离最近的两个点到这条线的距离同时最优化。

        640?wx_fmt=jpeg

         上面示例中的黑线将数据分类优化成两个小组,两组中距离最近的点(图中A、B点)到达黑线的距离满足最优条件。这条直线就是我们的分割线。接下来,测试数据落到直线的哪一边,我们就将它分到哪一类去。

        更多请见:支持向量机的简化

        将这个算法想作是在一个 N 维空间玩 JezzBall。需要对游戏做一些小变动:

        • 比起之前只能在水平方向或者竖直方向画直线,现在你可以在任意角度画线或平面。

        • 游戏的目的变成把不同颜色的球分割在不同的空间里。

        • 球的位置不会改变。

        Python代码

        640?wx_fmt=png


        5、朴素贝叶斯

        在预示变量间相互独立的前提下,根据贝叶斯定理可以得到朴素贝叶斯这个分类方法。用更简单的话来说,一个朴素贝叶斯分类器假设一个分类的特性与该分类的其它特性不相关。举个例子,如果一个水果又圆又红并且直径大约是 3 英寸,那么这个水果可能会是苹果。即便这些特性互相依赖或者依赖于别的特性的存在,朴素贝叶斯分类器还是会假设这些特性分别独立地暗示这个水果是个苹果。

        朴素贝叶斯模型易于建造,且对于大型数据集非常有用。虽然简单,但是朴素贝叶斯的表现却超越了非常复杂的分类方法。

        贝叶斯定理提供了一种从P(c)、P(x)和P(x|c) 计算后验概率 P(c|x) 的方法。请看以下等式:

        640?wx_fmt=jpeg

        在这里,

        • P(c|x) 是已知预示变量(属性)的前提下,类(目标)的后验概率

        • P(c) 是类的先验概率

        • P(x|c) 是可能性,即已知类的前提下,预示变量的概率

        • P(x) 是预示变量的先验概率

        例子:让我们用一个例子来理解这个概念。在下面,我有一个天气的训练集和对应的目标变量“Play”。现在,我们需要根据天气情况,将会“玩”和“不玩”的参与者进行分类。让我们执行以下步骤。

        步骤1:把数据集转换成频率表。

        步骤2:利用类似“当Overcast可能性为0.29时,玩耍的可能性为0.64”这样的概率,创造 Likelihood 表格。

        640?wx_fmt=jpeg

        步骤3:现在,使用朴素贝叶斯等式来计算每一类的后验概率。后验概率最大的类就是预测的结果。

        问题:如果天气晴朗,参与者就能玩耍。这个陈述正确吗?

        我们可以使用讨论过的方法解决这个问题。于是 P(会玩 | 晴朗)= P(晴朗 | 会玩)* P(会玩)/ P (晴朗)

        我们有 P (晴朗 |会玩)= 3/9 = 0.33,P(晴朗) = 5/14 = 0.36, P(会玩)= 9/14 = 0.64

        现在,P(会玩 | 晴朗)= 0.33 * 0.64 / 0.36 = 0.60,有更大的概率。

        朴素贝叶斯使用了一个相似的方法,通过不同属性来预测不同类别的概率。这个算法通常被用于文本分类,以及涉及到多个类的问题。

        640?wx_fmt=png


        6、决策树

        这是我最喜爱也是最频繁使用的算法之一。这个监督式学习算法通常被用于分类问题。令人惊奇的是,它同时适用于分类变量和连续因变量。在这个算法中,我们将总体分成两个或更多的同类群。这是根据最重要的属性或者自变量来分成尽可能不同的组别。想要知道更多,可以阅读:简化决策树。

        640?wx_fmt=jpeg

        来源: statsexchange

        在上图中你可以看到,根据多种属性,人群被分成了不同的四个小组,来判断 “他们会不会去玩”。为了把总体分成不同组别,需要用到许多技术,比如说 Gini、Information Gain、Chi-square、entropy。

        理解决策树工作机制的最好方式是玩Jezzball,一个微软的经典游戏(见下图)。这个游戏的最终目的,是在一个可以移动墙壁的房间里,通过造墙来分割出没有小球的、尽量大的空间。

        640?wx_fmt=jpeg

        因此,每一次你用墙壁来分隔房间时,都是在尝试着在同一间房里创建两个不同的总体。相似地,决策树也在把总体尽量分割到不同的组里去。

        更多信息请见:决策树算法的简化

        Python代码

        640?wx_fmt=png


        7、K 均值算法

        K – 均值算法是一种非监督式学习算法,它能解决聚类问题。使用 K – 均值算法来将一个数据归入一定数量的集群(假设有 k 个集群)的过程是简单的。一个集群内的数据点是均匀齐次的,并且异于别的集群。

        还记得从墨水渍里找出形状的活动吗?K – 均值算法在某方面类似于这个活动。观察形状,并延伸想象来找出到底有多少种集群或者总体。

        640?wx_fmt=jpeg

        K – 均值算法怎样形成集群:

        1. K – 均值算法给每个集群选择k个点。这些点称作为质心。

        2. 每一个数据点与距离最近的质心形成一个集群,也就是 k 个集群。

        3. 根据现有的类别成员,找出每个类别的质心。现在我们有了新质心。

        4. 当我们有新质心后,重复步骤 2 和步骤 3。找到距离每个数据点最近的质心,并与新的k集群联系起来。重复这个过程,直到数据都收敛了,也就是当质心不再改变。

        如何决定 K 值:

        K – 均值算法涉及到集群,每个集群有自己的质心。一个集群内的质心和各数据点之间距离的平方和形成了这个集群的平方值之和。同时,当所有集群的平方值之和加起来的时候,就组成了集群方案的平方值之和。

        我们知道,当集群的数量增加时,K值会持续下降。但是,如果你将结果用图表来表示,你会看到距离的平方总和快速减少。到某个值 k 之后,减少的速度就大大下降了。在此,我们可以找到集群数量的最优值。

        640?wx_fmt=jpeg

        Python代码

        640?wx_fmt=png


        8、随机森林

        随机森林是表示决策树总体的一个专有名词。在随机森林算法中,我们有一系列的决策树(因此又名“森林”)。为了根据一个新对象的属性将其分类,每一个决策树有一个分类,称之为这个决策树“投票”给该分类。这个森林选择获得森林里(在所有树中)获得票数最多的分类。

        每棵树是像这样种植养成的:

        1. 如果训练集的案例数是 N,则从 N 个案例中用重置抽样法随机抽取样本。这个样本将作为“养育”树的训练集。

        2. 假如有 M 个输入变量,则定义一个数字 m<<M。m 表示,从 M 中随机选中 m 个变量,这 m 个变量中最好的切分会被用来切分该节点。在种植森林的过程中,m 的值保持不变。

        3. 尽可能大地种植每一棵树,全程不剪枝。

        Python

        640?wx_fmt=png



        9、Gradient Boosting 和 AdaBoost 算法

        当我们要处理很多数据来做一个有高预测能力的预测时,我们会用到 GBM 和 AdaBoost 这两种 boosting 算法。boosting 算法是一种集成学习算法。它结合了建立在多个基础估计值基础上的预测结果,来增进单个估计值的可靠程度。这些 boosting 算法通常在数据科学比赛如 Kaggl、AV Hackathon、CrowdAnalytix 中很有效。

        Python代码

        640?wx_fmt=png

        GradientBoostingClassifier 和随机森林是两种不同的 boosting 树分类器。人们常常问起这两个算法之间的区别。


        10、降维算法

        在过去的 4 到 5 年里,在每一个可能的阶段,信息捕捉都呈指数增长。公司、政府机构、研究组织在应对着新资源以外,还捕捉详尽的信息。

        举个例子:电子商务公司更详细地捕捉关于顾客的资料:个人信息、网络浏览记录、他们的喜恶、购买记录、反馈以及别的许多信息,比你身边的杂货店售货员更加关注你。

        作为一个数据科学家,我们提供的数据包含许多特点。这听起来给建立一个经得起考研的模型提供了很好材料,但有一个挑战:如何从 1000 或者 2000 里分辨出最重要的变量呢?在这种情况下,降维算法和别的一些算法(比如决策树、随机森林、PCA、因子分析)帮助我们根据相关矩阵,缺失的值的比例和别的要素来找出这些重要变量。

        Python代码

        640?wx_fmt=png