第三章 线性回归

Posted peiziming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三章 线性回归相关的知识,希望对你有一定的参考价值。

第三章 线性回归

3.1 问题引入

线性回归就是使用曲线(直线,真曲线)来拟合数据点,进而得到数据中因变量与自变量的关系达到预测的目的。是值到值得预测。

import numpy as np
#生成20个点
x = np.linspace(0,10,20)
#映射为2纬数据关系
y = np.array(3 * x + 1)
#设置噪音
noise = np.random.randint(-1,1,20)
#打印散点图
plt.scatter(x,y + noise)
plt.xlabel(x)
plt.ylabel(y)
plt.savefig(linspace)
plt.show()

 

技术图片

上图表示了一批线性分布数据,而机器学习要做的如下图。

技术图片

红色直线就是线性回归的拟合效果。

3.2 线性回归模型

3.2.1 模型建立

线性回归模型,其实是两种模型中的判别式。因为我们知道判别式模型就是使用公式或者概率来直接输出做预测的模型。

线性回归模型的种类一般为,一元线性回归;多元线性回归这都属于一次的;还可以有各种曲线回归都行。

函数式,也叫假设空间:

H(x) = W X + b

这里的W是权重向量,X表示样本数据,b是偏置项。这里W的维度与X的特征数相同,点积求和操作。

有了假设空间也就是模型之后我们考虑机器学习三要素,还要有策略和算法。结合回归模型,我们选取的策略也就是损失函数一般是均方差,然后算法也就是优化方法选择得是梯度下降。这里涉及经验风险的最优化问题与梯度下降,都是数学中的链式法则求解。可以查阅相关知识手推一下。

3.2.2 线性回归建模流程

  1. 确定输入输出

  2. 选择合适的回归模型

  3. 初始化权重和偏置

  4. 在训练集中随机选取数据进行模型更新

  5. 迭代训练

3.3 使用sklearn实现线性回归

#导入绘图模块
import matplotlib.pyplot as plt
#导入波士顿数据集,sklearn库的datasets模块内涵很多已有数据集
from sklearn.datasets import load_boston
#导入线性回归模型,传统LR模型,Laaao回归模型,Ridge回归模型,ElasticNet回归哦行
from sklearn.linear_model import LinearRegression,Lasso,Ridge,ElasticNet
#导入数据标准化模块
from sklearn import preprocessing
#导入划分数据集模块,也可以自己切片划分
from sklearn.model_selection import train_test_split
?
#导入数据
data = load_boston()
#输出数据维度
print(data.data.shape)
#输出数据
print(data.data)
#输出数据标签
print(data.target)
?
#划分测试集雨验证集,data.data是X,data.target是标签Y,test_size是测试集比例
train_x,test_x,train_y,test_y = train_test_split(data.data,data.target,test_size=0.2)
#查看划分维度是否对齐
print(train_x.shape,train_y.shape)
print(test_x.shape,test_y.shape)
?
#数据标准化
#导入数据标准化方法,归一化
scaler = preprocessing.StandardScaler()
#注意标签是不用归一化的
train_x_scaler = scaler.fit_transform(train_x)
test_x_scaler = scaler.fit_transform(test_x)
#查看归一化效果
print(test_x_scaler[0:10])
?
#模型训练
#使用最简单的模型训练
model_lr = LinearRegression().fit(train_x_scaler,train_y)
?
#模型测试
y_pred_lr = model_lr.predict(test_x_scaler)
?
#评估预测
print("训练集:", model_lr.score(train_x_scaler, train_y))
print("测试集:", model_lr.score(test_x_scaler, test_y))
print(权重参数,model_lr.coef_)
print(偏置参数 ,model_lr.intercept_)
?
#模型保存
import joblib
joblib.dumb(model_lr,file_path)

输出: 训练集:
0.7350117186188968 测试集: 0.756913836466261 权重参数 [-0.98513255 0.90956824 0.23210287 0.80325878 -2.33112162 2.69152887 0.07504261 -3.22294653 2.69543339 -1.95646929 -2.01850215 0.84922147 -3.90754852] 偏置参数 22.651980198019814

 

这里使用的是最简单的线性回归方程,也没有调整参数。有兴趣的可以试试其他模型的效果。

线性回归模型对应的是linear_model.LinearRegression类;除此之外,还有基于L1正则化的Lasso回归(Lasso Regression),基于L2正则化的线性回归(Ridge Regression),以及基于L1和L2正则化融合的Lasso CNet回归(ElasticNetRegression)

 

 

以上是关于第三章 线性回归的主要内容,如果未能解决你的问题,请参考以下文章

萌新向Python数据分析及数据挖掘 第三章 机器学习常用算法 第二节 线性回归算法 (下)实操篇

神经网络:BP神经网络

机器学习--线性回归的原理与基础实现

回归分析07:假设检验与区间估计

大叔学ML第三:多项式回归

R语言——伍德里奇计量经济导论案例实践 第二 & 三章 简单与多元线性回归