刚整理完俄语资料,学会其他的吧先
背景音乐:PG one香港站太好听了
深度学习作业:归一化
首先从定义、种类、作用、特点、使用场景、关联性、代码角度、案例角度等来了解他
OK ,let's go
是不是有点跑偏了,主要讲归一化手段中的正则化手段和normalzation手段。
1、正则化
概念:是防止训练模型中发生过拟合(overfitting)的一种技术手段
原理:是通过在损失函数中引入额外的惩罚项,限制模型的复杂度,从而避免过度拟合训练数据的细节和噪声
正则化有两种:
L1正则化:形式:
代码:
from sklearn.linear_model import Lasso, LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np
# 生成一个具有多个特征的示例数据集
np.random.seed(42)
X = np.random.rand(100, 5)
# 只有第一个特征对目标有显著影响
y = 2 + 3 * X[:, 0] + 0.5 * np.random.randn(100) # 增加一些噪声
# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建没有正则化的线性回归模型
model_no_regularization = LinearRegression()
# 使用模型进行训练
model_no_regularization.fit(X_train, y_train)
# 创建L1正则化的线性回归模型
model_with_regularization = Lasso(alpha=0.5) # 增大alpha的值以加强正则化
# 使用模型进行训练
model_with_regularization.fit(X_train, y_train)
# 进行预测
y_pred_no_regularization = model_no_regularization.predict(X_test)
y_pred_with_regularization = model_with_regularization.predict(X_test)
# 计算均方误差(MSE)
mse_no_regularization = mean_squared_error(y_test, y_pred_no_regularization)
mse_with_regularization = mean_squared_error(y_test, y_pred_with_regularization)
# 计算原始的均方误差(MSE)
mse_original = mean_squared_error(y_test, 2 + 3 * X_test[:, 0])
# 输出结果
print(f'Mean Squared Error without Regularization: {mse_no_regularization}')
print(f'Mean Squared Error with L1 Regularization: {mse_with_regularization}')
print(f'Original Mean Squared Error: {mse_original}')
优势:对于具有大量特征且其中只有一小部分对目标有显著影响的情况,L1 正则化有助于将不相关或冗余的特征的权重压缩至零,从而实现特征选择。
L2正则化形式:
注:θ j是特征的权重、
代码:
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np# 生成具有高度相关特征的数据集
np.random.seed(42)
X = np.random.rand(100, 5)
X[:, 1] = 0.95 * X[:, 0] + 0.05 * np.random.randn(100) # 创建共线性特征
y = 2 + 3 * X[:, 0] + 1.5 * X[:, 1] + np.random.randn(100)#将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建没有正则化的线性回归模型
model_no_regularization = LinearRegression()# 使用模型进行训练
model_no_regularization.fit(X_train, y_train)# 创建L2正则化的线性回归模型
model_with_regularization = Ridge(alpha=1.0) # alpha是正则化参数
model_with_regularization.fit(X_train, y_train)# 使用模型进行训练
y_pred_no_regularization = model_no_regularization.predict(X_test)# 进行预测
y_pred_with_regularization = model_with_regularization.predict(X_test)
# 计算原始的均方误差(MSE)
mse_no_regularization = mean_squared_error(y_test, y_pred_no_regularization)
mse_with_regularization = mean_squared_error(y_test, y_pred_with_regularization)
print(f'Mean Squared Error without Regularization: {mse_no_regularization}')
print(f'Mean Squared Error with L2 Regularization: {mse_with_regularization}')
# 输出原始的均方误差
print(f'Original Mean Squared Error: {mean_squared_error(y_test, X_test[:, 0] * 2 + X_test[:, 1] * 3 + 1.5)}')
优势:
L2正则化倾向于使所有权重都相对较小,但通常不会将它们精确地压缩至零。它通过减小大权重的影响来提高模型的泛化能力,但不会显著减小不重要的特征的权重。
2、归一化Normalzation
是一种数据预处理技术,调整数据的尺度,使归一化的数据更适合模型的训练。
有Min-Max归一化、
公式:
代码实现:
data = np.array([[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
[7.0, 8.0, 9.0]])
# Min-Max归一化
def min_max_normalize(data):
min_vals = np.min(data, axis=0)
max_vals = np.max(data, axis=0)
normalized_data = (data - min_vals) / (max_vals - min_vals)
return normalized_data
特点:
1、将所有特征的值映射到0,1的范围内,确保了数据的尺度一致性 。
2、易于计算,只需要找到数据集中的最小值和最大值,然后应用线性变换即可完成数据预处理的归一化。
Z-score Normalization标准化:
将数据转换为均值为0,标准差为1的标准正态分布来调整数据范围
公式:
步骤:
1、先计算均值μ和标准差σ
2、对每个数据点 X 应用标准化公式,将其映射到标准正态分布
特点:
1、调整后的数据具有均值为0,标准差为1的分布。
2、不改变原始数据的分布形状,保留了数据的相对位置关系。