线性回归模型笔记整理4 - 实战 一元线性回归模型的程序示例

之前的博文讲的是理论。现在需要用到成熟的库,来应用。

science + kit = 科学的工具包

一、一元线性回归模型(with codes)

y = 0.85x - 0.72

# sklearn 命名惯例:
# 矩阵 使用大写字母
# 向量 使用小写字母
# 所有模型的拟合(训练)方法都叫fit。
# 所有模型的测试方法都叫predict。

import numpy as np
# LinearRegression 线性回归的类,我们可以使用该类实现线性回归。
# 底层就是使用最小二乘公式来进行求解的。
from sklearn.linear_model import LinearRegression
# 该方法可以用来对数据集进行切分,分为训练集与测试集。训练集用于训练模型(求解出模型的参数w与b),
# 测试集用来验证我们建立模型的效果如何。
from sklearn.model_selection import train_test_split

# 设置随机种子。
np.random.seed(0)
x = np.linspace(-10, 10, 1000)
# 将x转换为二维的格式。之所以要将x转换为二维矩阵的格式,是因为稍后的模型fit方法中,第一个
# 参数(X)需要是二维的格式。
x = x.reshape(-1, 1)
# 自行构建一个方程,生成y值。
y = 0.85 * x - 0.72
# 生成正态分布的噪音。
e = np.random.normal(scale=1.5, size=x.shape)
# 令y值加入噪音,这样,更符合现实中数据的情况。(并不是完美的函数映射关系。)
y += e
# 创建线性回归类的对象。
lr = LinearRegression()
# 将样本数据切分为训练集与测试集。
# 该函数接收若干个数组,将每个数组切分为两部分,并返回。
# 相关参数:
# shuffle 是否进行洗牌,默认为True。
# random_state: 洗牌时候所使用的随机种子,相同的随机种子,一定可以产生相同的洗牌序列。
# test_size: 测试集数据所占有的比例。
train_X, test_X, train_y, test_y = train_test_split(x, y, test_size=0.25, random_state=0)
# 拟合数据,即使用训练数据(X与y)去训练模型。实际上,拟合(训练)就是求解模型的参数(w与b)。
lr.fit(train_X, train_y)
# coef_ 返回模型训练好的权重w值。
print(f"权重:{lr.coef_}")
# intercept_ 返回模型训练好的截距(偏置)b。
print(f"截距:{lr.intercept_}")
# 测试方法。模型经过拟合训练后,就可以得到(求解出)w与b。一旦w与b确定,模型就能够进行预测。
# 根据参数传递过来的X,返回预测的结果(目标值)y_hat。
y_hat = lr.predict(test_X)
print(f"实际值:{test_y.ravel()[:10]}")
print(f"预测值:{y_hat.ravel()[:10]}")

线性回归模型笔记整理4 - 实战 一元线性回归模型的程序示例_第1张图片

-1就是随意了
线性回归模型笔记整理4 - 实战 一元线性回归模型的程序示例_第2张图片
从np.random.normal()到正态分布的拟合
https://blog.csdn.net/lanchunhui/article/details/50163669
在这里插入图片描述

引入numpy 数据科学,最基础的包;numpy 是Pandas matplotlib都需要的。sklearn.linear_model 有一个模块包,定义了一个类。LinearRegression 是线性回归的类,可以使用该类实现线性回归。

Train test
对模型进行训练,底层是最小二乘法,接下来我们要送多少x呢?训练完之后再拿同样的数据来测试模型的好坏。

所以对整个数据集 也应该切分,要即时知道 模型的好坏。
所以建立好后,就应该知道好坏,切分 数据集 训练 求解w,一部分当成 测试 ,Train_test_split 训练测试的一个分割。

首先来生成数据,首先生成x
Reshape 成一列 ,有n行: 由一个一维变成二个维度,
一列n行。Why两个维度? x.reshape(-1,1)
因为我们训练的必须是二维的矩阵,这个位置的需要。

reshape变成二维
ravel变成一位维

二、一元线性回归模型的可视化(with codes)

import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams["font.family"] = "SimHei"
mpl.rcParams["axes.unicode_minus"] = False

# 绘制数据集样本。
plt.scatter(x, y, s=2)
# 绘制线性回归的拟合直线。即模型y = w * x + b的那条线。也就是 y = 0.84850287 * x + -0.78380631
plt.plot(x, lr.predict(x), "r-")

线性回归模型笔记整理4 - 实战 一元线性回归模型的程序示例_第3张图片
线性回归模型笔记整理4 - 实战 一元线性回归模型的程序示例_第4张图片
咱们现在是一元线性回归,一列对应一列,面积 对应 价格;而多元线性回归就是很多因素。
自行构建一个方程 生成y值 y = 0.85 * x -0.72

正太分布,标准差是2.5 ,size是x的size, x是设么形状,生成1000个 e 有1000个元素

干什么?y+=e
Why? 因为现实中的数据 带有噪声,目的是给加噪声

噪声可以看成误差,误差多少服从正太分布
生成正太分布的噪音,让y去加入噪音 y就调整了
如果就让他是完美的数据呢?也可以,但是不符合现实中的分布情况。令y值 加入噪音,这样,更符合现实中数据的情况,即不是完美的函数映射关系,而是存在一定的误差,一定的噪音。

创建线性回归类的对象,将样本切分为训练集与测试,现在这里面可以传数组。它是可变参数,就能接收若干个数组的类型。

x 是数组 y是数组,针对每个数组 切分为两个部分,每一个数组都切分为两部分。该函数接收若干个数组,将每个数组切分为两部分,并返回。因为穿2个数组,返回4个值。
Test_size 测算数据所占的比例,从-10 到 10取1000个。Why rand_state,因为shuffle不整齐
线性回归模型笔记整理4 - 实战 一元线性回归模型的程序示例_第5张图片
整齐 从小到大
线性回归模型笔记整理4 - 实战 一元线性回归模型的程序示例_第6张图片
所以我们想让他不洗牌
Why洗牌? shuffle
线性回归模型笔记整理4 - 实战 一元线性回归模型的程序示例_第7张图片
因为想让模型有更好的泛化,让模型具有更广发更通用的能力,对未知的数据更好的应用。如何让模型更有泛化能力?应该尽可能让它乱。尽可能让模型具有随机性,最好别按套路出牌,尽可能回避规律,尽可能shuffle 不用管 默认就洗牌
random_state 就是洗牌的时候 所使用的随机种子
Sklearn里面 所有 拟合都是 fitting
线性回归模型笔记整理4 - 实战 一元线性回归模型的程序示例_第8张图片
fit里面代码 其实求w的值,实际上 拟合 训练 就是求解模型的参数。拟合之后 w就求出来了。Lr 线性回归的对象,通过Lr.coef_ 表示模型的系数,也就是w的权重。注意:命名上有一个惯例: 矩阵大写 向量小写。

你可能感兴趣的:(#,AI算法=建模1_基础=)