机器学习之线性回归

文章目录

一、线性回归

1、普通线性回归(Linear Regression)

  • 线性回归是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。
  • 这种函数是一个或多个称为回归系数的模型参数的线性组合(自变量都是一次方);
  • 只有一个自变量的情况称为一元回归,大于一个自变量情况的叫做多元回归;
  • 线性回归常被选用在线性预测模型中,在这个模型中,因变量是连续的,自变量可以是连续或离散的,回归线的性质是线性的。
  • 损失函数:怎么确定最终的自变量系数呢,我们就需要了解损失函数了。从字面意思了解,肯定是损失越小越好了。在线性回归中,预测值与实际值的差距肯定是越小越好。又有问题了,那么多的点,怎么看差距呢?将每个点的实际值和预测值的差进行平方(去除负数影响,取绝对值也可)和计算。我们的要求就是最小化J ( θ ) J(\theta)J (θ)。 (1 2 m \frac{1}{2m}2 m 1 ​仅为了求导数计算方便)
  • 如果我们一味追求提高对训练数据的预测能力,所选模型的复杂度往往会比真模型更高。这种现象称为过拟合。过拟合是指学习时选择的模型所包含的参数过多,以致出现这一模型对已有数据预测的很好,但对未知数据预测的很差的现象。下面介绍一种常见的模型选择方法:正则化。
    由于线性回归可能出现过拟合的情况,因此有了岭回归和Lasso回归。这俩个回归是为了解决线性回归出现的过拟合以及在通过正规方程方法求解回归系数的过程中出现的x转置乘以x不可逆这两类问题的,这两种回归均通过在损失函数中引入正则化项来达到目的。

; 2、岭回归(Ridge Regression)

  • 岭回归是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价,获得回归系数更为符合实际、更可靠的回归方法,对病态数据的耐受性远远强于最小二乘法。
    机器学习之线性回归
  • 解决方法:
    ✓ (1):丢弃一些对我们最终预测结果影响不大的特征,具体哪些特征需要丢弃可以通过PCA(主成分分析)算法来实现;
    ✓ (2):使用L2正则化技术,保留所有特征,但是减少特征前面的参数θ的大小,具体就是修改线性回归中的损失函数形式即可;

3、套索回归(lasso回归)

  • Lasso回归于岭回归非常相似,它们的差别在于使用了不同的正则化项,最终都实现了约束参数从而防止过拟合的效果。
  • 具体地,岭回归引入的是L2范数惩罚项,Lasso回归引入的是L1范数惩罚项。
    机器学习之线性回归
  • Lasso回归能够使得损失函数中的许多θ均变成0,这点要优于岭回归,因为岭回归是要所有的θ均存在的,这样计算量Lasso回归将远远小于岭回归。
    岭回归L2正则化:尽可能使自变量回归系数接近于0但不能为0;Lasso回归L1正则化:可以将系数变为0,减少特征变量。

; 二、python实战

0、导包 数据说明

数据集 :tushare接口获取股票数据
使用不同的回归分析模型,基于股票当天的开盘价(open)、最高价(high)、最低价(low)和成交量(volume)
来预测该股票次日的收盘价使用不同评价指标,对比分析不同模型在股票预测时性能。(R2)
import pandas as pd
import numpy as np
import tushare as ts
import matplotlib.pyplot as plt
from sklearn import preprocessing
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Ridge
from sklearn.linear_model import Lasso

data = ts.get_k_data('000001', start='2020-01-01', end='2022-03-31').reset_index(drop = True)
data['HL_PCT']=(data['high']-data['low'])/data['low']
data['PCT_change']=(data['close']-data['open'])/data['open']
data

机器学习之线性回归

1、线性回归

x=data.drop(['date', 'code', 'close'],axis=1)
y=data.close
x=preprocessing.scale(x)
y=y.values
x_train,y_train = x[0:381,:],y[0:381]
x_test,y_test = x[381:544,:],y[381:544]

model1 = LinearRegression()
model1.fit(x_train, y_train)
print('系数矩阵:\n',model1.coef_)
print('模型截距:\n',model1.intercept_)
print('回归模型:\n',model1)
y_predict1=model1.predict(x_test)

print("决定系数(R2) : %0.4f" % model1. score (x_test, y_test) )

plt.plot(y_test,label='y_test')
plt.plot(y_predict1,label='y_predict1')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.show()

机器学习之线性回归

2、岭回归


model2 = Ridge()
model2.fit(x_train, y_train)
print('系数矩阵:\n',model2.coef_)
print('模型截距:\n',model2.intercept_)
print('回归模型:\n',model2)
y_predict2=model2.predict(x_test)

print("决定系数(R2) : %0.4f" % model2. score (x_test, y_test) )

plt.plot(y_test,label='y_test')
plt.plot(y_predict2,label='y_predict2')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')

机器学习之线性回归

3、Lasso回归

model3 = Lasso()
model3.fit(x_train, y_train)
print('系数矩阵:\n',model3.coef_)
print('模型截距:\n',model3.intercept_)
print('回归模型:\n',model3)
y_predict3=model3.predict(x_test)

print("决定系数(R2) : %0.4f" % model3. score (x_test, y_test) )

plt.plot(y_test,label='y_test')
plt.plot(y_predict3,label='y_predict3')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.show()

机器学习之线性回归
  • 结果:R2最高的是线性回归和岭回归,说明有99%的预测值和实际值是一致的;而Lasso回归的拟合优度为94%。稍比前两个模型差一点。
  • 参考:
  • 《统计学习方法》李航 著;
  • 课后ppt

Original: https://blog.csdn.net/m0_69435474/article/details/124493535
Author: 小磊要努力哟
Title: 机器学习之线性回归

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/630722/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球