线性回归是机器学习领域里研究最多的算法,至今已有200年研究历史了。
线性回归
线性回归可用一条线表示输入值X和输出值Y之间的关系,这条线的斜率的值,也叫系数。最简单的线性回归可表示为y=ax+b。机器学习的目的就是给定数据样本(x,y),利用学习得到a,b。得到a和b后,就可以给定已知的x求出未知的y,这就是机器学习的目的和意思。
进而我们可以推广到多个变量的情况,求得对于每一个特征就有一个相对的系数。
通过一系列的数学推导可以得到。
线性回归的目标函数为
L1回归
L1回归是在线性回归的基础之上,对线性回归的目标函数增加一个绝对和的惩罚因子而得到的新的回归模型。之所以推导出L1回归,是为了解决模型学习过程中发生的过拟合现象。
L2回归
L2回归是在线性回归的基础之上,对线性回归的目标函数增加一个平方和的惩罚因子而得到的新的回归模型。L2回归也可以有效的防止过拟合现象,并且在大多数情况下L2回归的效果可能比L1回归要好。
求系数的方案
线性回归的系统求解方案我们可以依从目标函数的推导过程中求出的theta值的方案,即给定X的矩阵,求解X的转置矩阵,然后求X的转置和X的积的逆,从而求得系统theta。当然,我们会发现,当数据量很大的时候,即X很大,求解其逆矩阵的很麻烦的一件事,因此我们需要使用其他的方案来求解。
目前,机器学习常用的方案是梯度下降算法。梯度下降算法是方案是:
- 给定theta的初始值(随机初始化的值,甚至可以给0)
- 给定学习率值,即梯度下降的步长
- 沿着负梯度方向进行迭代,得到新的theta值,更新后的theta使得目标函数更小
如此反复,最后总能求得最小值。根据迭代的频率来说,求完所有的值才进行迭代更新的叫做批量梯度下降算法;每次求出一个theta值就进行一次迭代的叫做随机梯度下降算法。
使用sklearn进行线性回归
以下为使用sklearn进行线性回归的代码,使用的数据是网上down的Advertising.csv,是一个关于广告投入和销售预测的数据。
使用matplotlib打印出数据看下具体分布情况
1.数据绘制在一张图中
# -*- coding: utf-8 -*-
# @File : intro.py
__author__ = 'kestiny'
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection <