机器学习中常见的损失函数及其应用场景

博客主要介绍了分类和回归问题中的损失函数。分类问题以二分类为例,介绍了0 - 1、Hinge、Logistic等损失函数;回归问题中,介绍了平方、绝对、Huber等损失函数,还说明了各损失函数的特点,如是否光滑、对异常点的敏感度等。
一、对于分类问题

以二分类为例,y∈{+1,−1}y \in \{+1,-1\}y{+1,1},损失函数通常表示为 yf(x)yf(x)yf(x) 的递减函数。我们希望 sign(f(xi,θ))=yisign(f(x_i, \theta))=y_isign(f(xi,θ))=yi

  • 0-1损失函数
    L0−1(f,y)=1fy≤0L_{0-1}(f, y)=1_{fy\le0}L01(f,y)=1fy0 0-1损失函数可以直观的刻画分类的错误率,但是因为其非凸,非光滑的特点,使得算法很难对其进行直接优化

  • Hinge损失函数(SVM)
    Lhinge(f,y)=max⁡{0,1−fy}L_{hinge}(f, y)=\max\{0,1-fy\}Lhinge(f,y)=max{0,1fy} Hinge损失函数是0-1损失函数的一个代理损失函数,也是其紧上界,当 fy≥0fy\ge0fy0 时,不对模型做惩罚。可以看到,hinge损失函数在 fy=1fy=1fy=1 处不可导,因此不能用梯度下降法对其优化,只能用次梯度下降法。

