Python机器学习中七种损失函数的科学指南
Sigmoid函数的范围是[0,1],使其适合于计算概率。 ![]() 尝试自己输入一下代码,然再后查看下面的update_weight函数的代码。 def update_weights_BCE(m1, m2, b, X1, X2, Y, learning_rate): m1_deriv = 0 m2_deriv = 0 b_deriv = 0 N = len(X1) for i in range(N): s = 1 / (1 / (1 + math.exp(-m1*X1[i] - m2*X2[i] - b))) # Calculate partial derivatives m1_deriv += -X1[i] * (s - Y[i]) m2_deriv += -X2[i] * (s - Y[i]) b_deriv += -(s - Y[i]) # We subtract because the derivatives point in direction of steepest ascent m1 -= (m1_deriv / float(N)) * learning_rate m2 -= (m2_deriv / float(N)) * learning_rate b -= (b_deriv / float(N)) * learning_rate return m1, m2, b 关于使用权重更新规则进行1000次迭代(具有不同的alpha值),我得到以下图表: ![]() 2.铰链损失(Hinge Loss) 铰链损失主要用于支持标签为-1和1的支持向量机(SVM)分类器。因此,请确保将数据集中“Malignant”类的标签从0更改为-1。 铰链损失不仅会惩罚错误的预测,还会惩罚不确定的正确预测。 输入输出对(x,y)的铰链损失为: def update_weights_Hinge(m1, m2, b, X1, X2, Y, learning_rate): m1_deriv = 0 m2_deriv = 0 b_deriv = 0 N = len(X1) for i in range(N): # Calculate partial derivatives if Y[i]*(m1*X1[i] + m2*X2[i] + b) <= 1: m1_deriv += -X1[i] * Y[i] m2_deriv += -X2[i] * Y[i] b_deriv += -Y[i] # else derivatives are zero # We subtract because the derivatives point in direction of steepest ascent m1 -= (m1_deriv / float(N)) * learning_rate m2 -= (m2_deriv / float(N)) * learning_rate b -= (b_deriv / float(N)) * learning_rate return m1, m2, b 在使用三个不同的alpha值对2000次迭代运行update函数之后,我们获得了以下图: ![]() 铰链损失简化了SVM的数学运算,同时使损失最大化(与对数损失相比)。当我们要做出实时决策而并不是高度关注准确性时,就可以使用它。 多类分类损失函数 现在电子邮件不只是被归类为垃圾邮件或非垃圾邮件(现在已经不是90年代了!)。它们可以被分为其他各种类别-工作,家庭,社交,晋升等。在现在邮件分类是一个多类别分类用例。 我们将使用鸢尾花数据集来了解其余两个损失函数。我们将使用2个特征X1(萼片长度)和特征X2(花瓣宽度)来预测鸢尾花(Setosa,Versicolor或Virginica)的类别(Y) 我们的任务是使用神经网络模型和Keras中内置的Adam优化器来实现分类。这是因为随着参数数量的增加,数学以及代码将变得难以理解。 这是我们数据的散点图: ![]() 1.多分类交叉熵损失 多分类交叉熵损失是二分类交叉熵损失的概括。输入向量Xi和相应的单编码目标向量Yi的损耗为: 我们使用softmax函数来找到概率p_ij: (编辑:惠州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |