邢台市网站建设_网站建设公司_字体设计_seo优化
2026/1/2 18:10:12 网站建设 项目流程

摘要:偏态和峰度是描述概率分布形状的重要统计量。偏态衡量分布不对称性,正偏态表示右尾较长,负偏态表示左尾较长。峰度反映分布峰态,高峰度对应尖峰厚尾,低峰度对应平峰薄尾。在机器学习中,这两个指标影响模型假设和预测准确性。此外,偏差-方差权衡是模型优化的关键:偏差源于模型简化导致的系统误差,方差反映模型对数据波动的敏感性。通过调整模型复杂度、特征选择、正则化等方法可实现两者的平衡。Python中的SciPy和sklearn库提供了相关计算和优化工具。

目录

机器学习——偏度与峰度

示例

机器学习中的偏差和方差

什么是偏差?

偏置类型

模型中偏见的例子

偏差对模型性能的影响

什么是方差?

方差类型

模型中方差的例子

方差对模型性能的影响

偏差-方差权衡

平衡偏置与方差的技巧

1. 降低高偏置

2. 降低高方差

使用Python的偏差与方差示例

高偏置示例

低偏置高方差的例子

低方差的例子

最优偏置与方差示例


机器学习——偏度与峰度

偏态和峰度是机器学习中概率分布形状的两个重要度量。

偏态指的是分布的不对称程度。如果一个分布对其均值不对称,则称其为偏斜的。偏态可以是正的,表示分布的尾部在右侧较长,也可以为负,表示分布的尾部在左侧较长。偏度为零表示分布是完全对称的。

峰度指的是分布的峰状程度。高峰度分布的峰值更尖锐且尾部较重,而低峰度分布则峰平坦且尾部较浅。峰度可以是阳性,表示峰值高于正常水平,也可以为阴性,表示峰值低于正常水平。峰度为零表示正态分布。

偏态和峰度对机器学习算法都有重要影响,因为它们会影响模型的假设和预测的准确性。例如,高度偏斜分布可能需要数据转换或使用非参数方法,而高度库尔托分布则可能需要 不同的统计模型或更稳健的估计方法。

示例

在 Python 中,SciPy 库提供了计算数据集偏度和峰度的函数。例如,以下代码利用skew()kurtosis()函数计算数据集的偏度和峰度 −

import numpy as np from scipy.stats import skew, kurtosis # Generate a random dataset data = np.random.normal(0, 1, 1000) # Calculate the skewness and kurtosis of the dataset skewness = skew(data) kurtosis = kurtosis(data) # Print the results print('Skewness:', skewness) print('Kurtosis:', kurtosis)

该代码生成一个随机数据集,1000个样本,均值为0,标准差为1的正态分布。然后,它利用 SciPy 库中的skew()kurtosis()函数计算数据集的偏度和峰度。最后,它会把结果打印到控制台上。

输出

执行该代码时,你会得到以下输出 −

Skewness: -0.04119418903611285 Kurtosis: -0.1152250196054534

在正态分布下,产生的偏度和峰度值应接近零。

机器学习中的偏差和方差

偏差和方差是机器学习中描述模型预测误差来源的两个重要概念。偏差是指因过度简化输入特征与输出变量之间的基本关系而产生的误差。同时,方差指的是由于对训练数据波动过于敏感而产生的误差。

在机器学习中,我们努力最小化偏差和方差,以构建能够准确预测未见数据的模型。高偏置模型可能过于简单,且对训练数据拟合不足。相比之下,高方差模型可能会过度拟合训练数据,无法推广到新数据。

通常,机器学习模型显示三类误差——偏差、方差和不可约误差。偏差和方差误差之间存在权衡。减少偏置会导致方差增加,反之亦然。

什么是偏差?

偏差计算为平均预测值与实际值之间的差值。在机器学习中,偏见(系统性误差)是指模型对数据做出错误假设时。

高偏差模型与训练数据匹配度不如测试数据。这会导致训练和测试数据中出现大量误差。

而偏置较低的模型则与训练数据匹配良好(高训练准确率或训练误差较少)。这导致训练数据误差低,但测试数据误差高。

