草庐IT

机器学习绪论

「赞美太阳!」 2023-03-28 原文

机器学习绪论

机器学习概念
机器学习
  • 有监督学习
    • 如:回归,分类
  • 无监督学习
    • 如:聚类,降维
什么是机器学习
  • 程序通过不断的学习达到一定的性能,可以完成指定的任务

  • 定义

    • (1)机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验 学习中改善具体算法的性能。

      (2)机器学习是对能通过经验自动改进的计算机算法的研究。

      (3)机器学习是用数据或以往的经验,以此优化计算机程序的性能标准

  • 机器学习的三个要素

    • 模型(model):模型在未进行训练前,其可能的参数是多个甚至无穷的,故可能的模型也是多个甚至无穷的,这些模型构成的集合就是假设空间。
    • 策略(strategy):即从假设空间中挑选出参数最优的模型的准则。模型的分类或预测结果与实际情况的误差(损失函数)越小,模型就越好。那么策略就是误差最小。
    • 算法(algorithm):即从假设空间中挑选模型的方法(等同于求解最佳的模型参数)。机器学习的参数求解通常都会转化为最优化问题,故学习算法通常是最优化算法,例如最速梯度下降法、牛顿法以及拟牛顿法等
机器学习算法
  • 监督学习 :房价预测 ( 回归 )
    • 监督学习
      • 正确价格
    • 回归问题
      • 预测价格
  • 监督学习 :垃圾邮件分类 ( 分类 )
    • 监督学习
      • \(y\in\lbrace 0,1\rbrace\) 0表示负向类 1表示正向类
    • 分类问题
      • 对邮件的好坏进行区分
  • 无监督学习 **:聚类 **
    • 如:邮件分类 没有指定哪些是正向类,哪些是负向类,无监督学习可以将它们分为不同的簇,这就是聚类
    • 如新闻分类,同一个新闻主题的多个报道网页都放到同一个簇别中一起展示,这就是聚类算法的应用
  • 总结
    • 监督学习:所用训练数据都是被标记过的
    • 无监督学习:训练集中的所有数据都没有标记
补充
矩阵

​ 由 m × n 个数\(A_ij\)排成的m行n列的数表称为m行n列的矩阵,简称m × n矩阵。记作:

