前提
进行程序训练之前,需已经成功安装好深度学习环境
若没有安装环境,可以参考:深度学习环境安装教程,进行环境安装。
一、 简介
机器学习是人工智能的核心,是使计算机具有智能的根本途径。线性回归模型是机器学习中最简单、最基础的一类有监督学习模型,却是很多复杂模型的基础。
可以用线性回归模型来预测销售额。
1.1 回归分析
回归分析是一个来自统计学的概念。回归分析是指一种预测性的建模技术,主要是研究自变量和因变量的关系。通常使用线或曲线来拟合数据点,然后研究如何使曲线到数据点的距离差异最小。
线性回归模型是机器学习中最简单、最基础的一类有监督学习模型,虽然简单,却是很多复杂模型的基础,非常重要。
线性回归要处理的一类问题是:给定一组输入样本,和每个样本对应的目标值,需要在某一损失准则下,找到(学习到)目标值和输入值的函数关系,这样,当有一个新的样本到达时,可以预测其对应的目标值是多少。
线性回归和线性分类很相似,但不同的是,线性回归的目标值是连续变量,线性分类的目标值是离散变量。
二、 机器学习——线性回归
2.1 简介
在统计学中,回归分析(regression analysis)指的是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
回归分析按照涉及的变量的多少,分为一元回归和多元回归分析;
按照因变量的多少,可分为简单回归分析和多重回归分析;
按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。
在大数据分析中,回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。
线性回归是回归分析的一种。假设目标值(因变量)与特征值(自变量)之间线性相关(即满足一个多元一次方程,如:
f(x)=w1 x1+⋯+wn xn+b (2-1)
然后构建损失函数。
最后通过令损失函数最小来确定参数。(这是关键的一步)。
2.2 一元线性回归
2.2.1 概念
一元线性回归(Unary linear regression):当线性回归的自变量只有一个的时候则该线性回归就为一元线性回归。而一元线性回归是线性回归的一个特例,许多线性回归都可以用一元线性回归方程简化。而往往一个现实事物会受多个因素的影响,但当一个因素起到主导(决定性)作用的时候,那么就可以使用一元线性回归,例如决定雪糕的销售量的主要因素是温度,决定商品的价格的主导因素是供给。
2.2.2 模型的设置
1、意义检验:就是根据模型中各个参数的含义,分析各参数的值是否与分析对象的含义相符;
2、回归标准差检验;
3、拟合优度检验;
4、回归系数的显著性检验
2.2.3 举例说明
散点图
计算代码
2.3 多元线性回归
2.3.1 概念
多元线性回归(Multiple Linear Regression):简单来说就是与一元线性回归不一样了,自变量不再是一个了,而是两个及两个以上的变量。多元线性回归分析是为了分析多个变量导致的现实事物的变化。 因为现实中的许多问题往往会受到多个因素而并非单个因素的影响,所以在分析这类问题的时候,一元线性回归就显得有些不足了,那么这个时候,我们就需要采用多元线性回归分析。
2.3.2 模型
y=b0+b1 x1+b2 x2+⋯+bk xk+e
b0为常数项,b1,b2…bk为回归系数,b1为x2…xk固定时,x1每增加一个单位对y的效应,即 x1对y的偏回归系数,同理,b2为x1,x3…xk固定时, x2每增加一个单位对y的效应,即x2对y的偏回归系数……
三、 通过线性回归预测销售额
3.1 数据来源
选择统计过的advertising数据集
3.2 数据处理
通过散点图把数据给可视化
散点图代码
根据在最小二乘法中,均方误差函数的数学表达式,刻画的是每个点的y和拟合出来的直线y撇的差距:
均方误差函数(MSE)代码如下:
计算初始情况下的cost,进行100次学习之后,最终确定线性方程:
算法代码如下:
线性回归结果图
检验损失代码
运行结果如下图所示:
3.3 源码
源码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def loss_function(X,y,w,b):
loss=w*X+b-y
cost=np.sum(loss**2)/(2*len(X))
return cost
def gradient(X,y,w,b):
for i in range(iter):
print(i)
print("现在损失是:",loss_function(X,y,w,b))
loss_history.append(loss_function(X,y,w,b))
loss=w*X+b-y
derivative_w=X.T.dot(loss)/len(X)
derivative_b=sum(loss)*1/len(X)
print("权重导数:",derivative_w)
print("偏置导数:",derivative_b)
w=w-lr*derivative_w
print("现在w:",w)
b=b-lr*derivative_b
print("现在b:",b)
return w,b
adv=pd.read_csv("D:\\浏览器下载\\advertising.csv")
X=np.array(adv.TV)
y=np.array(adv.sales)
X_train=X.reshape(-1,1)
y_train=y.reshape(-1,1)
X_test=100
w=0.1
b=1
iter=100
lr=0.000002
loss_history=[]
plt.scatter(X_train,y_train)
w1,b1=gradient(X,y,w,b)
plt.plot(X,w1*X+b1)
print("最后w,b 是:",w1,b1)
print(w1*X_test+b1)
plt.show()
plt.plot(loss_history,'g--',label='Loss Curve')
plt.xlabel('Iterations')
plt.ylabel('Loss')
plt.legend()
plt.show()