Machine Learning Specialization 学习笔记(2)
文章目录
- 前言
- 一、多项式回归
- 原理
- 应用
- 实现
- 注意事项
- 二、Scikit-Learn
- SGDRegressor
- 三、分类
- 逻辑回归Logistic Regression
- 逻辑回归的关键概念:
- 逻辑回归的应用场景:
- Python中的逻辑回归实现:
- 决策边界
- 决策边界的类型
- 决策边界的计算
- 决策边界的影响因素
- 决策边界的可视化
- 逻辑回归(分类)中的损失函数
- 对数损失函数的定义
- 交叉熵损失的解释
- 损失函数的作用
- 四、过拟合
- 过拟合的特征:
- 过拟合的原因:
- 过拟合的解决方案:
- 过拟合的检测:
- 正则化的相关细节
- 常见的正则化方法包括:
- 正则化的数学公式
- 可能会产生的疑问
- 应用在线性回归上的正则化细节
- 应用在逻辑回归上的正则化细节
- 总结
前言
博客仅记录个人学习进度和一些查缺补漏。
学习内容:BV1Bq421A74G
一、多项式回归
Polynomial Features 是一种特征转换技术,它通过将原始特征的高次项和交互项添加到数据集中,来扩展数据集的特征。这种技术通常用于增强线性模型的能力,使其能够捕捉到数据中的非线性关系。(本质上就是通过多项式函数来拟合目标函数)在机器学习中,这可以通过使用多项式方程来实现,从而提高模型的预测能力。
原理
应用
- 提高模型复杂度:通过增加多项式特征,可以提高模型的复杂度,使其能够更好地拟合数据。
- 捕捉非线性关系:在许多实际问题中,目标变量与特征之间的关系可能是非线性的。多项式特征可以帮助模型捕捉这些非线性关系。
- 数据预处理:在应用机器学习算法之前,使用多项式特征进行数据预处理是一种常见的做法。
实现
在 Python 的 scikit-learn
库中,PolynomialFeatures
是一个用于生成多项式特征的实用工具。以下是如何使用它的一个例子:
from sklearn.preprocessing import PolynomialFeatures
import numpy as np
# 创建一个示例数据集
X = np.array([[1, 2], [3, 4], [5, 6]])
# 创建一个 PolynomialFeatures 实例,设置多项式的度数为2
poly = PolynomialFeatures(degree=2)
# 转换数据集
X_poly = poly.fit_transform(X)
print(X_poly)
——————————————————————————————————————————
X_poly =
[[ 1. 1. 2. 1. 2. 4.]
[ 1. 3. 4. 9. 12. 16.]
[ 1. 5. 6. 25. 30. 36.]]
对于以上代码:
PolynomialFeatures(degree=2).fit_transform(X)
是使用 scikit-learn
库中的 PolynomialFeatures
转换器的一个常见操作,它用于生成特征的多项式和交互项。举个例子,如果输入数据 X
是一个包含两个特征的二维数组:
X = np.array([X1, X2])
使用 PolynomialFeatures(degree=2).fit_transform(X)
后,输出将是一个包含以下特征的新矩阵:
[1. X1 X2 X1^2 X1X2 X2^2]
这里,新矩阵的每一行包含了原始特征、它们的平方,以及它们的交互项(在这个例子中,只有 1*2
这一项,因为 degree=2
)。
这个操作对于增强线性模型处理非线性问题的能力非常有用,因为它通过增加模型的复杂度来提高其拟合能力。然而,增加多项式次数也可能导致过拟合,特别是在特征数量较多的情况下,因此需要谨慎选择 degree
的值。
注意事项
- 过拟合风险:增加多项式特征的数量可能会增加模型的过拟合风险,特别是在特征数量远大于样本数量的情况下。因为该过程的本身就是在拟合训练集产生的目标函数。
- 计算成本:随着多项式度数的增加,生成的特征数量呈指数级增长,这可能会增加模型训练和预测的计算成本。
- 特征选择:在实际应用中,可能需要结合特征选择技术来减少特征的数量,以避免过拟合和提高模型的泛化能力。
多项式特征是处理非线性问题的有效工具,但使用时需要谨慎,以确保模型的泛化能力和计算效率。
二、Scikit-Learn
Scikit-Learn 是一个开源的 Python 机器学习库,它建立在 NumPy、SciPy 和 Matplotlib 等科学计算库之上。Scikit-Learn 提供了简单而有效的工具,用于数据挖掘和数据分析。它的目标是帮助用户和研究人员在各种领域中快速实现和测试机器学习算法。
Scikit-Learn 的主要特点包括:
-
算法丰富:提供了广泛的分类、回归、聚类和降维算法,如支持向量机(SVM)、随机森林、梯度提升、k-均值、主成分分析(PCA)等。
-
数据预处理:提供了数据标准化、归一化、编码类别特征等工具。
-
模型评估:提供了交叉验证、评分、性能度量等工具,帮助评估模型的性能。
-
管道:可以构建一个管道,将多个预处理步骤和学习算法串联起来,简化工作流程。
-
模型持久化:支持模型的保存和加载,方便后续使用。
-
文档和社区:拥有详细的文档和活跃的社区,用户可以轻松学习和解决问题。
-
兼容性:与 Python 的其他科学计算库(如 Pandas、NumPy)兼容,易于集成。
Scikit-Learn 适用于数据科学家、分析师和机器学习工程师,它使得机器学习任务变得更加容易和高效。如果你对机器学习感兴趣,Scikit-Learn 是一个很好的起点。
例如,以常用的模型为例:SGDRegressor
SGDRegressor
SGDRegressor
是 Scikit-Learn 库中的一个类,用于实现随机梯度下降(Stochastic Gradient Descent, SGD)算法的线性回归模型。随机梯度下降是一种优化算法,用于训练机器学习模型,尤其是线性模型。它通过迭代地更新模型的参数来最小化损失函数。
SGDRegressor的函数定义:
class sklearn.linear_model.SGDRegressor(loss='squared_error'
,*
, penalty='l2'
, alpha=0.0001
, l1_ratio=0.15
, fit_intercept=True
, max_iter=1000
, tol=0.001
, shuffle=True
, verbose=0
, epsilon=0.1
, random_state=None
, learning_rate='invscaling'
, eta0=0.01
, power_t=0.25
, early_stopping=False
, validation_fraction=0.1
, n_iter_no_change=5
, warm_start=False
, average=False)
以下是 SGDRegressor
的一些关键特性:
-
损失函数:
SGDRegressor
支持多种损失函数,包括'squared_loss'
(默认,即普通最小二乘回归),'huber'
,'epsilon_insensitive'
,'squared_epsilon_insensitive'
等。 -
学习率:可以通过
eta0
参数设置初始学习率。学习率是控制每次参数更新步长大小的超参数。 -
罚项:
SGDRegressor
支持l2
罚项(岭回归)和l1
罚项(套索回归),通过penalty
参数设置。 -
早停:通过
early_stopping
参数启用早停,可以在验证分数不再提高时停止训练,以避免过拟合。 -
批处理:可以通过
fit
方法的batch_size
参数设置每次梯度更新使用的样本数量。 -
随机性:
SGDRegressor
在训练过程中引入随机性,这有助于模型跳出局部最小值。 -
稀疏数据:支持稀疏矩阵输入,这在处理大规模数据集时非常有用。
-
部分拟合:支持
partial_fit
方法,可以用于在线学习或处理不能一次性加载到内存中的大型数据集。
下面是一个简单的 SGDRegressor
使用示例:
from sklearn.linear_model import SGDRegressor
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error
# 生成一些回归数据
X, y = make_regression(n_samples=1000, n_features=4, noise=0.2)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 标准化数据
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 创建 SGDRegressor 对象
sgd_reg = SGDRegressor(max_iter=1000, tol=1e-3, eta0=0.01, random_state=42)
# 训练模型
sgd_reg.fit(X_train_scaled, y_train)
# 预测测试集
y_pred = sgd_reg.predict(X_test_scaled)
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")
在这个示例中,我们首先生成了一些合成的回归数据,然后使用 SGDRegressor
来训练模型,并计算了测试集上的均方误差(MSE)作为性能指标。
三、分类
分类是机器学习中的一项基本任务,它涉及将数据分配到预定义的类别或标签中。在监督学习中,分类模型通过分析带有标签的训练数据来学习如何预测未见过数据的标签。以下是分类任务的一些关键概念和步骤:
-
数据集:包含多个样本,每个样本都有一组特征和一个标签。数据集通常分为训练集和测试集。
-
特征:数据的属性或测量值,用于描述样本。
-
标签:每个样本所属的类别。
-
训练集:用于训练模型的数据子集。
-
测试集:用于评估模型性能的数据子集,模型在训练过程中不会看到这些数据。
-
模型训练:使用训练数据来调整模型参数,以便模型能够学习如何预测标签。
-
模型评估:使用测试数据来评估模型的准确性和其他性能指标,如精确度、召回率、F1分数等。
-
分类算法:用于分类任务的算法,包括决策树、随机森林、支持向量机(SVM)、k-最近邻(k-NN)、逻辑回归、神经网络等。
-
超参数:在模型训练之前设置的参数,如学习率、树的深度、正则化参数等。
-
特征工程:选择、创建和转换特征的过程,以提高模型的性能。
-
数据预处理:包括标准化、归一化、处理缺失值、编码类别特征等步骤,以使数据更适合模型训练。
-
交叉验证:一种评估模型性能的技术,通过将训练集分成多个子集,反复训练和验证模型来减少过拟合的风险。
-
模型选择:根据性能指标和业务需求选择合适的模型。
-
模型部署:将训练好的模型部署到生产环境中,以便对新数据进行预测。
-
模型监控和维护:随着时间的推移,监控模型性能并根据需要进行更新和维护。
在进行分类任务时,机器学习工程师需要考虑数据的特性、选择合适的算法、调整超参数、进行特征工程和数据预处理,以及评估和优化模型的性能。
逻辑回归Logistic Regression
逻辑回归(Logistic Regression)是一种广泛应用于二分类问题的统计模型,尽管它的名字中有“回归”二字,但它实际上是一个分类算法。逻辑回归通过使用逻辑函数(或称Sigmoid函数)将线性回归模型的输出映射到0和1之间,从而预测一个事件发生的概率。
逻辑回归的关键概念:
-
Sigmoid函数:逻辑回归使用Sigmoid函数作为激活函数,其公式为:
其中,z是输入特征的线性组合,e 是自然对数的底数。 -
概率预测:Sigmoid函数的输出被解释为样本属于正类(通常标记为1)的概率。
-
决策边界:逻辑回归模型通过设置一个阈值(通常是0.5),将概率输出转换为类别标签。如果概率大于0.5,则预测为正类;否则,预测为负类。
-
损失函数:逻辑回归使用对数损失(Log Loss)或交叉熵损失来衡量模型预测的概率分布与实际标签之间的差异。
-
优化算法:逻辑回归通常使用梯度下降或其变种(如随机梯度下降)来优化损失函数,从而找到最佳的模型参数。
-
特征重要性:逻辑回归模型的系数可以解释为特征对预测结果的影响程度,系数的绝对值越大,特征对模型的影响越大。
-
正则化:为了防止过拟合,逻辑回归可以加入L1(Lasso)或L2(Ridge)正则化项。
-
模型评估:逻辑回归模型的性能通常通过准确率、精确率、召回率、F1分数、ROC曲线和AUC值等指标来评估。
逻辑回归的应用场景:
- 信用评分:预测个人或企业的信用风险。
- 医疗诊断:根据病人的症状和检查结果预测疾病的可能性。
- 垃圾邮件检测:识别并过滤垃圾邮件。
- 推荐系统:预测用户对商品或服务的偏好。
Python中的逻辑回归实现:
在Python中,可以使用Scikit-Learn库来实现逻辑回归:
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 假设 X 和 y 已经定义为特征矩阵和标签向量
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建逻辑回归模型
model = LogisticRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测测试集
y_pred = model.predict(X_test)
# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
逻辑回归是一个简单但强大的模型,适用于各种二分类问题。
决策边界
决策边界是机器学习中分类模型的一个关键概念,特别是在监督学习中。它定义了不同类别之间的分界线,用于决定新的输入数据应该被分到哪个类别。在二维空间中,决策边界通常是一条线或曲线;在更高维的空间中,它是一个超平面。
决策边界的类型
-
线性决策边界:
- 适用于线性分类器,如逻辑回归、线性支持向量机(SVM)。
- 在二维空间中,线性决策边界是一条直线。
-
非线性决策边界:
- 适用于非线性分类器,如决策树、k-最近邻(k-NN)、支持向量机(SVM)与非线性核。
- 在二维空间中,非线性决策边界可以是曲线或更复杂的形状。
决策边界的计算
在逻辑回归中,决策边界可以通过以下方式计算:
-
假设模型的参数为 0
-
在二维空间中,这表示一条直线,其斜率由权重 (w) 决定,截距由偏置 (b) 决定。
决策边界的影响因素
- 模型的复杂度:更复杂的模型(如具有更多层的神经网络或更深的决策树)通常能够学习更复杂的决策边界。
- 数据的分布:数据的分布和重叠程度影响决策边界的形状和位置。
- 正则化:在逻辑回归或SVM中使用正则化可以影响决策边界的复杂度,有助于防止过拟合。
决策边界的可视化
在二维空间中,决策边界可以通过绘制分类器的预测结果来直观地显示。以下是一个使用Python和matplotlib库来可视化决策边界的示例:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
# 创建一些数据
X = np.array([[1, 2], [2, 3], [3, 1], [6, 5], [7, 8], [8, 6]])
y = np.array([0, 0, 0, 1, 1, 1])
# 创建并训练逻辑回归模型
model = LogisticRegression()
model.fit(X, y)
# 绘制数据点
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='winter')
# 绘制决策边界
x_values = np.array(plt.xlim())
y_values = -(model.coef_[0][0] * x_values + model.intercept_) / model.coef_[0][1]
plt.plot(x_values, y_values, 'k')
plt.title('Decision Boundary')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()
在这个示例中,我们创建了一个简单的逻辑回归模型,并绘制了数据点和决策边界。决策边界是模型用来区分两个类别的直线。
逻辑回归(分类)中的损失函数
对数损失函数的定义
对于二分类问题,逻辑回归的损失函数可以定义为对数损失函数,其公式为:
或者
其中:
或者
f w,b (x)是概率,y是真实标签0或1。
交叉熵损失的解释
对数损失函数实际上是交叉熵损失的一种特殊情况。交叉熵损失衡量的是两个概率分布之间的差异,对于二分类问题,其公式可以扩展为:
其中:
损失函数的作用
-
指导学习:损失函数用于指导模型的学习过程。在训练过程中,模型通过最小化损失函数来调整参数,从而提高预测的准确性。
-
评估模型:损失函数的值可以用来评估模型的性能。在逻辑回归中,较低的对数损失通常意味着模型具有较高的分类准确性。
-
防止过拟合:虽然对数损失本身不直接防止过拟合,但通过结合正则化技术(如L1或L2正则化),可以帮助模型避免对训练数据过度拟合。
下图为使用对数损失函数的时候,仅观察在当y为1的时候,损失函数在(0,1)区间上的函数情况,是因为f作为SIGMOD函数输出的是正向概率。在此图中讨论问题的前提是y已经被打上了1的标签,所以当标签为1且为恶性肿瘤的概率(fwb)很低的时候(图中0.1的点位)对应的loss就很高,这样就能是的梯度下降的时候模型参数向着减少损失的方向更新。
同理,下图是y为0的时候,损失函数在(0,1)区间上的函数情况,当y标签明确为0而恶性肿瘤概率(fwb)很高的时候,对应的loss很高,这样也能使得梯度下降向着减少loss的方向更新。
在逻辑回归中,损失函数是衡量模型预测值与实际值之间差异的函数。逻辑回归通常使用对数损失(Log Loss)或称为交叉熵损失(Cross-Entropy Loss)作为损失函数。这种损失函数特别适合于分类问题,尤其是二分类问题。
在这个示例中,我们使用log_loss
函数来计算模型在测试集上的对数损失,这有助于我们评估模型的性能。
故Cost Function可以这样来定义:其中y只能取0或者1
四、过拟合
如第三个曲线,无法很好的泛化。
决策边界可能变成如下所示:
过拟合(Overfitting)是机器学习中常见的问题,它指的是模型在训练数据上表现得很好,但是在新的、未见过的数据上表现不佳的现象。过拟合通常发生在模型过于复杂,从而学习到了训练数据中的噪声和细节,而不仅仅是底层数据分布的情况。
过拟合的特征:
- 训练误差低:模型在训练数据上的误差很小,几乎完美拟合训练数据。
- 泛化能力差:模型在新的测试数据或实际应用中表现不佳,误差较高。
- 复杂度高:模型可能包含过多的参数,或者模型结构过于复杂。
过拟合的原因:
- 训练数据不纯:训练数据中包含噪声,模型学习了这些噪声。
- 模型过于复杂:模型的容量(capacity)超过了数据复杂度的需要。(过多地参数,过少的训练数据)
- 训练数据不足:训练样本太少,不足以代表整个数据分布。
- 缺乏正则化:模型训练过程中没有适当的正则化约束。
过拟合的解决方案:
- 获取更多数据:增加训练数据的数量和多样性。
- 数据增强:通过变换增加训练数据的多样性。
- 简化模型:减少模型的复杂度,如减少层数、神经元数量或参数。
- 正则化:引入L1或L2正则化,限制模型的复杂度。
- 交叉验证:使用交叉验证来评估模型的泛化能力。
- 早停(Early Stopping):在验证集上的性能不再提升时停止训练。
- 剪枝:在决策树等模型中移除不重要的分支。
- 集成学习:使用多个模型的集成方法,如随机森林或Boosting,以减少过拟合。
- dropout:在神经网络训练中随机丢弃一些神经元,以减少对特定数据的依赖。
获取数据:
简化模型:
正则化:保留特征的情况下,减少部分特征的影响
过拟合的检测:
- 训练集和验证集的误差差异:如果训练误差远低于验证误差,可能是过拟合。
- 复杂度与误差的关系:随着模型复杂度的增加,训练误差持续降低,但验证误差开始上升。
- 测试集的性能:在独立的测试集上评估模型性能,如果性能不佳,可能是过拟合。
在实践中,避免过拟合是一个平衡过程,需要根据具体情况选择合适的策略。通常,这涉及到模型选择、数据预处理、模型训练和评估等多个步骤的迭代和调整。
正则化的相关细节
正则化是机器学习中用来防止模型过拟合的一种技术。过拟合是指模型在训练数据上表现很好,但是在新的、未见过的数据上表现不佳的现象。正则化通过在模型的损失函数中加入一个额外的项来实现,这个额外的项通常与模型的复杂度相关,目的是惩罚模型的复杂度。
一般来说,我们不知道哪些权重是需要正则化的,所以需要对所有权重的正向和进行抑制
常见的正则化方法包括:
-
L1正则化(Lasso正则化):通过向损失函数添加模型权重的绝对值之和作为惩罚项。L1正则化倾向于产生稀疏权重矩阵,即很多权重会变成0,这有助于特征选择,因为它可以自动地选择重要的特征。数学表达式为:
-
L2正则化(Ridge正则化):通过向损失函数添加模型权重的平方和作为惩罚项。L2正则化会使权重值变得较小,但不会将权重压缩到0,因此不会进行特征选择。它有助于处理特征之间的多重共线性问题。数学表达式为:
当λ趋近于0时,基本没有正则化,会导致过拟合
当λ很大时,基本都由常数b来拟合,会导致欠拟合
需要求得一个合适的λ
-
Elastic Net正则化:结合了L1和L2正则化,它在损失函数中同时使用L1和L2范数。
-
Dropout正则化:在训练过程中随机地丢弃(即将其输出置为0)网络中的部分神经元,这可以减少神经元之间复杂的共适应性,增加模型的鲁棒性。
-
早停(Early Stopping):在训练过程中,当验证集上的性能开始下降时停止训练,以避免过拟合。
-
数据增强(Data Augmentation):通过对训练数据进行变换来增加数据的多样性,例如在图像处理中进行旋转、缩放、裁剪等。
-
批量归一化(Batch Normalization):通过对每个批次的输入进行归一化来加速训练并减少过拟合。
正则化的数学公式
可能会产生的疑问
Q. L1 和 L2 正则化中,采用了不同的统计量,他们有什么区别?
A.
- L1正则化:
1. 可以产生稀疏解,即一些权重被压缩到零,这样可以实现特征选择。它倾向于仅保留对模型重要的特征,完全剔除不重要的特征。
2. 由于绝对值函数的非光滑性,优化过程可能会更复杂,但在某些情况下,L1正则化提供的稀疏性是有益的。
3. 对异常值不那么敏感,因为它关注的是权重的绝对值。
4. 适用于特征数量远大于样本数量的情况,或者希望进行特征选择的场景。 - L2正则化:
1. 不会产生稀疏解。所有特征的权重都被缩减,但不会完全为零。这意味着L2正则化会保留所有特征,只是使得它们的影响力减小。
2. 是一个光滑的二次函数,优化过程较为稳定且容易实现。
3. 对异常值更敏感,异常值会对平方和产生较大影响,从而影响模型的性能。
4. 更常用于一般的线性回归和逻辑回归任务,尤其在特征间高度相关的情况下表现良好。
Q. 为什么L1 能产生稀疏解
A. L1正则化之所以能够产生稀疏解,是因为它在损失函数中引入了权重的L1范数(即权重系数的绝对值之和)作为惩罚项。在优化过程中,L1正则化倾向于将一些权重系数推向零,从而实现特征的自动选择。这种现象的原因在于L1正则化的几何特性。
在多维空间中,L1正则化对应的是一个多面体,其顶点对应于权重向量中的某些分量为零的稀疏解。当模型在训练过程中尝试最小化损失函数时,L1正则化项会推动权重向量向这些顶点移动,因为这些顶点代表了L1范数最小的方向。随着优化的进行,一些权重系数会精确地减小到零,而不仅仅是趋近于零,这就导致了稀疏性。这种稀疏性使得模型只保留那些对预测最重要的特征,从而减少了模型的复杂度并提高了泛化能力。
相反,L2正则化(Ridge正则化)添加的是权重系数的平方和作为惩罚项,它在多维空间中对应的是一个球体。L2正则化会使得权重系数均匀地减小,但不会将它们推到零,因此它不具备特征选择的能力。
在实际应用中,L1正则化因其能够产生稀疏解而常用于特征选择。然而,需要注意的是,L1正则化没有选到的特征并不意味着它们不重要,因为相关性较高的特征可能只保留了其中一个。因此,在使用L1正则化进行特征选择后,可能需要进一步的分析或使用L2正则化进行交叉验证来确定特征的重要性。
总的来说,L1正则化通过其独特的几何特性,在优化过程中倾向于产生稀疏解,这有助于模型的特征选择和泛化能力的提高。
Q. 超参数λ是对所有的特征共享的,为什么还是能有区别的使不那么重要的特征值的权重减小?如果说这种具有区别性的行为和超参数λ无关,是否可以不使用正则化?
A. 首先需要回答第二个问题,即λ的存在是必须的,或者说正则化这样一个操作是有必要的。就对单个的特征来看,如果loss函数中没有这样一个正则化的附加项,那么该特征就不会受到任何惩罚,去尽可能的拟合我们提供的数据,而此时如果出现一些噪点,仅凭那些非常重要的特征项无法很好的去拟合(因为它是噪点数据),因此不那么重要的特征项就会站出来,跟重要特征项配合去把这些早点数据也拟合了,就会导致整个模型是过拟合的。(不仅拟合了正常数据,也拟合了噪点数据和异常数据)因此,需要添加一个惩罚项,也就是正则项,来惩罚这些特征项的权重。
现在回答第一个问题,无论是L1 正则化还是L2 正则化,都是对所有的特征项进行惩罚,这一点是毋庸置疑的,但是只要惩罚效果存在,在正常数据是较多的这个大背景下(如果数据都是噪点或者异常就谈不上训练模型了),那些适应这些正常数据的特征项,就会更多的受到正常数据的影响而进行自优化(首先所有权重肯定都会降低,但是重要特征的权重会在降低后被拉回来,因为他们要去拟合这些正常数据,这是参数自学习的过程),而那些不重要的权重在降低后仅仅只能被噪点数据拉升,拉升率远不及那些重要特征的权重,所以正则化能够实现保留重要特征的情况下降低不重要特征的权重。
应用在线性回归上的正则化细节
梯度下降过程的变化(导数)
这个过程揭示了,相比正常线性回归,正则化的存在使得w每一次迭代中都乘以一个逼近1的数字,使得权重w产生了一个收缩。而重要权重则在学习中自动调整了这个收缩过程,非重要权重就会一直收缩。
应用在逻辑回归上的正则化细节
这一块有点疑问,PPT上梯度下降求导出来之后是右边这个东西吗?好像不太是吧。
只能说类型上大概是这个东西,而且含义和线性回归相同。