\[A = \left[ \begin{array} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ a_{31} & a_{32} & \cdots & a_{3n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \\ \end{array} \right] \]

​ 这种 \(m\times n\) 个数称为矩阵 \(A\) 的元素 \(A_{ij} = i,j\) 代表 \(i 行,j列\)

向量

´ 向量:在数学中,向量(也称为欧几里得向量、几何向量、矢量),指具有大小和方向的量。与向量对应的只有大小,没有方向的量叫做数量(物理学中称标量

是一行或一列的特殊矩形,通常情况下,向量指列向量

​ 向量:一个 \(n\times 1\) 矩阵

\[Y = \left[ \begin{array}\\ {11} \\ {21} \\ {31} \\ 40 \\ \end{array} \right] \]

矩阵运算
  • 举例

\[A =\left[ \begin{array}\\ a1 & a2 \\ a3 & a4 \\ \end{array} \right] B = \left[ \begin{array}\\ b1 & b2 \\ b3& b4 \\ \end{array} \right] \]

  • 矩阵加法,减法

    • 满足交换律 : A+B = B+A , A - B = B - A

      \[A+B =\left[ \begin{array}\\ a1 + b1 & a2+b2 \\ a3+b3&a4+b4 \\ \end{array} \right] \]

      减法相同

  • 矩阵乘法

    • 乘法条件:两个矩阵相乘,需要满足A的列数等于**B的行数*

    • A矩阵的行元素 ,乘以 B 的每一列然后相加

      \[A * B =\left[ \begin{array}\\ a1*b1+a2*b3&a1*b2+a2*b4\\ a3*b1+a4*b3&a3*b2+a4*b4 \end{array} \right] \]

    • 乘法不满足交换律,但满足分配率和结合率

      • AB \(\neq\) BA
      • (AB)C=A(BC)
      • (A+B)C=AC+BC
      • C(A+B)=CA+CB
  • 逆矩阵

    • **逆矩阵 ** : 如果 A 是一个m x m 矩阵, 并且如果它有逆矩阵。

      矩阵与其逆阵的乘积等于单位阵:

      $AA^{-1} = A^{-1}A = I $

    • 不是所有的矩阵都有逆矩阵

      没有逆矩阵的矩阵称为“奇异矩阵” 或“退化矩阵”。

  • 矩阵转置

    • 例如:

      \[A =\left[ \begin{array}\\ 1 & 2 &3\\ 4 & 5 &6\\ \end{array} \right] A^T =\left[ \begin{array}\\ 1 &4\\ 2&5\\ 3&6\\ \end{array} \right] \]

  • 线性方程

    \[\begin{cases} a_{11}x_1+a_{12}x_2+a_{13}x_3=y1 \\ a_{21}x_1+a_{22}x_2+a_{23}x_3=y2 \\ a_{31}x_1+a_{32}x_2+a_{33}x_3=y3 \\ \end{cases} \]

    \[若y = \left[ \begin{array}\\ y1\\ y2\\ y3 \end{array} \right] , A = \left[ \begin{array}\\ a_{11} &a_{12}&a_{13}\\ a_{21}&a_{22}&a_{32}\\ a_{31}&a_{32}&a_{33}\\ \end{array} \right] , x = \left[ \begin{array}\\ x_1\\ x_2\\ x_3\\ \end{array} \right] 所以 \left[ \begin{array}\\ y1\\ y2\\ y3 \end{array} \right] = \left[ \begin{array}\\ a_{11} &a_{12}&a_{13}\\ a_{21}&a_{22}&a_{32}\\ a_{31}&a_{32}&a_{33}\\ \end{array} \right] \left[ \begin{array}\\ x_1\\ x_2\\ x_3\\ \end{array} \right] \]

  • 线性组合

    • 代码实现转置

      y = w.T.dot(x)
      

\[y = \sum w_ix_i = w_1x_1 + w_2x_2+...w_nx_n \]

\[= \left[ \begin{array}\\ w_1w_2 ...w_n \end{array} \right] \left[ \begin{array}\\ x_1\\ x_2\\ \vdots x_n \end{array} \right] =w^Tx \]

\[= \left[ \begin{array}\\ x_1x_2 ...x_n \end{array} \right] \left[ \begin{array}\\ w_1\\ w_2\\ \vdots w_n \end{array} \right] =x^Tw \]

  • np.array 的使用

    from numpy import *
    import numpy as np
    
    # 使用np.array创建矩阵:
    np.array([[1,4],[3,5]])
    
    # 使用mat创建矩阵:   
    mat(‘[1 2;3 4]’)   # 用;隔开,用‘ ’括上;也可以mat([1,2],[3,4])
    
    # 创建3*3的零矩阵:
    np.zeros((3,3))  
    
    # 创建2*4的1矩阵 :
    np.ones((2,4))   #默认是浮点型的数据  
    
    # 创建2*2的单位矩阵:
    np.eye(2,2,dtype=int) #注意没有多余的()
    
    # 创建对角矩阵:
    np.diag([1, 2, 3])
    
    # 创建有序矩阵:
    np.arange(2,12,2)
    
    np.sum(): 按列或行求和,A.sum(axis=0); sum(A,1); sum(A[2:5], 0)
    np.max(): 按列或行求最大值,A.max(axis=0); A.max(1); max(A[2:5],0)
    np.min(): 按列或行求最小值,A.min(0); A.min(1); min(A[2:5],1)
    np.argmax(): 列或行最大值的索引,A.argmax(axis=0); argmax(A[2:5],1)  
    np.argmin(): 列或行求最大值的索引,A.argmin(0); argmin(A[2:5],0)
    
    (参数
    axis=0, 按列
    axis=1,按行
    )
    
  • slice切片

    A[ 起始位:终止位:步长 ]      
    
    1.每个元素可用正向下标(从0开始)或反向下标(从-1开始)表示,
    2.步长默认=1,可省略
    
    A=np.array([1,2,3,4,5,6]):    正向下标:0 ~ 5    反向下标:-1~-6
    # A[1:5]->[2,3,4,5]   (正向,默认步长=1)
    # A[2:] ->[3,4,5,6]     (正向,默认步长=1)
    # A[:5] ->[1,2,3,4,5]  (正向,默认步长=1)
    # A[::2]->[1,3,5]   (正向,步长=2)
    # A[1:5:2]->[2,4]   (正向,步长=2)
    # A[-1:-4:-1]->[6,5,4]  (反向,步长=-1)
    # A[-1::-1]->[6,5,4,3,2,1]  (反向,步长=-1)
    # A[-2:-5:-2]->[5,3]  (反向,步长=-2)
    # A[1:-2]->[2,3,4]  (正向,默认步长=1)
    # A[-1:2:-1]->[6,5,4]  (反向,步长=-1)
    
  • vstack , hstack 的使用

    from numpy import *
    import numpy as np
    
    # 创建2行2列的全1矩阵
    a=np.ones((2,2))
    
    # 创建2行2列的全零矩阵
    b=np.eye(2,2)
    
    # 按列方向合并两个矩阵,列数不变,行数相加
    vstack((a,b))
    
    [[1, 1]
    [1, 1]
    [1, 0]
    [0, 1]]
    
    # 按行方向合并两个矩阵, 行数不变,列数相加
    hstack((a,b))
    
    [[1, 1, 1, 0]
    [1, 1, 0, 1]]
    
  • **np.c_ ** np.r _ 的使用

    from numpy import *
    import numpy as np
    # np.c_ : 按列连接两个矩阵
    # np.r_: 按行连接两个矩阵
    
    1.
    a = np.array([1, 2, 3]);  b = np.array([4, 5, 6])
    
    c = np.c_[a,b] ->[[1, 4 ], [2, 5], [3 6]]
    c = np.c_[c,a] -> [[1, 4, 1], [2, 5, 2], [3, 6, 3]]
    c = np.r_[a,b] -> [1, 2, 3, 4, 5, 6]
    
    2.
    a = np.array([[1, 2, 3],[1,1,1]]);    b = np.array([[4, 5, 6],[7,8,9]])
    c =np.c_[a,b]->[[1, 2, 3, 4, 5, 6], [1, 1, 1, 7, 8, 9]]
    c = np.r_[a,b] -> [[1, 2, 3], [1, 1, 1], [4, 5, 6], [7, 8, 9]]
    
    
    
  • 画图 matplotlib

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib
    
    matplotlib.rcParams["font.sans-serif"] = ["SimHei"]  #在画布中显示中文
    matplotlib.rcParams['axes.unicode_minus']=False      #画布中显示负号 
    
    x=[1.5,0.8,2.6,1.0,0.6,2.8,1.2,0.9,0.4,1.3,1.2,2.0,1.6,1.8,2.2]
    y=[3.1,1.9,4.2,2.3,1.6,4.9,2.8,2.1,1.4,2.4,2.4,3.8,3.0,3.4,4.0]
    
    #创建画布
    plt.figure("散点图")
    #画图
    plt.scatter(x,y)
    
    #线性回归公式
    w = 1.5
    b = 0.8
    
    x_min=min(x)
    x_max=max(x)
    
    y_min = w*x_min + b
    y_max = w*x_max + b
    
    #画出回归方程
    plt.plot([x_min,x_max],[y_min,y_max],'r')
    plt.show()
    
总结
  • 通过上图我们可以知道,不断的更换 w 和 b 可以让直线拟合散点图
  • 所以 在机器学习中线性回归模型,就是在不断的更新 w 和 b 找到 w 和 b 的最优解

有关机器学习绪论的更多相关文章

  1. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  2. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  3. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  4. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  5. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

  6. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  7. ruby - 我如何学习 ruby​​ 的正则表达式? - 2

    如何学习ruby​​的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby​​的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/

  8. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

  9. 机器学习——时间序列ARIMA模型(四):自相关函数ACF和偏自相关函数PACF用于判断ARIMA模型中p、q参数取值 - 2

    文章目录1、自相关函数ACF2、偏自相关函数PACF3、ARIMA(p,d,q)的阶数判断4、代码实现1、引入所需依赖2、数据读取与处理3、一阶差分与绘图4、ACF5、PACF1、自相关函数ACF自相关函数反映了同一序列在不同时序的取值之间的相关性。公式:ACF(k)=ρk=Cov(yt,yt−k)Var(yt)ACF(k)=\rho_{k}=\frac{Cov(y_{t},y_{t-k})}{Var(y_{t})}ACF(k)=ρk​=Var(yt​)Cov(yt​,yt−k​)​其中分子用于求协方差矩阵,分母用于计算样本方差。求出的ACF值为[-1,1]。但对于一个平稳的AR模型,求出其滞

  10. 建模分析 | 平面2R机器人(二连杆)运动学与动力学建模(附Matlab仿真) - 2

    目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标

随机推荐