当前位置: 首页 > news >正文

手机域名注册网站短视频剪辑培训班速成

手机域名注册网站,短视频剪辑培训班速成,重庆网络安全公司排名,com都有哪些网站目录 一、说明 二、简单线性回归 三、线性回归的评估指标 3.1 线性回归中的假设 四、从头开始的简单线性回归代码 五、多元线性回归 六、多元线性回归代码 七、多项式线性回归 八、多项式线性回归代码 九、应用单变量多项式回归 十、改变多项式的次数 十一、多列多项式回归 一、…

目录

一、说明

二、简单线性回归

三、线性回归的评估指标

3.1 线性回归中的假设

四、从头开始的简单线性回归代码

五、多元线性回归

六、多元线性回归代码

七、多项式线性回归

八、多项式线性回归代码

九、应用单变量多项式回归

十、改变多项式的次数

十一、多列多项式回归


一、说明

        数据科学的基础算法在预测连续结果方面起着关键作用。它通过假设独立变量和因变量之间存在线性关系来预测两个变量之间的关系。它寻求最小化预测值和实际值之间平方差之和的最佳直线。该方法应用于经济学和金融学等各个领域,用于分析和预测数据趋势。它可以扩展到涉及多个独立变量的多元线性回归和逻辑回归,适用于二元分类问题。

        任何 ML 模型都遵循以下工作流程:
数据 → 模型 → 成本函数 (J) → J 的优化

        这里我们将讨论三种类型的线性回归:

  1. 简单线性回归
  2. 多元线性回归
  3. 多项式线性回归

二、简单线性回归

        在简单线性回归中,有一个独立变量 (x)一个因变量 (y)。模型估计最佳拟合线的斜率截距,表示变量之间的关系。斜率表示独立变量每变化一个单位,因变量的变化量,而截距表示独立变量为零时因变量的预测值。

模型
为了计算最佳拟合线,线性回归使用传统的斜率截距形式的直线:Y = W*X + b,
其中 Y = 因变量,X = 自变量,W = 斜率,b = 常数/截距。

        成本函数 (J)
        线性回归算法的目标是获得β ₀ 和β ₁ 的最佳值,以找到最佳拟合线。最佳拟合线是误差最小的线,这意味着预测值和实际值之间的误差应该最小。

        随机误差:在回归中,因变量(Yi)的观测值与预测值(Y_predicted)之间的差异称为残差随机误差

error = Y_predicted - Yi

其中Y_prediced = W*X + b
最佳拟合线是与给定散点图最佳拟合的线。从数学上讲,最佳拟合线是通过最小化残差平方和 (RSS) 获得的。

成本函数有助于计算出Wb的最优值,从而为数据点提供最佳拟合线。
        注意 →成本函数应具有连续性、可微性凸性
        在线性回归中,使用均方误差 (MSE),即 Y_predicted 和 Yi 之间发生的平方误差的平均值。

        梯度下降
        梯度下降是一种优化算法,它优化成本函数以达到最佳最小解。为了找到最佳解决方案,我们需要降低所有数据点的成本函数(MSE)。这是通过迭代更新 W 和 b 的值来实现的,直到我们得到最佳解决方案。
回归模型优化梯度下降算法,通过随机选择系数值降低成本函数来更新线的系数,然后迭代更新这些值以达到最小成本函数。

由于我们的成本函数是凸函数,它应该有一个全局最小值,为了达到这个最小值,我们需要采取一些步骤。现在,如果我们采取小步骤,将需要大量时间才能达到最小值,如果我们采取更大的步骤,我们将更快地到达底部,但我们可能会超调。所以在 ML 中,这些步骤被称为学习率,这决定了算法收敛到最小值的速度。

        从数学上讲,我们可以通过推导方程并使其等于零(斜率/梯度 = 0)来达到最小值。因此,我们必须根据我们的参数(W 和 b)推导方程,以更新 W 和 b 的值。

        梯度下降的推导
我们将通过对 W 和 b 的偏导数来获取成本函数 (J) 的梯度。

