机器学习基本理论分类对比维度有监督学习无监督学习半监督学习强化学习数据类型全标签数据无标签数据少量标签大量无标签无直接标签通过奖励反馈学习目标学习输入到输出的映射发现数据内在结构利用无标签数据提升泛化能力学习最优行为策略以最大化奖励核心特征有“老师”指导自主“发现”模式结合监督与无监督学习通过“试错”与环境互动典型应用分类、回归聚类、降维网页分类、NLP游戏AI、机器人控制基本术语数据集Data Set多条记录的集合。①训练集Training Set用于训练模型的数据。②验证集Validation Set用于调节超参数的数据。③测试集Test Set用于评估模型性能的数据。样本Sample数据集中的一条记录是关于一个事件或对象的描述称为一个样本。特征Feature数据集中一列反映事件或对象在某方面的表现或性质的事项称为特征或属性。特征向量Feature Vector将样本的所有特征表示为向量的形式输入到模型中。标签Label监督学习中每个样本的结果信息也称作目标值target。模型Model一个机器学习算法与训练后的参数集合用于进行预测或分类。参数Parameter模型通过训练学习到的值例如线性回归中的权重和偏置。超参数Hyper Parameter由用户设置的参数不能通过训练自动学习例如学习率、正则化系数等。为方便大家学习 这里给大家整理了一份学习资料包 需要的同学 根据下图自取即可建模流程特征工程特征选择从原始特征中挑选出与目标变量标签关系最密切的特征剔除冗余、无关或噪声特征。特征选择不会创建新特征也不会改变数据结构。# 低方差过滤 import numpy as np from sklearn.feature_selection import VarianceThreshold # 1. 构造特征 1: 均值0 标准差1 a np.random.randn(10000) print(f方差: ${np.var(a)}, 均值: ${np.mean(a)}) # 2. 构造特征 2: 均值5 标准差0.1 b np.random.normal(loc5, scale0.1, size10000) print(f方差: ${np.var(b)}, 均值: ${np.mean(b)}) # 3. 构造特征向量 X np.vstack((a, b)).T print(X) # 4. 方差过滤:删除方差低于0.2的特征 var_thresh VarianceThreshold(0.2) X_filtered var_thresh.fit_transform(X) print(X_filtered) print(X_filtered.shape) print(X.shape)# 皮尔逊相关系数 # 1. 读取数据 adv pd.read_csv(../data/xxx.csv) print(adv.head()) # 2. 数据清洗: 去掉id列 adv.drop(adv.columns[0], axis1, inplaceTrue) adv.dropna(inplaceTrue) # 3. 提取特征和标签 x adv.drop(Sales, axis1, inplaceFalse) y adv[Sales] # 4. 计算皮尔逊相关系数 corr x.corrwith(y, methodpearson) print(corr) # 5. 相关系数矩阵 matrix adv.corr(methodpearson) print(matrix)特征转换-数字型特性归一化 (Min-Max)标准化 (Z-Score)输出范围固定区间如 [0,1]无固定范围正态分布异常值敏感非常敏感易受影响相对鲁棒影响较小适用场景数据有明确边界如图像分布未知、存在异常值核心优点简单直观范围可控鲁棒性强通用首选核心缺点受异常值影响大改变原始尺度需计算# 归一化 import numpy as np from sklearn.preprocessing import MinMaxScaler x [[1, 2], [0.5, 6], [0, 10], [1, 18]] # 得到归一化的缩放器对象 scaler MinMaxScaler(feature_range(0, 1)) x scaler.fit_transform(x) print(x)# 标准化 import numpy as np from sklearn.preprocessing import StandardScaler x [[1, 2], [0.5, 6], [0, 10], [1, 18]] scaler StandardScaler() x scaler.fit_transform(x) print(x)特征转换-类别型为方便大家学习 这里给大家整理了一份学习资料包 需要的同学 根据下图自取即可标签编码(Label Encoding)特征是有序的, 把特征映射为有序的整数。独热编码(One-Hot Encoding)为每个类别创建一个新的二进制特征。对于某个样本只有其所属类别对应的特征值为1其余所有新特征的值均为0。目标编码(Target Encoding)将类别变量的每个类别替换为其对应目标变量(标签)的平均值或其他统计量。频率编码(Frequency Encoding)用每个类别在整个数据集中出现的频率或概率来替换该类别标签将类别特征转换为数值特征。# 独热编码 from sklearn.preprocessing import OneHotEncoder import numpy as np X np.array([[红], [蓝], [绿], [红]]) encoder OneHotEncoder() result encoder.fit_transform(X).toarray() print(result)特征构造特征构造是基于现有的特征创造出新的、更有代表性的特征。通过组合、转换、或者聚合现有的特征形成能够更好反映数据规律的特征。交互特征将两个特征组合起来形成新的特征。例如两个特征的乘积、和或差等。统计特征从原始特征中提取统计值例如求某个时间窗口的平均值、最大值、最小值、标准差等。日期和时间特征日期时间数据中提取如星期几、月份、年份、季度、是否周末等特征。特征降维当数据集的特征数量非常大时特征降维可以帮助减少计算复杂度并避免过拟合。通过降维方法可以在保持数据本质的情况下减少特征的数量。主成分分析PCA通过线性变换将原始特征映射到一个新的空间使得新的特征主成分尽可能地保留数据的方差。import numpy as np import matplotlib.pyplot as plt from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler n_samples 1000 # 第 1 个主成分方向 component1 np.random.normal(0, 1, n_samples) # 第 2 个主成分方向 component2 np.random.normal(0, 0.2, n_samples) # 第 3 个方向噪声方差较小 noise np.random.normal(0, 0.1, n_samples) # 构造 3 维数据 X np.vstack([component1 - component2, component1 component2, component2 noise]).T # 标准化 scaler StandardScaler() X_standardized scaler.fit_transform(X) # 应用 PCA将 3 维数据降维到 2 维 pca PCA(n_components2) X_pca pca.fit_transform(X_standardized) # 可视化 # 转换前的 3 维数据可视化 fig plt.figure(figsize(12, 4)) ax1 fig.add_subplot(121, projection3d) ax1.scatter(X[:, 0], X[:, 1], X[:, 2], cg) ax1.set_title(Before PCA (3D)) ax1.set_xlabel(Feature 1) ax1.set_ylabel(Feature 2) ax1.set_zlabel(Feature 3) # 转换后的 2 维数据可视化 ax2 fig.add_subplot(122) ax2.scatter(X_pca[:, 0], X_pca[:, 1], cg) ax2.set_title(After PCA (2D)) ax2.set_xlabel(Principal Component 1) ax2.set_ylabel(Principal Component 2) plt.show()模型评估损失函数对于模型一次预测结果的好坏需要有一个度量标准。 对于监督学习而言给定一个输入 X选取的模型就相当于一个“决策函数”f它可以输出一个预测结果 f(X)而真实的结果标签记为 Y。f(X) 和 Y 之间可能会有偏差我们就用一个损失函数loss function来度量预测偏差的程度记作 L(Y,f(X))。 损失函数用来衡量模型预测误差的大小损失函数值越小模型就越好。常见的损失函数有0-1 损失函数平方损失函数绝对损失函数对数似然损失函数。经验误差和泛化误差给定一个训练数据集根据选取的损失函数就可以计算出模型 f(X)在训练集上的平均误差称为训练误差也被称作经验误差。类似地在测试数据集上平均误差被称为测试误差或者泛化误差。欠拟合模型在训练集和测试集表现都很差高偏差。产生原因模型复杂度不足 特征不足训练不充分过强的正则化。解决方法增加模型复杂度增加特征或者改进特征工程增加训练时间减少正则化强度。过拟合模型在训练集表现好但测试集表现差高方差。产生原因模型复杂度过高训练数据不足特征过多训练过长。解决方法简化模型或者降维降低模型复杂度增加训练数据使用正则化交叉验证早停。正则化正则化Regularization是一种在训练机器学习模型时在损失函数中添加额外项来惩罚过大的参数进而限制模型复杂度、避免过拟合提高模型泛化能力的技术。类型1、L1 正则化Lasso 回归惩罚参数绝对值之和使部分参数为 0实现特征选择。2、L2 正则化Ridge 回归惩罚参数平方和使参数值普遍较小提高模型稳定性。3、ElasticNet结合 L1 和 L2 正则化平衡稀疏性和稳定性。交叉验证交叉验证是通过多次划分数据集训练集 验证集反复进行训练和验证来评估模型泛化能力的方法减少数据划分随机性的影响。通过交叉验证能更可靠地估计型在未知数据上的表现亦能避免因单次数据划分不合理导致的模型过拟合或欠拟合在实际工程应用中通常可以结合网格搜索来确定超参数。为方便大家学习 这里给大家整理了一份学习资料包 需要的同学 根据下图自取即可常用的交叉验证方法1、k 折交叉验证将数据分为 k 份每次用 k-1 份训练1 份验证取平均性能。2、留一交叉验证每次留 1 个样本作为验证集适用于小数据集。3、简单交叉验证Hold-Out一次划分训练集和验证集结果较粗糙。模型评估指标对学习的泛化性能进行评估不仅需要有效可行的实验估计方法还需要有衡量模型泛化能力的评价指标也叫做性能度量。回归任务常用评价指标1、均方误差MSE预测值与真实值差的平方均值。重视大误差惩罚严重错误。2、平均绝对误差MAE预测值与真实值差的绝对值均值。追求稳健避免异常值影响。3、R²决定系数衡量模型整体对目标变量的解释能力越接近 1 越好。分类任务常用评价指标1、准确率Accuracy正确预测样本占比。2、精确率Precision预测为正例的样本中实际为正例的比例。3、召回率Recall实际为正例的样本中被正确预测的比例。4、F1分数精确率和召回率的调和平均。5、ROC曲线与AUCROC 曲线以 FPR 为横轴、TPR 为纵轴AUC 为曲线下面积衡量模型区分正负类的能力。全面评估模型整体排序能力对类别比例不敏感适合评估和比较模型本身性能。6、AUC-PR曲线描述不同阈值下精确率和召回率的曲线特别适用于高度不平衡的数据异常检测此时 AUC-PR 曲线比 ROC 曲线更具参考性。
大模型 | 大模型之机器学习基本理论
机器学习基本理论分类对比维度有监督学习无监督学习半监督学习强化学习数据类型全标签数据无标签数据少量标签大量无标签无直接标签通过奖励反馈学习目标学习输入到输出的映射发现数据内在结构利用无标签数据提升泛化能力学习最优行为策略以最大化奖励核心特征有“老师”指导自主“发现”模式结合监督与无监督学习通过“试错”与环境互动典型应用分类、回归聚类、降维网页分类、NLP游戏AI、机器人控制基本术语数据集Data Set多条记录的集合。①训练集Training Set用于训练模型的数据。②验证集Validation Set用于调节超参数的数据。③测试集Test Set用于评估模型性能的数据。样本Sample数据集中的一条记录是关于一个事件或对象的描述称为一个样本。特征Feature数据集中一列反映事件或对象在某方面的表现或性质的事项称为特征或属性。特征向量Feature Vector将样本的所有特征表示为向量的形式输入到模型中。标签Label监督学习中每个样本的结果信息也称作目标值target。模型Model一个机器学习算法与训练后的参数集合用于进行预测或分类。参数Parameter模型通过训练学习到的值例如线性回归中的权重和偏置。超参数Hyper Parameter由用户设置的参数不能通过训练自动学习例如学习率、正则化系数等。为方便大家学习 这里给大家整理了一份学习资料包 需要的同学 根据下图自取即可建模流程特征工程特征选择从原始特征中挑选出与目标变量标签关系最密切的特征剔除冗余、无关或噪声特征。特征选择不会创建新特征也不会改变数据结构。# 低方差过滤 import numpy as np from sklearn.feature_selection import VarianceThreshold # 1. 构造特征 1: 均值0 标准差1 a np.random.randn(10000) print(f方差: ${np.var(a)}, 均值: ${np.mean(a)}) # 2. 构造特征 2: 均值5 标准差0.1 b np.random.normal(loc5, scale0.1, size10000) print(f方差: ${np.var(b)}, 均值: ${np.mean(b)}) # 3. 构造特征向量 X np.vstack((a, b)).T print(X) # 4. 方差过滤:删除方差低于0.2的特征 var_thresh VarianceThreshold(0.2) X_filtered var_thresh.fit_transform(X) print(X_filtered) print(X_filtered.shape) print(X.shape)# 皮尔逊相关系数 # 1. 读取数据 adv pd.read_csv(../data/xxx.csv) print(adv.head()) # 2. 数据清洗: 去掉id列 adv.drop(adv.columns[0], axis1, inplaceTrue) adv.dropna(inplaceTrue) # 3. 提取特征和标签 x adv.drop(Sales, axis1, inplaceFalse) y adv[Sales] # 4. 计算皮尔逊相关系数 corr x.corrwith(y, methodpearson) print(corr) # 5. 相关系数矩阵 matrix adv.corr(methodpearson) print(matrix)特征转换-数字型特性归一化 (Min-Max)标准化 (Z-Score)输出范围固定区间如 [0,1]无固定范围正态分布异常值敏感非常敏感易受影响相对鲁棒影响较小适用场景数据有明确边界如图像分布未知、存在异常值核心优点简单直观范围可控鲁棒性强通用首选核心缺点受异常值影响大改变原始尺度需计算# 归一化 import numpy as np from sklearn.preprocessing import MinMaxScaler x [[1, 2], [0.5, 6], [0, 10], [1, 18]] # 得到归一化的缩放器对象 scaler MinMaxScaler(feature_range(0, 1)) x scaler.fit_transform(x) print(x)# 标准化 import numpy as np from sklearn.preprocessing import StandardScaler x [[1, 2], [0.5, 6], [0, 10], [1, 18]] scaler StandardScaler() x scaler.fit_transform(x) print(x)特征转换-类别型为方便大家学习 这里给大家整理了一份学习资料包 需要的同学 根据下图自取即可标签编码(Label Encoding)特征是有序的, 把特征映射为有序的整数。独热编码(One-Hot Encoding)为每个类别创建一个新的二进制特征。对于某个样本只有其所属类别对应的特征值为1其余所有新特征的值均为0。目标编码(Target Encoding)将类别变量的每个类别替换为其对应目标变量(标签)的平均值或其他统计量。频率编码(Frequency Encoding)用每个类别在整个数据集中出现的频率或概率来替换该类别标签将类别特征转换为数值特征。# 独热编码 from sklearn.preprocessing import OneHotEncoder import numpy as np X np.array([[红], [蓝], [绿], [红]]) encoder OneHotEncoder() result encoder.fit_transform(X).toarray() print(result)特征构造特征构造是基于现有的特征创造出新的、更有代表性的特征。通过组合、转换、或者聚合现有的特征形成能够更好反映数据规律的特征。交互特征将两个特征组合起来形成新的特征。例如两个特征的乘积、和或差等。统计特征从原始特征中提取统计值例如求某个时间窗口的平均值、最大值、最小值、标准差等。日期和时间特征日期时间数据中提取如星期几、月份、年份、季度、是否周末等特征。特征降维当数据集的特征数量非常大时特征降维可以帮助减少计算复杂度并避免过拟合。通过降维方法可以在保持数据本质的情况下减少特征的数量。主成分分析PCA通过线性变换将原始特征映射到一个新的空间使得新的特征主成分尽可能地保留数据的方差。import numpy as np import matplotlib.pyplot as plt from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler n_samples 1000 # 第 1 个主成分方向 component1 np.random.normal(0, 1, n_samples) # 第 2 个主成分方向 component2 np.random.normal(0, 0.2, n_samples) # 第 3 个方向噪声方差较小 noise np.random.normal(0, 0.1, n_samples) # 构造 3 维数据 X np.vstack([component1 - component2, component1 component2, component2 noise]).T # 标准化 scaler StandardScaler() X_standardized scaler.fit_transform(X) # 应用 PCA将 3 维数据降维到 2 维 pca PCA(n_components2) X_pca pca.fit_transform(X_standardized) # 可视化 # 转换前的 3 维数据可视化 fig plt.figure(figsize(12, 4)) ax1 fig.add_subplot(121, projection3d) ax1.scatter(X[:, 0], X[:, 1], X[:, 2], cg) ax1.set_title(Before PCA (3D)) ax1.set_xlabel(Feature 1) ax1.set_ylabel(Feature 2) ax1.set_zlabel(Feature 3) # 转换后的 2 维数据可视化 ax2 fig.add_subplot(122) ax2.scatter(X_pca[:, 0], X_pca[:, 1], cg) ax2.set_title(After PCA (2D)) ax2.set_xlabel(Principal Component 1) ax2.set_ylabel(Principal Component 2) plt.show()模型评估损失函数对于模型一次预测结果的好坏需要有一个度量标准。 对于监督学习而言给定一个输入 X选取的模型就相当于一个“决策函数”f它可以输出一个预测结果 f(X)而真实的结果标签记为 Y。f(X) 和 Y 之间可能会有偏差我们就用一个损失函数loss function来度量预测偏差的程度记作 L(Y,f(X))。 损失函数用来衡量模型预测误差的大小损失函数值越小模型就越好。常见的损失函数有0-1 损失函数平方损失函数绝对损失函数对数似然损失函数。经验误差和泛化误差给定一个训练数据集根据选取的损失函数就可以计算出模型 f(X)在训练集上的平均误差称为训练误差也被称作经验误差。类似地在测试数据集上平均误差被称为测试误差或者泛化误差。欠拟合模型在训练集和测试集表现都很差高偏差。产生原因模型复杂度不足 特征不足训练不充分过强的正则化。解决方法增加模型复杂度增加特征或者改进特征工程增加训练时间减少正则化强度。过拟合模型在训练集表现好但测试集表现差高方差。产生原因模型复杂度过高训练数据不足特征过多训练过长。解决方法简化模型或者降维降低模型复杂度增加训练数据使用正则化交叉验证早停。正则化正则化Regularization是一种在训练机器学习模型时在损失函数中添加额外项来惩罚过大的参数进而限制模型复杂度、避免过拟合提高模型泛化能力的技术。类型1、L1 正则化Lasso 回归惩罚参数绝对值之和使部分参数为 0实现特征选择。2、L2 正则化Ridge 回归惩罚参数平方和使参数值普遍较小提高模型稳定性。3、ElasticNet结合 L1 和 L2 正则化平衡稀疏性和稳定性。交叉验证交叉验证是通过多次划分数据集训练集 验证集反复进行训练和验证来评估模型泛化能力的方法减少数据划分随机性的影响。通过交叉验证能更可靠地估计型在未知数据上的表现亦能避免因单次数据划分不合理导致的模型过拟合或欠拟合在实际工程应用中通常可以结合网格搜索来确定超参数。为方便大家学习 这里给大家整理了一份学习资料包 需要的同学 根据下图自取即可常用的交叉验证方法1、k 折交叉验证将数据分为 k 份每次用 k-1 份训练1 份验证取平均性能。2、留一交叉验证每次留 1 个样本作为验证集适用于小数据集。3、简单交叉验证Hold-Out一次划分训练集和验证集结果较粗糙。模型评估指标对学习的泛化性能进行评估不仅需要有效可行的实验估计方法还需要有衡量模型泛化能力的评价指标也叫做性能度量。回归任务常用评价指标1、均方误差MSE预测值与真实值差的平方均值。重视大误差惩罚严重错误。2、平均绝对误差MAE预测值与真实值差的绝对值均值。追求稳健避免异常值影响。3、R²决定系数衡量模型整体对目标变量的解释能力越接近 1 越好。分类任务常用评价指标1、准确率Accuracy正确预测样本占比。2、精确率Precision预测为正例的样本中实际为正例的比例。3、召回率Recall实际为正例的样本中被正确预测的比例。4、F1分数精确率和召回率的调和平均。5、ROC曲线与AUCROC 曲线以 FPR 为横轴、TPR 为纵轴AUC 为曲线下面积衡量模型区分正负类的能力。全面评估模型整体排序能力对类别比例不敏感适合评估和比较模型本身性能。6、AUC-PR曲线描述不同阈值下精确率和召回率的曲线特别适用于高度不平衡的数据异常检测此时 AUC-PR 曲线比 ROC 曲线更具参考性。