zoukankan      html  css  js  c++  java
  • 机器学习_线性回归

    线性回归

    人工智能是机器学习的父类;机器学习是深度学习的父类

    1. 怎么做线性回归?

    2. 理解回归 -- 最大似然函数

    3. 应用正态分布概率密度函数 -- 对数总似然

    4. 推导出损失函数 -- 推导出解析解        

    5. 代码实现解析解的方式求解 -- 梯度下降法的开始 -- sklearn模块使用线性回归

    线性: y = a * x         一次方的变化

    回归:回归到平均值

    简单线性回归

    算法 = 公式

    一元一次方程组

    一元:一个x   影响y的因素,维度

    一次:x的变化    没有非线性的变化

    y = a * x + b

    x1,y1        x2,y2        x3,y3        x4,y4 ...

    误差最小的 -- 最优解

    做机器学习,没有完美解,只有最优解

    做机器学习就是要以最快的速度,找到误差最小的最优解

    一个样本的误差:

    yi^ - yi

    找到误差最小的时刻;为了去找到误差最小的时刻,需要反复尝试,a,b

    根据 最小二乘法 去求得误差

    反过来误差最小时刻的a,b就是最终最优解模型!!!

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

    多元线性回归

    y = a*x+b

    y = w0+w1*x1+w2*x2

    向量转置相乘x0=1

    不止两个特征

    截距(w0),什么都不做,本身就存在那里(物体本身就漂亮,不加修饰也漂亮)

    x1...xn:n个特征

    本质上就是算法(公式)变换为了多元一次方程组

    y = w1 * x1 + w2 * x2 + w3 * x3 + ... +wn * xn + w0 * x0        (x0恒为1时可不写)

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

    最大似然估计:

    是一种统计方法,用来求一个样本集的相关概率密度函数的参数

    ‘似然’(likelihood):即‘可能性’,通俗易懂叫法:‘最大可能性估计’

    likelihood 与 probability 同义词

    中心极限定理:

    • 是概率论中讨论 随机变量 序列部分和分步渐进于正态分布的一类定理

    误差(ε):

    • 第i个样本实际的值 等于 预测的值 加 误差
    • 假定所有的样本都是独立的,有上下的震荡,震荡认为是随机变量,足够多 的随机变量叠加之后形成的分布,根据中心极限定理,它服从的就是正态分布,因为它是正常状态下的分布

    最小二乘法:

    概率密度函数:

    最简单的概率密度函数:均匀分布的密度函数,

     

    一维正态分布

    若随机变量X服从一个位置参数为μ、尺度参数为σ的概率分布,且其概率密度函数为

     

    则这个随机变量就称为正态随机变量,正态随机变量服从的分布就称为正态分布

    标准正态分布

    当μ=0,σ=1时,正态分布就成为标准正态分布:

     

    求总似然:

     

    因为连乘太麻烦,故想到用log函数使得连乘变成相加,log函数为单调递增函数,故可以.

     

    通过最大似然估计的思想,利用了正态分布的概率密度函数,推导出了损失函数

    误差函数的另一种表达:

     

    找损失最小的过程就是求极值的过程(导数为0)

     

    解析解:

     

    总结:

    (1) 为什么求总似然的时候,要用正态分布?

    中心极限定理,如果假设样本之间是独立事件,误差变量随即产生,那么就服从正太分布.

    (2) 总似然不是概率相乘吗?为什么用了概率密度函数的f(xi)进行了相乘?

    因为概率不好求,所以当我们可以找到概率密度相乘最大的时候,就相当于找到了概率相乘最大的时候.

    (3) 概率为什么不好求?

    因为求的是面积,需要积分,麻烦。不用去管数学上如何根据概率密度函数去求概率.

    (4) 总似然最大和最优解有什么关系?

    当我们找到可以使得总似然最大的条件,也就是可以找到我们的DataSet数据集最吻合某个正态分布,即找到了最优解

    通过最大似然估计的思想,利用了正态分布的概率密度函数,推导出了损失函数

    (5) 什么是损失函数?

    一个函数最小,就对应了模型是最优解,预测历史数据可以最准.

    (6) 线性回归的损失函数是什么?

    最小二乘法;MSE(mean squared error)[平方均值损失函数,均方误差]

    (6) 线性回归的损失函数有哪些假设?

    样本独立;随机变量;服从正态分布

    (7) ML学习特点:

    不强调模型100%正确;

    强调模型是有价值的,堪用的.

    通过对损失函数求导,来找到最小值,求出θ的最优解;

    代码实现解析解的方式求解

    import numpy as np
    import matplotlib.pyplot as plt
     
    #这里相当于是随机X维度X1,rand是随机均匀分布
    #rand():返回0-1之间的数
    X=2*np.random.rand(100,1)#100行1列
     
    #人为的设置真实的Y一列,np.random.randn(100,1)是设置error(方差),randn是标准正态分布
    #np.random.randn(100,1)返回标准正态分布上的一个随机值,取0的概率比较大一些
    #(4+3*X)是预测值、np.random.randn(100,1)是误差ε
    #预测值==W的转置*X
    #4==W0;3==W1
    y=4+3*X+np.random.randn(100,1)#100行1列
     
    #整合X0和X1
    #np.ones(100,1)输出100行1列个1
    X_b=np.c_[np.ones((100,1)),X]
    print(X_b)
     
    #常规等式求解θ(theta)
    #inv:求逆、dot:点乘、.T:转置
    theta_best=np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
     
    print(theta_best)
     
    #创建测试集里面的X1
    X_new=np.array([[0],[2]])
    X_new_b=np.c_[(np.ones((2,1))),X_new]
    print(X_new_b)
    y_predict=X_new_b.dot(theta_best)
    print(y_predict)
    '''
    [[3.98173243]
    [10.17046616]]
    '''
     
    
     
     
    plt.plot(X_new,y_predict,'r-')
    plt.plot(X,y,'b.')
    plt.axis([0,2,0,15])#标注x轴的范围是0-2,y的范围是0-15
    plt.show()
     
    
     
     
    实际上当数据特别多的时候,用上述方法求解特别慢
     
  • 相关阅读:
    Dot Net WinForm 控件开发 (七) 为属性提下拉式属性编辑器
    WinForm 程序的界面多语言切换
    c#遍历HashTable
    Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器
    Dot Net WinForm 控件开发 (六) 为属性提供弹出式编辑对话框
    Dot Net WinForm 控件开发 (一) 写一个最简单的控件
    Dot Net WinForm 控件开发 (四) 设置属性的默认值
    Dot Net WinForm 控件开发 (二) 给控件来点描述信息
    Dot Net WinForm 控件开发 (八) 调试控件的设计时行为
    Dot Net WinForm 控件开发 (五) 复杂属性的子属性
  • 原文地址:https://www.cnblogs.com/lpgit/p/9478265.html
Copyright © 2011-2022 走看看