偏置类型

  • 高偏置− 高偏置是由于机器学习模型中的错误假设而产生的。偏置较高的模型无法捕捉训练数据中的隐藏模式。这导致了欠拟合。他的导致了欠拟合。高偏置的特征包括高度简化的模型、欠拟合以及训练和测试数据中的高误差。
  • 低偏置− 低偏置模型可以捕捉训练数据中的隐藏模式。偏置低会导致高方差,最终导致过拟合。低偏置通常是由于机器学习模型过于复杂所致。

下图展示了高偏置和低偏置误差的图示表示。

模型中偏见的例子

试图拟合非线性数据的线性回归模型会显示较高的偏差。一些具有高偏差的模型例子包括线性回归和逻辑回归。一些低偏置模型的例子包括决策树、k最近邻和支持向量机。

偏差对模型性能的影响

高偏差会导致训练和测试数据集的性能不佳。高偏置模型无法对新的、未见过的数据进行推广。

什么是方差?

方差是衡量给定观测中数字相对于均值的分布或分散程度的指标。它基本上衡量一组数字与平均值的分布。在统计学和概率学中,方差被定义为随机变量与样本均值的平方偏差的期望值。

在机器学习中,方差是指模型在不同数据集上预测的变异性。方差显示了当数据存在轻微变化时,模型预测的差异有多大。如果模型在训练和测试数据上的准确性差异很大,则该模型方差较高。

高方差的模型甚至可以在训练数据上拟合噪声,但缺乏对新未见数据的推广能力。

方差类型

  • 高方差− 高方差模型捕捉噪声和隐藏模式。这会导致过拟合。高方差模型显示训练准确率较高,但测试准确率较低。高方差模型的一些特征包括模型过于复杂、过拟合、训练数据误差低以及高误差或测试数据。
  • 低方差− 低方差模型无法捕捉数据中的隐藏模式。当我们拥有非常少的数据或使用非常简化的模型时,方差可能会很低。低方差会导致拟合不足

下图展示了高方差和低方差示例的图示表示。

模型中方差的例子

一个有多个分支的决策树,完美契合训练数据,但不适合测试数据,就是高方差的例子。高方差的例子:k-最近邻、决策树和支持向量机(SVM)。

方差对模型性能的影响

高方差可能导致模型在训练数据上表现良好,但在训练数据上表现不佳。在训练过程中,高方差模型能够如此贴合训练数据,甚至能捕捉到噪声作为实际模式。误差较大的模型被称为过拟合模型。

偏差-方差权衡

偏差与方差的权衡是找到偏差带来的误差与方差带来的误差之间的平衡。随着模型复杂度的增加,偏差会减少,但方差会增加。然而,当模型复杂度降低时,偏差会增加,方差会减少。因此,我们需要在偏置和方差之间取得平衡,以最小化总预测误差。

如果机器学习模型在训练中存在较高的偏差或方差,在新的、未见的数据上表现不佳。一个好的模型不应具有高偏置或高方差。我们无法同时减少偏差和方差。当偏置减小时,方差会增加。因此,我们需要找到一个最优的偏差和方差,使预测误差最小化。

在机器学习中,偏倚-方差权衡很重要,因为模型偏置高或偏置高。

图形表示

下图以图形方式表示偏差与方差之间的权衡。

在上图中,X轴表示模型复杂度,Y轴代表预测误差。总误差是偏置误差和方差误差的总和。最优区域显示偏置与方差平衡的区域,显示模型复杂度最佳且误差最小。

数学表示

机器学习模型中的预测误差可以用数学方式写成 −

误差=偏置2+ 方差 + 不可约误差。

为了最小化模型预测误差,我们需要选择模型复杂度,以实现这两个误差之间的平衡。

偏差-方差权衡的主要目标是找到偏差和方差的最优值(模型复杂度),以最小化误差。

平衡偏置与方差的技巧

有多种方法可以平衡偏差和方差,以实现最佳预测误差。

1. 降低高偏置

  • 选择更复杂的模型− 如上图所示,选择更复杂的模型可能会降低模型预测的偏差误差。
  • 增加更多特征− 添加模式特征可以增加模型的复杂度,从而捕捉更好的隐藏模式,从而降低模型的偏置误差。
  • 减少正则化− 正则化防止过拟合,但在降低方差的同时,可能会增加偏差。因此,减少正则化参数或整体去除正则化可以减少偏差误差。