这里的偏导数就是梯度,用来更新W和b的值,Alpha就是学习率。

三、线性回归的评估指标

        任何线性回归模型的强度都可以使用各种评估指标来评估。这些评估指标通常可以衡量模型生成观察到的输出的效果。

        1. 判定系数或 R 平方 (R2)
        R 平方是一个数字,它解释了所开发的模型所解释/捕获的变化量。它始终介于 0 和 1 之间。总体而言,R 平方的值越高,模型与数据的拟合效果越好。

        残差平方和 (RSS)定义为图/数据中每个数据点的残差平方和。它是预期和实际观测输出之间差异的度量。

        总平方和 (TSS)定义为数据点与响应变量平均值的误差之和。

R 平方的重要性如下图所示,

        2. 均方根误差 (RMSE) 和残差标准误差 (RSE)
均方根误差是残差方差的平方根。它指定模型与数据的绝对拟合度,即观察到的数据点与预测值的接近程度。从数学上讲,它可以表示为,

        为了使该估计无偏,必须将残差平方和除以自由度,而不是模型中的数据点总数。该术语称为残差标准误差 (RSE)。从数学上讲,它可以表示为:

R 平方是比 RMSE 更好的度量。由于均方根误差的值取决于变量的单位(即它不是标准化的度量),因此它可以随着变量单位的变化而变化。

3.1 线性回归中的假设

1. 残差的线性:因变量和自变量之间需要存在线性关系。

2. 残差的独立性:误差项不应相互依赖(例如在时间序列数据中,下一个值依赖于前一个值)。残差项之间不应存在相关性。这种现象的缺失被称为自相关。

3. 残差的正态分布:残差的均值应服从正态分布,均值等于零或接近于零。这样做是为了检查所选线是否真的是最佳拟合线。如果误差项不服从正态分布,则表明存在一些不寻常的数据点,必须仔细研究才能建立更好的模型。

4. 残差方差相等:误差项必须具有恒定方差。这种现象称为同方差性。误差项中存在非常量方差称为异方差性。通常,非常量方差是在存在异常值或极端杠杆值时出现的。

四、从头开始的简单线性回归代码


import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
X,y = datasets.make_regression(n_samples=100, n_features=1, noise=20, random_state=4)
X_train, X_test ,y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1234)fig = plt.figure(figsize=(8,6))
plt.scatter(X[:,0], y, color="b", marker="o", s=30)
plt.show()

        第一行生成一个用于简单线性回归问题的合成数据集。它创建X作为输入特征(本例中为单个特征),y作为目标变量。n_samples指定数据点的数量,n_features是数据集中的特征数量(本例中为 1),noise控制数据中的噪声量,random_state确保可重复性。然后,我们使用 scikit-learn 中的train_test_split函数将数据集拆分为训练集和测试集。它采用输入特征 X 和目标变量 y,以及test_size作为要包含在测试拆分中的数据集比例(20%)。我们将使用 Matplotlib 的图形函数创建一个指定大小为8x6 英寸的散点图。X [:,0]从输入特征 X 中选择第一个(也是唯一的)特征。y 是目标变量。color=”b”将标记的颜色设置为蓝色,marker=”o”指定应使用圆形标记,s=30将标记的大小设置为 30 点。
 

class LinearRegression() : def __init__(self, lr = 0.002, n_iters = 1000):self.lr = lrself.n_iters = n_itersself.weights = Noneself.bias = Nonedef fit(self, X, y):n_samples, n_features = X.shapeself.weights = np.zeros(n_features)self.bias = 0for _ in range(self.n_iters):y_pred = np.dot(X, self.weights) + self.biasdw = (1/n_samples) * np.dot(X.T, (y_pred - y))db = (1/n_samples) * np.sum(y_pred - y)self.weights = self.weights - self.lr * dwself.bias = self.bias - self.lr * dbdef predict(self, X):y_pred = np.dot(X, self.weights) + self.biasreturn y_pred
reg = LinearRegression()
reg.fit(X_train, y_train)
pred = reg.predict(X_test)
print(pred)

