# ML-Andrew NG 学习笔记(3) Classification & Logistic Regression **Published by:** [jasonyang](https://paragraph.com/@jasonyang/) **Published on:** 2023-06-26 **URL:** https://paragraph.com/@jasonyang/ml-andrew-ng-3-classification-logistic-regression ## Content 如前文提到的例子,对肿瘤大小进行分类,以此来预测是良性或是恶性,当数据比较集中时,使用线性回归也许会奏效,但当出现某些数据时,表现会变得很不好。 当引入最右侧方框内的数据点后,拟合的直线及阈值受到的影响,误差都变得非常大 对于这种分类,不需求预测出本身大小的问题(如期望输出0或1这样的值),考虑采用逻辑回归(Logistic Regression) 现在很好地拟合了数据集 在逻辑回归中,有如下几种常用的处理方法: Sigmoid Function:将实数映射到区间 (0,1) 上。在逻辑回归中,我们通常使用 Sigmoid 函数作为激活函数,将线性回归的结果转换为一个概率值,从而进行分类。 Softmax Functon: 将多个线性输出映射为一个概率分布。在多分类问题中,Softmax函数通常被用来将线性输出转化为概率分布,可以对每个类别进行概率预测。 ReLU Function (Rectified Linear Unit):在神经网络中广泛应用。ReLU函数在输入大于0时输出输入值本身,否则输出0。这种激活函数的好处是计算速度快且具有稀疏性,因此可以有效地减少过拟合现象。 Sigmoid Function: a.定义 和前文的曲线很像,但是sigmoid function是一种数学函数,而逻辑回归是一种算法 ** 表达式**: 如何构建逻辑回归模型? 这里拿线性回归的式子举例 g(x)是指sigmoid function 由于e作为底数,且其指数带有负号,同时整体处于分母,输入的z值处理后加上1,很容易使*f(x)*的值趋近于0或者1;又因为始终处于0~1之间,可以将其理解为输出类为1的概率 z=wx+b只是便于说明建立的一个函数,w和b参数不断进行调整,使得能更好预测 一个推导:假如取0.5为阈值,最终可以得到 利用 w·x+b 是否大于0来判断输出为0或1 b.决策边界(Decision boundary) 继续拿线性的 z=w·x+b 举例,其对应的决策边界是当z=0的直线,即 w·x+b=0 不过线性并不存在决策边界,不过决策边界本身可以分线性与非线性 举例1(线性): 有着两个特征w_1, w_2 假设w_1, w_2, b分别为1,1,-3,则其对应的决策边界为 z=x_1+x_2-3=0, 即x_1 + x_2 = 3 例子1 举例2(非线性): 当变量w_1和w_2并不呈现简单的线性关系时,可能如这个例子这样,需要用到多项式 假设w_1, w_2, b分别为1,1,-1,则其对应的决策边界为 z=x_1^2+x_2^2-1=0, 即x_1^2+x_2^2=1 例子2 c.逻辑回归的成本函数 线性回归时的成本函数是这样的: 1/2在外面 而对于逻辑回归 1/2在里面 如果仍然使用1/2在外面的成本函数,梯度下降呈现的图像将会是: 不好找到全局最优点 线性回归时会生成标准的碗状,而逻辑回归不会 现在将求和符号内的部分称作 单个训练样本的成本,用L表示 交叉熵或对数损失(the cross entropy or the log loss) 以上两种情况对应的图像如下,但我们输入的值始终位于0-1,因此只需考虑图像0-1之间的部分 拆开看便是下图 x轴是sigmoid的输出,非常严格地只能存在0或1 如果y = 1,真实标签的确为1。如果标签的预测值也为1,则成本= 0。但是当hθ(x)偏离1并接近0时,成本函数呈指数增长并趋于无穷大 如果y = 0,则真实标签为0。如果标签的预测值也为0,则Cost = 0。但是当hθ(x)偏离0并接近1时,成本函数呈指数增长并趋于无穷大 通过这样的处理,当预测正确时,成本为0;而预测错误,惩罚极大,这使得模型不断向最佳处逼近,因此总体的将会呈现凸函数的图像 有了这样的处理,loss function可以这样改写: y取值为0或1等号右边均只会存在一项,是前文L的整合 现在我们就可以得到逻辑回归的成本函数了: 代码实现: def compute_cost_logistic(X, y, w, b): """ Computes cost Args: X (ndarray (m,n)): Data, m examples with n features y (ndarray (m,)) : target values w (ndarray (n,)) : model parameters b (scalar) : model parameter Returns: cost (scalar): cost """ m = X.shape[0] cost = 0.0 for i in range(m): z_i = np.dot(X[i],w) + b f_wb_i = sigmoid(z_i) cost += -y[i]*np.log(f_wb_i) - (1-y[i])*np.log(1-f_wb_i) cost = cost / m return cost 参考来源: https://www.geeksforgeeks.org/ml-cost-function-in-logistic-regression/ ## Publication Information - [jasonyang](https://paragraph.com/@jasonyang/): Publication homepage - [All Posts](https://paragraph.com/@jasonyang/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@jasonyang): Subscribe to updates