机器学习之线性回归

1.线性回归分析( Linear Regression Analysis)

线性回归分析(Regression Analysis):其数据集是给定一个函数和他的一些坐标点,然后通过回归分析的算法,来估计原函数的模型,求得最符合这些数据集的函数解析式。然后我们就可以用来预估未知数据,输入一个自变量便会根据这个模型解析式输出因变量,这些自变量就是特征向量,因变量即为标签,而且标签的值是建立在连续范围内的。
通俗来讲就是我们在做数学题的时候,解未知数的方法。假如给定自变量和函数,通过函数处理自变量,然后获得函数的解。而回归分析便是相当于给定自变量和函数的解,然后去求函数。如下图所示,我们已经知道红色点坐标,然后回归得到直线,回归分析属于监督学习
图片01
上图只是简单的一元线性分析,回归后我们可以得到如 f ( x ) = a x + b 的函数表达式,但更多情况下我们是求解多元线性回归问题,那应该如何解决呢。

2.模型表达

建立数学模型之前,我们先定义如下变量。
- x i 表示输入数据(Feature)
- y i 表示输出数据(Target)
- ( x i , y i ) 表示一组训练数据(Training example)
- m表示训练数据的个数
- n表示特征数量
监督学习目标便是根据给定的训练数据,可以得到函数方法,使得假设函数 h (hypothesis)满足 h ( x ) > y 。针对线性回归而言,函数 h ( x ) 表达式为

h ( x ) = θ 0 + θ 1 x i + θ 2 x 2 + . . . + θ n x n

为方便我们使用矩阵来表达, h ( x ) = θ T x ,其中 θ T θ 的转置。为求解函数 h ( x ) ,我们希望找出一组 θ ,使得 h ( x ) y 无限趋近0,此处我们引入梯度下降算法求解问题。

3.梯度下降算法

3.1梯度下降算法简述

实际生活中我们有时也利用梯度下降算法,比如我们处在一座山的某处位置,但我们并不知道如何下山,于是决定走一步算一步,但每次都沿着最陡峭的地点下山,也就是沿着梯度的负方向前进。但有事也会遇见问题,不能每次都能到达山脚,可能到达山峰的某个局部最低点。

图片02
从上面解释可以看出,梯度下降不一定能够找到全局最优解,有可能是局部最优解,但此种方法已能帮助我们求解线性回归问题。另外如果求解的函数是凸函数,梯度下降法得到得解一定是全局最优解。

3.2 梯度下降算法相关概念

求解梯度下降算法之前,我们先了解相关概念。
- 步长(Learning Rate):步长决定梯度下降算法过程中,每步沿梯度负方向前进的长度。
- 特征(Feature):即上述描述的 x i , y i
- 假设函数(Hypothesis Function):监督学习中,为了拟合输入样本,而使用假设函数 h ( x )
- 损失函数(Loss Function):为了评估模型拟合的好坏,通常用损失函数来度量拟合的程度。损失函数极小,意味着拟合的程度越好,对应的模型参数即为最优参数。线性回归损失函数为

J ( θ ) = 1 2 m i = 1 n ( h ( x ) ( i ) y ( i ) )

我们利用梯度下降算法,目标便是找到一组 θ 使得 J ( θ ) 达到最小。

3.3梯度下降算法过程

  • 随机选取一组 θ
  • 不断变化 θ ,让 J ( θ ) 变小。
    θ j := θ j α θ j J ( θ )

    j = 0 , 1 , 2... n θ j 是n+1个值同时变化。 α 表示学习速率,目标求最小值,因此沿负梯度方向下降,故 θ 前为负号。 α θ j 是对 J ( θ ) 的偏导。
  • 直到 J ( θ ) 得到最小值。
    α θ j 是对 J ( θ ) 的偏导求解过程如下:
    θ j J ( θ ) = θ j 1 2 m ( h θ ( x ) y ) 2

    = 2 1 2 ( h θ ( x ) y ) θ j ( h θ ( x ) y )

    = ( h θ ( x ) y ) θ j ( h θ ( x ) y )

    = ( h θ ( x ) y ) x j

    因此梯度下降算法的最终表述为
    Repeat Until Convergence{
    θ j := θ j α i = 1 n ( ( h θ ( x ( i ) ) y ( i ) ) x j )

    for every j
    }
    梯度下降算法需多次迭代、算法复杂度为 O ( k n 2 ) 。当利用梯度下降算法求得一组 θ 时我们便能得到线性回归函数。

4.线性回归算法实现

为研究公司盈利提升幅度受电视、广播、报纸的投入的影响程度,利用多元线性回归来分析数据。其中数据下载地址为http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv ,为能够绘制出三维图片,此处只选择电视、广播的广告投入对公司盈利提升幅度的影响。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import linear_model
from mpl_toolkits.mplot3d import axes3d
import seaborn as sns

#read_csv
readdata=pd.read_csv('data/Advertising.csv')
data=np.array(readdata.values)

#训练数据
X_train=data[0:150,1:3]
Y_train=data[0:150,3]

#测试数据
X_test=data[150:200,1:3]
Y_test=data[150:200,3]

#回归分析
regr = linear_model.LinearRegression()
#进行training set和test set的fit,即是训练的过程
regr.fit(X_train, Y_train)

# 打印出相关系数和截距等信息
print('Coefficients: \n', regr.coef_)
print('Intercept: ', regr.intercept_)
# The mean square error
print("Residual sum of squares: %.2f"
      % np.mean((regr.predict(X_test) - Y_test) ** 2))
# Explained variance score: 1 is perfect prediction
print('Variance score: %.2f' % regr.score(X_test, Y_test))

#得出回归函数 并自定义数据
X_line=np.linspace(0,300)
Y_line=np.linspace(0,50)
Z_line=0.04699836*X_line+0.17913965*Y_line+3.00431061176

#画图
fig=plt.figure()
ax = plt.subplot(111, projection='3d')  # 创建一个三维的绘图工程
ax.scatter(data[:,1],data[:,2],data[:,3],c='red',)  # 绘制数据点
ax.plot(X_line,Y_line,Z_line,c='blue')#绘制回归曲线
plt.show()

图片
其中红色为数据点,蓝色线便为我们回归之后的曲线,这里我们是利用sklearn进行线性回归分析,后续会写出sklearn教程。如有错误之处还请指正,谢谢。


5.推广

更多内容请关注公众号’谓之小一’,若有疑问可在公众号后台提问,随时回答,欢迎关注,内容转载请注明出处。
推广

猜你喜欢

转载自blog.csdn.net/xiaoyi_eric/article/details/79701684