此类实现了一个简单的线性回归模型。
__init __()是该类的构造函数方法。它使用两个参数初始化线性回归模型:

  • lr:学习率,控制梯度下降时所采取的步长。
  • n_iters:梯度下降算法将运行的迭代次数。

fit()函数将模型与训练数据进行拟合。它接受两个参数:输入特征 (X) 和输出目标变量 (y)。此函数将模型的权重和偏差初始化为零

predict()函数使用学习到的权重和偏差来预测新输入特征“X”的目标变量。

mse = np.mean((y_test - pred)**2)
print(mse) #--> 361.2812896055198
y_pred_line = reg.predict(X)
cmap = plt.get_cmap('viridis')
fig = plt.figure(figsize=(8,6))
m1 = plt.scatter(X_train, y_train, color=cmap(0.9), s=10)
m2 = plt.scatter(X_test, y_test, color=cmap(0.5), s=10)
plt.plot(X, y_pred_line, color='black', linewidth=2, label='Prediction')
plt.show()

五、多元线性回归

        多元线性回归是一种理解单个因变量和多个自变量之间关系的技术。多元线性回归的公式也类似于简单线性回归,但有一个细微的变化,即不再只有一个 beta 变量,而是所有使用的变量都有 beta 值。公式如下:Y = W1*X1 + W2*X2 + … + WmXm + b

        多元线性回归的考虑
因素 简单线性回归的所有四个假设对于多元线性回归仍然成立,并且还有一些新的附加假设。
        1.过度拟合:当向模型中添加越来越多的变量时,模型可能变得过于复杂,通常会记住训练集中的所有数据点。这种现象称为模型的过度拟合。这通常会导致高训练准确率和非常低的测试准确率。
        2.多重共线性:这是一种具有多个独立变量的模型中可能有一些变量相互关联的现象。
        3.特征选择:随着变量的增多,从给定特征池(其中许多可能是多​​余的)中选择最佳预测因子集成为构建相关且更好模型的重要任务。

        多重共线性由于多重共线性很难找出哪个变量实际上对响应变量的预测有贡献,因此它会导致人们错误地得出变量对目标变量的影响的结论。虽然它不会影响预测的精度,但必须正确检测和处理模型中存在的多重共线性,因为从模型中随机删除任何这些相关变量都会导致系数值大幅波动,甚至改变符号。

可以使用以下方法检测多重共线性。1
. 成对相关性:检查不同对独立变量之间的成对相关性可以为检测多重共线性提供有用的见解。2
. 方差膨胀因子 (VIF):成对相关性可能并不总是有用,因为可能只有一个变量无法完全解释其他变量,但一些变量组合起来可能可以做到这一点。因此,要检查变量之间的这种关系,可以使用 VIF。VIF 基本上解释了一个独立变量与所有其他独立变量之间的关系。VIF 由以下公式给出:

VIF = 1/ (1 - R^2)

对于 VIF 值,常见的启发式方法是,如果 VIF > 10,则该值肯定很高,应将其删除。如果 VIF=5,则它可能有效,但应先进行检查。如果 VIF < 5,则认为这是一个好的 vif 值。

线性回归中的过拟合和欠拟合总是存在模型在训练数据上表现良好但在测试数据上表现不佳的情况。在数据集上训练模型时,过拟合和欠拟合是人们面临的最常见问题。

在理解过度拟合和欠拟合之前,必须了解偏差和方差。

偏差:偏差是一种衡量模型对未来未知数据的准确度的指标。假设有足够的训练数据,复杂的模型可以准确地进行预测。而那些过于简单的模型很可能在预测方面表现不佳。简单地说,偏差是训练数据造成的错误。一般来说
,线性算法的偏差较大,这使得它们学习速度快、更容易理解,但总体而言灵活性较差。这意味着对复杂问题的预测性能较低,无法达到预期结果。

