精华内容
下载资源
问答
  • 机器学习李宏毅学习笔记-11、了解什么是Machine learning?2、学习中心极限定理,学习正态分布,学习最大似然估计2.1推导回归Loss function2.2 学习损失函数与凸函数之间的关系2.3了解全局最优和局部最优3、学习导数...

    1、了解什么是Machine learning?

    那么机器学习到底是什么东东呢?是造一个机器人来学习吗,非也。按照李宏毅老师的说法,机器学习相当于找一个函数(looking for a Function)。

    ML的一般步骤:
    step1: Model(a set of functions)

    第一步就是找个模型,也就是找一个函数/算法模板。线性回归的模型呢,就是一个线性的函数啦: y = wx+b (w和x为向量)

    step2: Goodness of functionon(Loss function)

    确定了模型的构造方法,下一步就是确定模型的具体参数。这一步通常会构建损失函数来衡量模型的好坏,线性回归用到的损失函数是均方误差,也就是经典的“最小二乘法”

    step3: Pick the ‘best’ function

    得到了损失函数,接着就是怎么求解了。也许你会直接背出公式,但对于计算机来说,采用梯度下降的方法可能更简单一些.

    2、学习中心极限定理,学习正态分布,学习最大似然估计

    中心极限定理:
    设随机变量X1,X2,…Xn,…独立同分布,并且具有有限的数学期望和方差:E(Xi)=μ,D(Xi)=σ^2(i=1,2…),则对任意x,分布函数
    Fn(x)=P{i=1nnμnσx} F_{n}(x)=P\left\{\frac{\sum_{i=1}^{n}-n \mu}{\sqrt{n} \sigma} \leq x\right\}
    满足:limnFn(x)=limn{i=1nXinμnσx}=12πxet22dt=Φ(x) \lim _{n \rightarrow \infty} F_{n}(x)=\lim _{n \rightarrow \infty}\left\{\frac{\sum_{i=1}^{n} X_{i}-n \mu}{\sqrt{n} \sigma} \leq x\right\}=\frac{1}{\sqrt{2} \pi} \int_{-\infty}^{x} e^{-\frac{t^{2}}{2}} d t=\Phi(x)

    正态分布的概率密度函数:
    f(x)=12πσe(xμ)22σ2 f(x)=\frac{1}{\sqrt{2 \pi} \sigma} e^{-\frac{(x-\mu)^{2}}{2 \sigma^{2}}}
    记作:XN(μ,σ2) X \sim N\left(\mu, \sigma^{2}\right)
    μ=0,σ2=1\mu =0,\sigma^{2}=1 时, 记作 :XN(0,1) X \sim N\left(0, 1\right) 为标准正态分布函数 :Φ(x)\Phi(x)

    极大似然估计:
    极大似然估计,只是一种概率论在统计学的应用,它是参数估计的方法之一。说的是已知某个随机样本满足某种概率分布,但是其中具体的参数不清楚,参数估计就是通过若干次试验,观察其结果,利用结果推出参数的大概值。最大似然估计是建立在这样的思想上:已知某个参数能使这个样本出现的概率最大,我们当然不会再去选择其他小概率的样本,所以干脆就把这个参数作为估计的真实值。
    求极大似然估计步骤:
    1、写出似然函数(连续性):
    L(θx1,x2, ,xn)=f(x1,x2, ,xnθ)=f(xiθ) L\left(\theta | x_{1}, x_{2}, \cdots, x_{n}\right)=f\left(x_{1}, x_{2}, \cdots, x_{n} | \theta\right)=\prod f\left(x_{i} | \theta\right)
    2、取对数
    lnL(θx1,,xn)=i=1nlnf(xiθ) \ln L\left(\theta | x_{1}, \ldots, x_{n}\right)=\sum_{i=1}^{n} \ln f\left(x_{i} | \theta\right)
    3、求出使得对数似然函数取最大值的参数的值

    lnL(θx1,,xn)θj=0,j=1,2,,k\frac{\partial \ln L(\theta| x_{1}, \ldots, x_{n})}{\partial \theta_{j}}=0, j=1,2, \ldots, k解得:θ\theta

    2.1推导回归Loss function

    线性回归模型可以表示为:
    1、y=hθ(x)+ϵy=h_{\theta}(x)+\epsilon
    2、ϵ(i)N(0,δ2),ϵ(i)\epsilon^{(i)} \sim N\left(0, \delta^{2}\right), \epsilon^{(i)}服从正态分布
    即y由模型拟合以及随机扰动构成,而由中心极限定理,我们假设随机扰动ϵ服从均值为0方差为δ2\delta^{2}的正态分布。
    由于中心极限定理和大数定理:
    p(y(i)y(i);θ)=12πσexp((y(i)θTx(i))22σ2) p\left(y^{(i)} | y^{(i)} ; \theta\right)=\frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}}{2 \sigma^{2}}\right)
    1、求得到极大似然函数:
    L(θ)=i=1mp(y(i)y(i);θ)=i=1m12πσexp((y(i)θTx(i))22σ2) \begin{array}{c}{L(\theta)=\prod_{i=1}^{m} p\left(y^{(i)} | y^{(i)} ; \theta\right)} \\{=\prod_{i=1}^{m} \frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}}{2 \sigma^{2}}\right)}\end{array}
    2、取对数
    logL(θ)=logi=1m12πσexp((y(i)θTx(i))22σ2)=i=1mlog12πσexp((y(i)θTx(i))22σ2)=mlog12πσ1σ212i=1m(y(i)θTx(i))2 \log L(\theta)=\log \prod_{i=1}^{m} \frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}}{2 \sigma^{2}}\right) =\sum_{i=1}^{m} \log \frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}}{2 \sigma^{2}}\right) =m \log \frac{1}{\sqrt{2 \pi} \sigma}-\frac{1}{\sigma^{2}} \frac{1}{2} \sum_{i=1}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}
    3、取最大值:
    要取得上述函数的最大值,只能使得:12i=1m(y(i)θTx(i))2 \frac{1}{2} \sum_{i=1}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}
    所以我们得到线性Loss function
    J(θ)=12i=1m(y(i)θTx(i))2 J(\theta)=\frac{1}{2} \sum_{i=1}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}
    为了消除数据量的影响,改进线性损失函数为:
    J(θ)=12mi=1m(y(i)θTx(i))2 J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}

    2.2 学习损失函数与凸函数之间的关系

    如果损失函数是凸函数(convex)的,梯度下降算法就一定能达到全局最优解。

    2.3了解全局最优和局部最优

    损失函数在梯度下降的过程中,可能会下降到局部最优点,局部最优点为极小值,而并非全局最优的最小值
    如果损失函数为凸函数时,梯度下降能达到全局最优

    3、学习导数,泰勒展开

    导数:
    f(x0)=limΔx0ΔyΔx=limΔx0f(x0+Δx)f(x0)Δx f^{\prime}\left(x_{0}\right)=\lim _{\Delta x \rightarrow 0} \frac{\Delta y}{\Delta x}=\lim _{\Delta x \rightarrow 0} \frac{f\left(x_{0}+\Delta x\right)-f\left(x_{0}\right)}{\Delta x}
    泰勒展开:
    f(x)=f(x0)0!+f(x0)1!(xx0)+f(x0)2!(xx0)2++f(n)(x0)n!(xx0)n+Rn(x) f(x)=\frac{f\left(x_{0}\right)}{0 !}+\frac{f^{\prime}\left(x_{0}\right)}{1 !}\left(x-x_{0}\right)+\frac{f^{\prime \prime}\left(x_{0}\right)}{2 !}\left(x-x_{0}\right)^{2}+\ldots+\frac{f^{(n)}\left(x_{0}\right)}{n !}\left(x-x_{0}\right)^{n}+R_{n}(x)
    常用的拉格朗日余项:Rn(x)=f(n+1)[x0+θ(xx0)](xx0)n+1(n+1)!R_{n}(x)=f^{(n+1)}\left[x_{0}+\theta\left(x-x_{0}\right)\right] \frac{\left(x-x_{0}\right)^{n+1}}{(n+1) !}

    3.1推导梯度下降公式

    梯度下降公式的推导:
    假设函数:hθ(x0)=θ0+θ1xi,i=1, ,nh_{{\theta}}\left(x_{0}\right)=\theta_{0}+\theta_{1} x_{i}, i=1, \cdots, n

    代价函数:J(θ)=12ni=1n(y(i)θTx(i))2J(\theta)=\frac{1}{2n} \sum_{i=1}^{n}\left(y^{(i)}-\theta^{T} x^{(i)}\right)^{2}
    梯度下降公式:
    θ0:=θ0αθ0J(θ0,θ1) \theta_{0} :=\theta_{0}-\alpha \cdot \frac{\partial}{\partial \theta_{0}} J\left(\theta_{0}, \theta_{1}\right)
    θ1:=θ1αθ1J(θ0,θ) \theta_{1} :=\theta_{1}-\alpha\cdot \frac{\partial}{\partial \theta_{1}} \cdot J\left(\theta_{0}, \theta\right)
    梯度下降推导公式:
    θ0=θ0α1ni=1n(h0(xi)yi) \theta_{0}=\theta_{0}- \alpha\cdot \frac{1}{n} \sum_{i=1}^{n}\left(h_{0}\left(x_{i}\right)-y_{i}\right)
    θ1=θ1α1ni=1nxi(hg(x2)yi) \theta_{1}=\theta_{1}-\alpha \cdot \frac{1}{n} \sum_{i=1}^{n} x_{i}\left(h_{g}\left(x_{2}\right)-y_{i}\right)

    3.2写出梯度下降的代码

     def batchGradientDescent(x, y, theta, alpha, m, maxIterations):
                xTrains = x.transpose()
                for i in range(0, maxIterations):
                    hypothesis = np.dot(x, theta)
                    loss = hypothesis - y
                    # print loss
                    gradient = np.dot(xTrains, loss) / m
                    theta = theta - alpha * gradient
                return theta
    

    4、学习L0-Norm,L1-Norm,L2-Norm

    L0范数表示向量中非零元素的个数,也就是如果我们使用L0范数,即希望矩阵的大部分元素都是0. (矩阵是稀疏的)所以可以用于ML中做稀疏编码,特征选择。通过最小化L0范数,来寻找最少最优的稀疏特征项。但不幸的是,L0范数的最优化问题是一个NP,hard问题,而且理论上有证明,L1范数是L0范数的最优凸近似,因此通常使用L1范数来代替。
    L1范数表示向量中每个元素绝对值的和,
    x1=i=1nxi \|x\|_{1}=\sum_{i=1}^{n}\left|x_{i}\right|
    L2范数表示欧氏距离:
    x2=i=1nxi2 \|x\|_{2}=\sqrt{\sum_{i=1}^{n} x_{i}^{2}}

    4.1推导正则化公式

    正则化公式:
    minfeF1Ni=1NL(yi,f(xi))+λJ(f) \min _{f e \mathcal{F}} \frac{1}{N} \sum_{i=1}^{N} L\left(y_{i}, f\left(x_{i}\right)\right)+\lambda J(f)

    其中,第1项是经验风险,第2项是正则化项, λ\lambda≥0为调整两者之间关系的系数
    1范数:
    L(w)=1Ni=1N(f(xi;w)yi)2+λw1 L(w)=\frac{1}{N} \sum_{i=1}^{N}\left(f\left(x_{i} ; w\right)-y_{i}\right)^{2}+\lambda\|w\|_{1}
    2范数:
    L(w)=1Ni=1N(f(xi;w)yi)2+λ2w2 L(w)=\frac{1}{N} \sum_{i=1}^{N}\left(f\left(x_{i} ; w\right)-y_{i}\right)^{2}+\frac{\lambda}{2}\|w\|_{2}

    4.2说明为什么用L1-Norm代替L0-Norm

    L0范数的最优化问题是一个NP,hard问题,而且理论上有证明,L1范数是L0范数的最优凸近似,因此通常使用L1范数来代替。

    4.3学习为什么只对w/Θ做限制,不对b做限制

    因为w通常是一个高维参数矢量,w几乎涵盖了所有参数,b只是众多参数的中的一个,这样加上b来做regularization的作用不大,也可以加,只是作用不大

    展开全文
  • 机器学习李宏毅(1)学习任务一机器学习的概念相关数学知识中心极限定理正态分布最大似然估计线性回归与逻辑回归最小二乘法线性回归逻辑回归 机器学习的概念 机器学习就是从已知的有限的数据,发现其潜在的规律。...

    机器学习的概念

    机器学习就是从已知的有限的数据,发现其潜在的规律。通过数据训练得到训练模型,然后对未知数据进行预测

    机器学习,虽然分为很多种,但大致都有三个步骤:
    在这里插入图片描述
    1)确定Model:Model就是a set of function(函数的集合),一个Model有很多个函数,通过函数我们得到想要的output。

    2)评价函数(Goodness of function):因为有许多的函数,我们要通过一个确定的方式去挑选出最好的函数,通常我们用loss function 去评价一个函数的好坏。

    3)挑选并使用函数。

    相关数学知识

    中心极限定理

    在这里插入图片描述

    正态分布

    在这里插入图片描述

    最大似然估计

    在这里插入图片描述

    线性回归与逻辑回归

    最小二乘法

    在这里插入图片描述

    线性回归

    在这里插入图片描述

    逻辑回归

    在这里插入图片描述

    展开全文
  • 机器学习李宏毅作业一(PM2.5预测) 本文较大篇幅引用了博主秋沐霖的一篇博客https://www.cnblogs.com/HL-space/p/10676637.html,源博主思路很清晰,很好地帮助我学习这部分知识。 刚开始学习机器学习和python...

    机器学习李宏毅作业一(PM2.5预测)

    1. 本文较大篇幅引用了博主秋沐霖的一篇博客https://www.cnblogs.com/HL-space/p/10676637.html,源博主思路很清晰,很好地帮助我学习这部分知识。
    2. 刚开始学习机器学习和python编程,许多地方似懂非懂,在源博主的代码基础上进行了更改,难免内容繁杂,格式不规范,也望大神指教。
    3. 本文实现了博主秋沐霖的改进思路,在同样训练2000次后,将训练集上的loss data从43.613降到了39.169,将测试集上的loss data从40.354降到了34.933。

    一、基本原理

    ​ 题目是根据前九小时的PM2.5值来预测第十小时的值,是一种典型的回归问题(回归问题多用来预测一个具体的数值)。

    回归问题是机器学习三大基本模型中很重要的一环,其功能是建模和分析变量之间的关系.

    面对一个回归问题,我们可简要描述其求解流程:

    1. 选定训练模型,即我们为程序选定一个求解框架,如线性回归模型(Linear Regression)等。

    2. 导入训练集 train_set,即给模型提供大量可供学习参考的正确数据。

    3. 选择合适的学习算法,通过训练集中大量输入输出结果让程序不断优化输入数据与输出数据间的关联性,从而提升模型的预测准确度。

    4. 在训练结束后即可让模型预测结果,我们为程序提供一组新的输入数据,模型根据训练集的学习成果来预测这组输入对应的输出值。

      ​ ------摘自知乎YangYH408

    ​ 下面从模型入手开始解决问题:

    1.1、模型建立

    采用最普通的线性回归模型,并没有用上训练集中所有的数据,只用到了每个数据帧样本中的9个PM2.5含量值:

    img

    img为对应数据帧中第i个PM2.5含量,img为其对应的权重值,img为偏置项,img为该数据帧样本的预测结果。

    1.2、损失函数

    损失函数定义了拟合结果和真实结果之间的差异,作为优化的目标直接关系模型训练的好坏。

    常用损失函数小结

    最小二乘法介绍

    ​ 这里采用均方差损失函数(常用在最小二乘法中),式中除以2的目的是便于求导计算:
    img
    img为第n个label,img为第n个数据帧的预测结果,img为参加训练的数据帧样本个数。
      为了防止过拟合,加入正则项
      
    img
    img为正则项,img为正则项系数。
    加入正则项可以限制模型复杂度,防止过拟合出现。这一块感觉似懂非懂,希望后续学习能完善。

    1.3、梯度下降法

    梯度下降法讲解

    梯度计算:需明确此时的目标是使Loss最小,而可优化的参数为权重w和偏置值b,因此需要求Loss在w上的偏微分和Loss在b上的偏微分,求权重梯度时,源博客结果多了个求和符号?
    img
      计算出梯度后,通过梯度下降法实现参数更新。
    img
    img为权重w更新时的学习率,img为偏置b更新时的学习率。

    1.4、学习率更新

    为了在不影响模型效果的前提下提高学习速度,可以对学习率进行实时更新:即让学习率的值在学习初期较大,之后逐渐减小。这里采用比较经典的adagrad算法来更新学习率。
    image
    img为更新后的学习率,img为更新前的学习率。img为在此之前所有梯度平方和的二次根。

    ​ 学习率不能太大也不能太小,学习率过小收敛过程如下:

    img

    ​ 学习率过大时收敛过程如下:

    ​ 可见,学习率过小,收敛过程十分缓慢;学习率过大会出现来回震荡,甚至不收敛。最好的情况便是刚开始学习率较大,随着训练的进行逐渐减小,这样结果会在最优值出小幅摆动。刚开始训练时学习率一般取0.01 ~ 0.001 ,可尝试更改。具体怎样找出最佳的学习率?希望后续学习能让我搞明白。。。

    二、代码实现

    2.1、导入库

    import pandas as pd
    import numpy as np
    from matplotlib import pylab as pyl 
    

    库介绍:

    pandas库简介

    numpy库简介

    2.2、读入数据集

    数据集下载:https://pan.baidu.com/s/1o2Yx42dZBJZFZqCa5y3WzQ,提取码:qgtm。

    data = pd.read_csv('E:\\机器学习李宏毅\\作业\\PM2.5预测\\train.csv')
    data = data.iloc[:, 3:]                       #将所有行和从第三列开始的所有列保留即留下有效数据
    data = data.replace(['NR'], [0.0])            #将NR用0替换
    

    括号里替换为文件路径,不知为啥用’\'不行得用‘\\’;

    pd.read_csv()用法:https://blog.csdn.net/weixin_42462804/article/details/100132767

    pandas-dataframe 介绍及基础操作:https://www.jianshu.ctom/p/8024ceef4fe2

    源数据集如下:

    img

    可见需要把前三列除掉,将书据中的NR用0代替。

    2.3、处理数据集

    def DateProcess(df):
        x_list, y_list = [], []                   #初始化两个列表
        array = np.array(df).astype(float)        #将dataframe类型转换成数组
        x=array[0:18,:]                           #将第一天的数据提取到x
        for i in range(18,4320,18):               
            mat=array[i:i+18,:]                   #将每一天的数据提取出来
            x = np.hstack((x,mat))                #进行行组合       
        for i in range(0,5760-9):                 #提取出PM2.5的值
            label=x[9,i+9]
            y_list.append(label)
        for i in range(0,5760-9):
            mat=x[:,i:i+9]
            x_list.append(mat)
        y = np.array(y_list)                   #转换成数组类型
        x = np.array(x_list)                   #转换成数组类型
        return x, y
    

    引用的博主采用划分数据集的方法见博文,但这样做的话,一天中前九个小时的PM2.5值并没有利用上,如该博主所说,时间是连续的,没有必要按天分割开。按照这一思路,将每一天的数据都连接起来如下图:

    img

    如此划分后将原来的3600组训练数据扩增到了5751组,能使模型精度得到优化。

    2.4、模型训练

    # 更新参数,训练模型
    def train(x_train, y_train, epoch):
        bias = 0                                 # 偏置值初始化
        weights = np.ones(9)                     # 初始化权重为九个一
        learning_rate = 1                        # 初始学习率
        reg_rate = 0.001                         # 正则项系数
        bg2_sum = 0                              # 用于存放偏置值的梯度平方和
        wg2_sum = np.zeros(9)                    # 用于存放权重的梯度平方和
    
        for i in range(epoch):                  #训练epoch次
            b_g = 0          
            w_g = np.zeros(9)                    #计算梯度
            for j in range(5000):
                b_g += (y_train[j] - weights.dot(x_train[j, 9, :]) - bias) * (-1)
                for k in range(9):
                    w_g[k] += (y_train[j] - weights.dot(x_train[j, 9, :]) - bias) * (-x_train[j, 9, k])    
            b_g /= 5000
            w_g /= 5000
            #  加上Loss_regularization在w上的梯度
            for m in range(9):
                w_g[m] += reg_rate * weights[m]
            
            # adagrad
            bg2_sum += b_g**2
            wg2_sum += w_g**2
            # 更新权重和偏置
            bias -= learning_rate/bg2_sum**0.5 * b_g
            weights -= learning_rate/wg2_sum**0.5 * w_g
            
            if i%4==0:
                loss = 0
                for j in range(5000):
                    loss += (y_train[j] - weights.dot(x_train[j, 9, :]) - bias)**2
                print('after {} epochs, the loss on train data is:'.format(i), loss/5000)
    
        return weights, bias
    

    y_train为PM2.5值,x_train为处理完的数据集分出开的验证集,epoch为训练轮数。

    2.5、模型测试

    def validate(x_val, y_val, weights, bias):
        loss = 0
        a=np.zeros(751)
        for i in range(751):
            loss += (y_val[i] - weights.dot(x_val[i, 9, :]) - bias)**2
            a[i]=weights.dot(x_val[i, 9, :])
        return loss / 751,a
    

    np.zeros()创建为零的数组。

    x_var和y_var为验证集的数据集和PM2.5值;weights和bias为训练好的权重和偏置。

    2.6、完整源程序

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    def DateProcess(df):
        x_list, y_list = [], []                   #初始化两个列表
        array = np.array(df).astype(float)        #将dataframe类型转换成数组
        x=array[0:18,:]                           #将第一天的数据提取到x
        for i in range(18,4320,18):              
            mat=array[i:i+18,:]
            x = np.hstack((x,mat))
        for i in range(0,5760-9):
            label=x[9,i+9]
            y_list.append(label)
        for i in range(0,5760-9):
            mat=x[:,i:i+9]
            x_list.append(mat)
        y = np.array(y_list)                   #转换成数组类型
        x = np.array(x_list)                   #转换成数组类型
        return x, y
    
    # 更新参数,训练模型
    def train(x_train, y_train, epoch):
        bias = 0                                 # 偏置值初始化
        weights = np.ones(9)                     # 初始化权重为九个一
        learning_rate = 1                        # 初始学习率
        reg_rate = 0.001                         # 正则项系数
        bg2_sum = 0                              # 用于存放偏置值的梯度平方和
        wg2_sum = np.zeros(9)                    # 用于存放权重的梯度平方和
    
        for i in range(epoch):                  #训练epoch次
            b_g = 0          
            w_g = np.zeros(9)                    #计算梯度
            for j in range(5000):
                b_g += (y_train[j] - weights.dot(x_train[j, 9, :]) - bias) * (-1)
                for k in range(9):
                    w_g[k] += (y_train[j] - weights.dot(x_train[j, 9, :]) - bias) * (-x_train[j, 9, k])    
            b_g /= 5000
            w_g /= 5000
            #  加上Loss_regularization在w上的梯度
            for m in range(9):
                w_g[m] += reg_rate * weights[m]
            
            # adagrad
            bg2_sum += b_g**2
            wg2_sum += w_g**2
            # 更新权重和偏置
            bias -= learning_rate/bg2_sum**0.5 * b_g
            weights -= learning_rate/wg2_sum**0.5 * w_g
            
            if i%4==0:
                loss = 0
                for j in range(5000):
                    loss += (y_train[j] - weights.dot(x_train[j, 9, :]) - bias)**2
                print('after {} epochs, the loss on train data is:'.format(i), loss/5000)
    
        return weights, bias
    
    def validate(x_val, y_val, weights, bias):
        loss = 0
        a=np.zeros(751)
        for i in range(751):
            loss += (y_val[i] - weights.dot(x_val[i, 9, :]) - bias)**2
            a[i]=weights.dot(x_val[i, 9, :])
        return loss / 751,a
    
    def main():
         # 从csv中读入数据
        data = pd.read_csv('E:\\机器学习李宏毅\\作业\\PM2.5预测\\train.csv')
        data = data.iloc[:, 3:]                       #将所有行和从第三列开始的所有列保留即留下有效数据
        data = data.replace(['NR'], [0.0])            #将NR用0替换
        x, y = DateProcess(data)
        x_train, y_train = x[0:5000], y[0:5000]
        x_val, y_val = x[5000:5751], y[5000:5751]
        epoch = 2000 # 训练轮数
        # 开始训练
        w, b = train(x_train, y_train, epoch)
        # 在验证集上看效果
        loss,c = validate(x_val, y_val, w, b)
        print('The loss on val data is:', loss)
        x=range(0,751)
        x=list(x)
        plt.plot(x,y_val,'ob')
        plt.plot(x,c,'or')
        plt.show()  
        if __name__ == '__main__':
            main()
    

    在源程序中我将训练集和测试集按5000和751划分,怎样划分最好也还有待学习。

    三、输出结果

    每训练四轮输出一次训练集上的loss data。(辣鸡电脑,隔太久我会怀疑它卡了)

    img

    最终结果:

    img

    img

    图中,蓝色为真实值,红色为预测值;可以看出增加数据集后模型精度确实上升了。

    展开全文
  • 机器学习分类 Scenario 训练场景 由拿到的数据决定 task 任务类型 由想得到的输出决定 method 所选择的function set 只是specialize了Classifacaiton 的具体分类,但是每个senerio 都包含这些task, 每个task 都包含...
  • 机器学习李宏毅(1)

    2019-11-09 21:31:13
    一 、什么是机器学习 让机器学会自己 学习 二、机器学习≈\approx≈寻找一个函数 使用这个函数,我们得到期望的输出,例如: 输入一段语音信号,我们希望得到对应的文字信息; 输入一张图片,我们希望得到...

    一 、什么是机器学习

    让机器学会自己 学习

    二、机器学习\approx寻找一个函数

    使用这个函数,我们得到期望的输出,例如:
    在这里插入图片描述
    输入一段语音信号,我们希望得到对应的文字信息;
    输入一张图片,我们希望得到图片中的动物是什么;
    输入围棋,我们希望得到下一步该怎么走能赢…

    三、机器学习三步骤

    定义一个函数集合
    判断函数性能好坏
    选择最优的函数

    四、学习路线

    1. 监督学习(Supervised Learning)

    1) 回归(Regression)

    • 预测PM2.5

    2) 分类(Classification)

    • 二分类
      • 垃圾邮件分类
    • 多分类
      • 文档归类(政治,经济,体育等)
    • 深度学习中的分类
      • 图片识别
      • 围棋

    2. 半监督学习(Semi-supervised Learning)

    一些有标签数据,一些为无标签数据

    3. 迁移学习(Transfer Learning)

    根据某一任务训练出的模型运用到另一类相似的任务上,如:
    在这里插入图片描述

    4. 无监督学习(Unsupervised Learning)

    训练集均为无标签数据,让机器自己学习。

    5. 结构化预测(Structured Learning)

    在这里插入图片描述

    6. 强化学习(Reinforcement Learning)

    利用奖罚规则进行学习

    监督学习v.s. 强化学习

    在这里插入图片描述
    有点类似于监督学习是背棋谱,但强化学习是根据奖罚规则自己悟出一套棋谱出来。

    展开全文
  • Ensemble之bagging 对于较复杂的模型,其模型可能会造成较大的variance,因此可以通过多个模型进行平均或者投票,得到variance较小的总体模型,如下图所示。 一个容易overfit的模型是决策树,decision tree。...
  • 模型介绍 进化前pokemon的各种特征,一只pokemon为x" role="presentation">xxx,包括了战斗力xcp" role="presentation">xcpxcpx_{cp}、输入的pokemon的状态xs" role="presentation">xsxsx_s、hp值xhp" role=...
  • 主要用于文字的无监督学习机器能够在无监督情况下,通过阅读大量数据后能够理解词语的含义。最简单的编码方式是1-of-N encoding,但是较为复杂。由于classification能够实现化繁为简,因此可以对于词汇进行...
  • 非线性降维方法,根据一个点与其临近点关系进行降维操作,neighbor embedding,又称之为manifold learning,流形学习。 LLE(locally linear embedding) 对于输入xi" role="presentation">xixix_i,与其临近点...
  • Transfer Learning简介 Transfer Learning的用途包括语音辨识、图像识别和文本分析。...Transfer learning的目标是通过学习source data的数据集,得到较好的处理target data的能力。这里需要注意,source dat
  • 包含三个部分,首先是input gate,如果网络的一部分想要写入memory,则需要通过input gate,该gate由signal control(scalar)进行控制,这个控制信号同样由网络的一部分进行控制,这些都是通过训练数据学习得到。...
  • logistic regression概述 1. 函数集合(模型) 对于二元分类,我们定义了logistic regression,其中当输出值大于0.5,则归为第一类,否则归为第二类。其中对于每一类的概率模型如以下公式所示,这是简单的神经元...
  • 如下图所示,传统的语音识别需要大量的人工干预,只有在最后一步存在机器学习。而现在,可以从对数之后社会之从频谱之后就直接进行DNN机器学习。 对于图像识别,以前的操作流程如下图,也包括了很多部分,...
  • 对于传统的机器学习,输出一般为数字型的数据类型,例如label或者是vector。而与实际情况更为接近的是,输出可以要求为一张image或者是一段文字等等。此时对应的学习称为structured learning。 应用场景包括语音...
  • clustering 聚类 k-means方法: HAC方法(Hierarchical Agglomerative Clustering): Distributed Representation ...常用的方法为PCA,principle component analysis。...可以使用拉格朗日
  • 它们的大小是需要设计的,它们的数值是通过学习得到的。先假设已经知道这些矩阵的数值,然后对于大的图像,利用小的矩阵进行乘积操作;每进行一次操作后,进行一次stride,stride=N,则整个小矩阵向右移动N格。这样...
  • 实际上,为了缓解对于learning rate的严格要求,可以采用牛顿法等方法,考虑二次导的影响,但是这会要求求解过程需要获取矩阵的二次导和矩阵的逆矩阵,会给机器学习带来较大的求解压力,因此这类方法并不通用。...
  • 本小节具体学习如何进行structure learning的问题解决。 样例讲解——POS tagging 主要任务是标记句子中每一个词的词性,属于NLP的基本任务,可以用于文法分析或者是单词的感知。 Useful for subsequent ...
  • 估计子的bias和variance 上一讲阐述了较为重要的是测试集的误差,该误差来源包括了bias和variance,并且更加复杂的模型并不一定会带来更低的误差。 对于实际的情况,存在一个最佳的预测函数,记为f^...
  • Loss function的比较 这里,δ(g(xn)≠y^n)" role="presentation">δ(g(xn)≠y^n)δ(g(xn)≠y^n)\delta(g(x_n) \neq \hat{y}_n)不可微分,因此采用l(f(xn),y^n)" role="presentation">l...
  • 进一步地,可以让网络自动学习激活函数的形式,也就是maxout network,原理如下图所示。leru实际上是maxout的一种特殊形式。maxout实际上是分段线性的激活函数,段数取决于一个group的element数量,这是由网络自己...
  • 半监督学习的特点 监督学习存在一系列的 特征x和对应的输出y,而半监督学习存在R组输入和对应的输出,还有U组未标记的数据,一般U>>R。使用testing data的输入,则称为transductive learning;而对于使用testing ...
  • 机器学习 李宏毅 L27-Deep Auto-encoder

    千次阅读 2018-02-01 13:57:06
    由于这里是无监督学习,因此encoder的训练过程需要采用decoder同时进行训练,如下图所示。这与PCA的过程类似,首先通过输入的图片,乘以矩阵W,得到降维后的数据,然后对于降维数据乘以前述矩阵的转置,可以得到预测...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,701
精华内容 1,080
关键字:

机器学习李宏毅