2. 降低高方差

  • 应用正则化技术− 正则化技术会给复杂模型带来惩罚,最终导致模型复杂度降低。较简单的模型显示的方差会更少。
  • 简化模型复杂度 − 较不复杂的模型方差较低。你可以通过使用更简单的算法来降低方差。
  • 增加更多数据− 向数据集增加更多数据可以帮助模型表现更好,显示出更低的方差。
  • 交叉验证− 交叉验证通过比较数据集的训练集和验证集表现,有助于识别过拟合。

使用Python的偏差与方差示例

让我们用Python编程语言实现一些实际例子。我们这里提供了四个例子。前三个例子显示出一定程度的高/低偏差或方差。第四个例子展示了偏差和方差的最佳值。

高偏置示例

下面是一个用Python实现的例子,展示了如何使用波士顿住房数据集分析偏差和方差——

import numpy as np import pandas as pd from sklearn.datasets import load_boston boston = load_boston() X = boston.data y = boston.target from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error lr = LinearRegression() lr.fit(X_train, y_train) train_preds = lr.predict(X_train) train_mse = mean_squared_error(y_train, train_preds) print("Training MSE:", train_mse) test_preds = lr.predict(X_test) test_mse = mean_squared_error(y_test, test_preds) print("Testing MSE:", test_mse)

输出

输出显示了线性回归模型的训练和检验均方误差(MSE)。训练MSE为21.64,测试MSE为24.29,表明模型存在较高偏倚和中等方差。

Training MSE: 21.641412753226312 Testing MSE: 24.291119474973456

低偏置高方差的例子

我们尝试一个多项式回归模型 −

from sklearn.preprocessing import PolynomialFeatures poly = PolynomialFeatures(degree=2) X_train_poly = poly.fit_transform(X_train) X_test_poly = poly.transform(X_test) pr = LinearRegression() pr.fit(X_train_poly, y_train) train_preds = pr.predict(X_train_poly) train_mse = mean_squared_error(y_train, train_preds) print("Training MSE:", train_mse) test_preds = pr.predict(X_test_poly) test_mse = mean_squared_error(y_test, test_preds) print("Testing MSE:", test_mse)

输出

输出显示了次数=2的多项式回归模型的训练和测试MSE。训练MSE为5.31,测试MSE为14.18,表明该模型的偏差较低但方差较高,相较于线性回归模型。

Training MSE: 5.31446956670908 Testing MSE: 14.183558207567042

低方差的例子

为了减少方差,我们可以采用脊回归套索回归等正则化技术。在以下示例中,我们将使用脊回归 −

from sklearn.linear_model import Ridge ridge = Ridge(alpha=1) ridge.fit(X_train_poly, y_train) train_preds = ridge.predict(X_train_poly) train_mse = mean_squared_error(y_train, train_preds) print("Training MSE:", train_mse) test_preds = ridge.predict(X_test_poly) test_mse = mean_squared_error(y_test, test_preds) print("Testing MSE:", test_mse)

输出

输出显示了alpha=1的脊回归模型的训练和测试MSE。训练MSE为9.03,测试MSE为13.88,相较多项式回归模型,表明该模型方差较低但偏差略高。

Training MSE: 9.03220937860839 Testing MSE: 13.882093755326755

最优偏置与方差示例

我们还可以进一步调整超参数α,以找到偏置与方差之间的最佳平衡。让我们举个例子——

from sklearn.model_selection import GridSearchCV param_grid = {'alpha': np.logspace(-3, 3, 7)} ridge_cv = GridSearchCV(Ridge(), param_grid, cv=5) ridge_cv.fit(X_train_poly, y_train) train_preds = ridge_cv.predict(X_train_poly) train_mse = mean_squared_error(y_train, train_preds) print("Training MSE:", train_mse) test_preds = ridge_cv.predict(X_test_poly) test_mse = mean_squared_error(y_test, test_preds) print("Testing MSE:", test_mse)

输出

输出显示了带有最优α值的脊回归模型的训练和测试MSE。

Training MSE: 8.326082686584716 Testing MSE: 12.873907256619141

训练MSE为8.32,测试MSE为12.87,表明模型在偏置与方差之间保持良好平衡。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询