方差:方差是模型对训练数据的敏感度,即它量化了输入数据发生变化时模型的反应程度。理想情况下,模型不应该从一个训练数据集到下一个训练数据发生太大变化,这意味着算法擅长找出输入和输出变量之间隐藏的潜在模式。
理想情况下,模型应该具有较低的方差,这意味着模型在改变训练数据后不会发生剧烈变化(它是可推广的)。方差较高会使模型即使在训练数据集发生微小变化时也发生剧烈变化。

偏差方差权衡

为了追求最佳性能,监督式机器学习算法力求在低偏差和低方差之间取得平衡,以提高稳健性。在机器学习领域,偏差和方差之间存在内在关系,其特点是呈反相关。

  • 偏差增加会导致方差减少。
  • 相反,方差增大会导致偏差减小。
    找到偏差和方差之间的平衡至关重要,算法必须权衡利弊才能获得最佳结果。
    在实践中,由于底层目标函数的性质未知,计算精确的偏差和方差误差项具有挑战性。

过度拟合
当模型学习数据中的每个模式和噪声,以至于影响模型在未见的未来数据集上的性能时,这被称为过度拟合。模型与数据的拟合程度很高,以至于它将噪声解释为数据中的模式。

当模型的偏差较低且方差较高时,它最终会记住数据并导致过度拟合。过度拟合会导致模型变得具体而不是通用。这通常会导致训练准确率高但测试准确率非常低。

检测过拟合很有用,但并不能解决实际问题。有几种方法可以防止过拟合,如下所示:

  • 交叉验证
  • 如果训练数据太小,无法训练,则添加更多相关且干净的数据。
  • 如果训练数据太大,请进行一些特征选择并删除不必要的特征。
  • 正则化

欠拟合
欠拟合的讨论频率并不像过拟合那么高。当模型无法从训练数据集中学习,也无法推广到测试数据集时,就称为欠拟合。这种类型的问题可以很容易地通过性能指标检测到。

当模型具有高偏差和低方差时,它最终无法概括数据并导致欠拟合。它无法从数据中找到隐藏的底层模式。这通常会导致训练准确率低和测试准确率极低。防止欠拟合的方法如下,

  • 增加模型复杂度
  • 增加训练数据中的特征数量
  • 消除数据中的噪音

六、多元线性回归代码

X, y = datasets.make_regression(n_samples=100, n_features=3, noise=20, random_state=4)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1234)fig = plt.figure(figsize=(8,6))
plt.scatter(X[:,0], y, color="b", marker="o", s=30)
plt.show()

reg = LinearRegression()
reg.fit(X_train, y_train)pred = reg.predict(X_test)
print(pred)

mse = np.mean((y_test - pred)**2)
print(mse) #--> 698.925115269247
def plot_multiple_linear_regression(X, y, y_pred, title='Multiple Linear Regression'):fig = plt.figure(figsize=(8, 6))ax = fig.add_subplot(111, projection='3d')ax.scatter(X[:, 0], X[:, 1], y, color='blue', label='Actual')ax.scatter(X[:, 0], X[:, 1], y_pred, color='red', label='Predicted')ax.set_xlabel('Feature 1')ax.set_ylabel('Feature 2')ax.set_zlabel('Target')ax.set_title(title)ax.legend()plt.show()
plot_multiple_linear_regression(X_test, y_test, pred)

七、多项式线性回归

        简单的线性回归算法仅在数据之间的关系为线性时才有效。但是假设我们有非线性数据,那么线性回归将无法绘制最佳拟合线。在这种情况下,简单回归分析会失败。考虑下图,它具有非线性关系,您可以看到其上的线性回归结果,其表现不佳,这意味着它与现实不相符。因此,我们引入多项式回归来克服这个问题,这有助于识别独立变量和因变量之间的曲线关系。

        多项式回归如何处理非线性数据?
        多项式回归是线性回归的一种形式,由于因变量和自变量之间存在非线性关系,我们在线性回归中添加一些多项式项以将其转换为多项式回归。