在这里插入图片描述

  • Logistic损失函数
    Llogistic(f,y)=log⁡2(1+exp(−fy))L_{logistic}(f,y)=\log_{2}(1+exp(-fy))Llogistic(f,y)=log2(1+exp(fy))Logistic损失函数是0-1损失函数的另一个代理损失函数,它也是0-1损失函数的凸上界,且该函数处处光滑。但是该损失函数对所有样本点都惩罚,因此对异常值更加敏感。当预测值 f∈[−1,1]f \in[-1,1]f[1,1]时,另一个常用的代理损失函数是交叉熵损失函数

  • Cross-Entropy损失函数
    Lcross entropy(f,y)=−log⁡2(1+fy2)L_{cross\ entropy}(f,y)=-\log_{2}(\frac{1+fy}{2})Lcross entropy(f,y)=log2(21+fy) 交叉熵损失函数也是0-1损失函数的光滑凸上界

  • Exponential损失函数(AdaBoost)
    Lexponential(f,y)=e−fyL_{exponential}(f,y)=e^{-fy}Lexponential(f,y)=efy指数损失函数是AdaBoost里使用的损失函数,同样地,它对异常点较为敏感,鲁棒性不够

  • Log损失函数(LR)
    Llogloss(y,p(y∣x))=−log⁡(p(y∣x))L_{logloss}(y,p(y|x))=-\log(p(y|x))Llogloss(y,p(yx))=log(p(yx)) 逻辑回归 p(y∣x)p(y|x)p(yx) 的表达式如下:
    P(Y=y(i)∣x(i),θ)={hθ(x(i))=11+e−θTx,y(i)=11−hθ(x(i))=e−θTx1+e−θTx, y(i)=0, P(Y=y^{(i)}|x^{(i)},\theta)= \left\{ \begin{array}{lr} h_{\theta}(x^{(i)})=\frac{1}{1+e^{-\theta ^{T}x}}, y^{(i)}=1& \\ \\ 1-h_{\theta}(x^{(i)})=\frac{e^{-\theta ^{T}x}}{1+e^{-\theta ^{T}x}}, \ y^{(i)}=0, & \end{array} \right. P(Y=y(i)x(i),θ)=hθ(x(i))=1+eθTx1,y(i)=11hθ(x(i))=1+eθTxeθTx, y(i)=0, 将上面两个式子合并,可得第 iii 个样本被正确预测的概率
    P(Y=y(i)∣x(i),θ)=(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i)P(Y=y^{(i)}|x^{(i)},\theta)=(h_{\theta}(x^{(i)}))^{y^{(i)}}(1-h_{\theta}(x^{(i)}))^{1-y^{(i)}}P(Y=y(i)x(i),θ)=(hθ(x(i)))y(i)(1hθ(x(i)))1y(i)对于所有的样本,由于生成过程是独立的,因此
    P(Y∣X,θ)=Πi=1N(hθ(x(i)))y(i)(1−hθ(x(i)))1−y(i)P(Y|X,\theta)=\Pi_{i=1}^{N}(h_{\theta}(x^{(i)}))^{y^{(i)}}(1-h_{\theta}(x^{(i)}))^{1-y^{(i)}}P(YX,θ)=Πi=1N(hθ(x(i)))y(i)(1hθ(x(i)))1y(i)最终的损失函数如下:
    J(θ)=−∑i=1N[y(i)log⁡(hθ(x(i)))+(1−y(i))log⁡(1−hθ(x(i)))]\mathcal{J}(\theta)=-\sum_{i=1}^{N}[y^{(i)}\log(h_{\theta}(x^{(i)}))+(1-y^{(i)})\log(1-h_{\theta}(x^{(i)}))]J(θ)=i=1N[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]

在这里插入图片描述

二、回归问题

对于回归问题,YYY = R\mathbb{R}R,我们希望 f(x(i),θ)f(x^{(i)},\theta)f(x(i),θ) = y(i)y^{(i)}y(i)

  • 平方损失函数(最小二乘法)
    Lsquare(f,y)=(f−y)2L_{square}(f,y)=(f-y)^2Lsquare(f,y)=(fy)2平方损失函数是光滑的,可以用梯度下降法求解,但是,当预测值和真实值差异较大时,它的惩罚力度较大,因此对异常点较为敏感。

  • 绝对损失函数
    Labsolute(f,y)=∣f−y∣L_{absolute}(f,y)=|f-y|Labsolute(f,y)=fy绝对损失函数对异常点���那么敏感,其鲁棒性比平方损失更强一些,但是它在fff = yyy 处不可导.

  • Huber损失函数
    LHuber(f,y)={12(f−y)2,∣f−y∣≤δδ∣f−y∣−12δ2, ∣f−y∣>δ, L_{Huber}(f,y)= \left\{ \begin{array}{lr} \frac{1}{2}(f-y)^2, |f-y|\le\delta & \\ \\ \delta|f-y|-\frac{1}{2}\delta^{2}, \ |f-y|>\delta, & \end{array} \right. LHuber(f,y)=21(fy)2,fyδδfy21δ2, fy>δ,Huber损失函数在 ∣f−y∣|f-y|fy 较小时为平方损失,在 ∣f−y∣|f-y|fy 较大时为线性损失,且处处可导,对异常点鲁棒性较好。

  • Log-cosh损失函数
    Llog−cosh(f,y)=log⁡(cosh⁡(f−y))L_{log-cosh}(f,y)=\log(\cosh(f-y))Llogcosh(f,y)=log(cosh(fy))其中 cosh⁡(x)=(ex+e−x)/2\cosh(x)=(e^{x}+e^{-x})/2cosh(x)=(ex+ex)/2,log-cosh损失函数比均方损失函数更加光滑,具有huber损失函数的所有优点,且二阶可导。因此可以使用牛顿法来优化计算,但是在误差很大情况下,一阶梯度和Hessian会变成定值,导致牛顿法失效。

  • 分位数损失函数
    Lγ(f,y)=∑i: yi&lt;fi(1−γ)∣yi−fi∣+∑i: yi≥fiγ∣yi−fi∣L_{\gamma}(f,y)=\sum_{i:\ y_i&lt;f_i}(1-\gamma)|y_i-f_i|+\sum_{i:\ y_i\ge f_i}\gamma|y_i-f_i|Lγ(f,y)=i: yi<fi(1γ)yifi+i: yifiγyifi预测的是目标的取值范围而不是值。γ\gammaγ 是所需的分位数,其值介于0和1之间,γ\gammaγ 等于0.5时,相当于MAE。
    设置多个 γ\gammaγ 值,得到多个预测模型,然后绘制成图表,即可知道预测范围及对应概率(两个 γ\gammaγ 值相减)

在这里插入图片描述

### 常见机器学习算法及其应用场景 机器学习算法广泛应用于数据科学、人工智能、自然语言处理、图像识别等领域。根据任务类型,机器学习算法通常分为监督学习、无监督学习、半监督学习和强化学习。以下是一些主流的机器学习算法及其原理与应用场景。 #### 1. K 近邻算法(K-Nearest Neighbors, KNN) KNN 是一种简单但有效的监督学习算法,适用于分类和回归任务。其核心思想是基于训练集中与目标样本最接近的 K 个邻居的标签进行预测。 - **原理**:计算测试样本与训练样本之间的距离,选取距离最近的 K 个训练样本,统计这些样本的类别或数值,作为预测结果。 - **特点**:无需训练阶段,但预测阶段计算复杂度高;对异常值敏感。 - **应用场景**:图像分类、推荐系统、文本分类等[^4]。 #### 2. 朴素贝叶斯(Naive Bayes) 朴素贝叶斯是一种基于贝叶斯定理并假设特征之间相互独立的概率分类算法。 - **原理**:通过计算先验概率和条件概率,利用贝叶斯公式进行分类决策。 - **特点**:训练效率高,适合高维数据;但对特征独立性假设较强。 - **应用场景**:垃圾邮件识别、情感分析、文本分类等[^4]。 #### 3. 决策树(Decision Tree) 决策树是一种树形结构模型,通过特征划分数据集,形成一系列决策路径。 - **原理**:递归选择最优特征划分数据,构建树形结构,最终叶子节点代表预测结果。 - **特点**:可解释性强,支持分类和回归任务;容易过拟合。 - **应用场景**:客户流失预测、信用评分、医疗诊断等[^2]。 #### 4. 支持向量机(Support Vector Machine, SVM) SVM 是一种强大的分类算法,通过寻找最优超平面最大化类别之间的边界来实现分类。 - **原理**:将数据映射到高维空间,寻找一个最优超平面使得不同类别的数据点尽可能分开。 - **特点**:在高维空间表现优异,适合小样本数据集;参数调优复杂。 - **应用场景**:生物信息学、图像分类、手写识别等[^2]。 #### 5. 逻辑回归(Logistic Regression) 尽管名称中包含“回归”,但逻辑回归是一种广泛使用的二分类模型。 - **原理**:使用 Sigmoid 函数将线性回归输出映射到 [0, 1] 区间,表示样本属于某一类别的概率。 - **特点**:模型简单、可解释性强;适合线性可分问题。 - **应用场景**:广告点击率预测、疾病风险评估、信用评分等[^2]。 #### 6. t-SNE(t-Distributed Stochastic Neighbor Embedding) t-SNE 是一种非线性降维算法,常用于高维数据的可视化。 - **原理**:通过保持样本之间的局部相似性,在低维空间中重构数据分布。 - **特点**:适用于非线性关系;计算复杂度高,不适合大规模数据。 - **应用场景**:图像分析、数据可视化、特征提取等[^3]。 #### 7. 随机森林(Random Forest) 随机森林是一种集成学习方法,通过构建多个决策树并进行投票来提升模型性能。 - **原理**:通过自助采样(Bootstrap)和随机特征选择构建多棵决策树,最终结果由所有树的预测结果投票决定。 - **特点**:抗过拟合能力强,适合复杂数据集;计算资源消耗较大。 - **应用场景**:金融风控、医学图像分析、推荐系统等。 #### 8. 神经网络与反向传播算法(Neural Networks & Backpropagation) 神经网络是一种模拟人脑结构的模型,广泛应用于深度学习领域。反向传播算法是训练神经网络的核心方法,用于计算损失函数对网络参数的梯度。 - **原理**:通过前向传播计算输出,再通过反向传播调整权重,最小化损失函数- **特点**:表达能力强,适合非线性问题;训练过程复杂,依赖大量数据和计算资源。 - **应用场景**:图像识别、语音识别、自然语言处理等[^1]。 #### 9. 聚类算法(Clustering) 聚类是一种无监督学习方法,用于将相似的数据点分组。 - **常见算法**: - K-Means:基于距离的聚类方法,适用于球形分布数据。 - DBSCAN:基于密度的聚类方法,适合发现任意形状的簇。 - **应用场景**:用户分群、图像分割、异常检测等。 #### 10. 主成分分析(Principal Component Analysis, PCA) PCA 是一种线性降维算法,通过投影到低维空间保留数据的主要方差信息。 - **原理**:计算数据的协方差矩阵,提取特征向量作为主成分。 - **特点**:计算效率高,适合线性结构数据;可能丢失非线性信息。 - **应用场景**:数据压缩、特征提取、可视化预处理等。 --- ### 示例代码:KNN 分类器(Python) ```python from sklearn.neighbors import KNeighborsClassifier from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 加载数据 iris = load_iris() X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3) # 构建模型 knn = KNeighborsClassifier(n_neighbors=3) knn.fit(X_train, y_train) # 预测与评估 y_pred = knn.predict(X_test) print("Accuracy:", accuracy_score(y_test, y_pred)) ``` --- ###
评论
添加红包
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值