又来活了,走起

刚整理完俄语资料,学会其他的吧先

背景音乐: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、不改变原始数据的分布形状,保留了数据的相对位置关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值