在多项式回归中,因变量和自变量之间的关系被建模为 n 次多项式函数。当多项式的次数为 2 时,它被称为二次模型;当多项式的次数为 3 时,它被称为三次模型,依此类推。
假设我们有一个数据集,其中变量 X 代表独立数据,Y 是因变量。在预处理阶段将数据输入模式之前,我们使用某种程度将输入变量转换为多项式项。

        多项式回归模型通常用最小二乘法拟合。最小二乘法在高斯-马尔可夫定理下最小化系数的方差。

八、多项式线性回归代码

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
X = 6 * np.random.rand(200, 1) - 3
y = 0.8 * X**2 + 0.9*X + 2 + np.random.randn(200, 1)plt.plot(X, y, 'b.')
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

我们创建一个形状为 (200, 1) 的数组 X,其中包含-3 和 3之间的随机值。np.random.randn()用于生成 0 到 1 之间的随机数,然后缩放并移动它们到 -3 到 3 之间。
然后我们根据方程y = 0.8x^2 + 0.9x + 2生成目标变量 y ,其中 x 是输入变量 X。它首先计算(0.8 * X^2)得到二次项,(0.9*X)得到线性项,并为常数项加 2。然后它添加一些随机噪声np.random.randn(200, 1)以使数据更真实。噪声是从均值为 0 和标准差为 1 的正态(高斯)分布中采样的。

x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=2)
lr = LinearRegression()
lr.fit(x_train, y_train)
y_pred = lr.predict(x_test)
print(r2_score(y_test, y_pred)) #--> 0.2678387104012654
plt.plot(x_train, lr.predict(x_train), color="r")
plt.plot(X, y, "b.")
plt.xlabel("X")
plt.ylabel("Y")
plt.show()

九、应用单变量多项式回归

poly = PolynomialFeatures(degree=2, include_bias=True)
x_train_trans = poly.fit_transform(x_train)
x_test_trans = poly.transform(x_test)lr = LinearRegression()
lr.fit(x_train_trans, y_train)
y_pred = lr.predict(x_test_trans)
print(r2_score(y_test, y_pred)) #--> 0.7692773830829487
print(lr.coef_)
print(lr.intercept_)
X_new = np.linspace(-3, 3, 200).reshape(200, 1)
X_new_poly = poly.transform(X_new)
y_new = lr.predict(X_new_poly)
plt.plot(X_new, y_new, "r-", linewidth=2, label="Predictions")
plt.plot(x_train, y_train, "b.",label='Training points')
plt.plot(x_test, y_test, "g.",label='Testing points')
plt.xlabel("X")
plt.ylabel("y")
plt.legend()
plt.show()

十、改变多项式的次数

        现在我们将设计一个函数来帮助我们找到正确的度值。在这里,我们将上面完成的所有预处理步骤应用到一个函数中,并将最终预测图映射到它上面。我们需要做的就是传递度数,它将建立一个模型并绘制特定度数的图形。在这里,我们将创建一个预处理步骤管道,使流程简化。

数据 → 多项式变换 → 线性回归 → 预测

def polynomial_regression(degree):X_new=np.linspace(-3, 3, 100).reshape(100, 1)X_new_poly = poly.transform(X_new)polybig_features = PolynomialFeatures(degree=degree, include_bias=False)std_scaler = StandardScaler()lin_reg = LinearRegression()polynomial_regression = Pipeline([("poly_features", polybig_features),("std_scaler", std_scaler),("lin_reg", lin_reg),])polynomial_regression.fit(X, y)y_newbig = polynomial_regression.predict(X_new)#plotting prediction lineplt.plot(X_new, y_newbig,'r', label="Degree " + str(degree), linewidth=2)plt.plot(x_train, y_train, "b.", linewidth=3)plt.plot(x_test, y_test, "g.", linewidth=3)plt.legend(loc="upper left")plt.xlabel("X")plt.ylabel("y")plt.axis([-3, 3, 0, 10])plt.show()

        当我们运行该函数并传递 10、15 和 20 等高阶数时,模型会尝试过度拟合数据,这意味着预测线会慢慢脱离其原始本质并尝试依赖训练数据点,并且随着训练路径发生一些变化,该线会尝试捕捉该点。

polynomial_regression(10)

polynomial_regression(15)

<polynomial_regression(25)

这是一个高次多项式的问题,我们在实际中可以看到,所以需要选择一个最优的次数值。

十一、多列多项式回归

我们已经了解了单变量多项式回归。大多数情况下,输入数据会有很多列,那么如何应用多项式回归并在三维空间中可视化结果呢?对于大多数初学者来说,这有时感觉是一项繁重的任务,所以让我们来解决这个问题,并了解如何在三维空间中执行多项式回归。

# 3D polynomial regression
x = 7 * np.random.rand(100, 1) - 2.8
y = 7 * np.random.rand(100, 1) - 2.8
z = x**2 + y**2 + 0.2*x + 0.2*y + 0.1*x*y +2 + np.random.randn(100, 1)
import plotly.express as px
df = px.data.iris()
fig = px.scatter_3d(df, x=x.ravel(), y=y.ravel(), z=z.ravel())
fig.show()

X = np.hstack((x, y, x**2, y**2, x*y))
reg = LinearRegression().fit(X, z)# Generate grid points for surface plot
x_input, y_input = np.meshgrid(np.linspace(-2.8, 4.2, 100), np.linspace(-2.8, 4.2, 100))
X_input = np.hstack((x_input.reshape(-1, 1), y_input.reshape(-1, 1), x_input.reshape(-1, 1)**2, y_input.reshape(-1, 1)**2, (x_input.reshape(-1, 1)*y_input.reshape(-1, 1))))
z_final = reg.predict(X_input)
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Scatter3d(x=x.ravel(), y=y.ravel(), z=z.ravel(), mode='markers', marker=dict(size=3), name='Data'))
fig.add_trace(go.Surface(x=x_input, y=y_input, z=z_final.reshape(x_input.shape), name='Fitted Surface'))
fig.update_layout(scene=dict(xaxis_title='X', yaxis_title='Y', zaxis_title='Z'), title='3D Polynomial Regression')
fig.show()

您可以从github查看此处解释的代码。

http://www.hengruixuexiao.com/news/31310.html

相关文章:

  • 重庆潼南网站建设公司广州seo优化推广
  • 沈阳做网站建设北京谷歌优化
  • 网站如何做等保备案广告资源发布平台
  • win10网站开发怎么测试不爱站seo查询软件
  • 手机怎么访问微网站互联网营销师报考条件
  • 网站建设分工网站友情链接有什么用
  • 网站的运营杭州百度推广代理公司哪家好
  • 做百度快照要先有网站吗企业推广方法
  • 安徽鑫华建设有限公司网站app数据分析软件
  • 聚震网站开发百度扫一扫
  • dede网站地图文章变量数字营销软件
  • 如何制作网站视频的软件优化防控措施
  • 成品网站管理系统源码建网站seo
  • 网络舆情分析报告模板seo和sem的联系
  • 做c语言的题目的网站seo权重查询
  • 怎么创建企业网站免费友情链接
  • 北票网站建设宁波技术好的企业网站制作
  • 网站改版建设主要网站alexa排名
  • 网站建设大概价格seo外包杭州
  • 百度推广 手机网站中国seo网站
  • 哪些网站可以做装修鹤壁搜索引擎优化
  • 上海做网站的公seo顾问服务 乐云践新专家
  • 微信 html5 网站正规推广平台有哪些
  • 武汉便宜做网站seo网站优化培训厂家报价
  • 什么是网站流量昆明网站seo服务
  • word怎么做网站导航栏市场调研报告万能模板
  • 网站建设相关推荐百度站长链接提交
  • 微信h5怎么制作广州网站营销seo费用
  • 南京门户网站建设网站策划是干什么的
  • 全国免费的分类信息网苏州首页排名关键词优化