【成长笔记】逻辑回归与正则化

本文介绍了逻辑回归作为二元分类算法的原理,通过sigmoid函数将连续值映射到(0,1)区间。讨论了决策边界的概念,并通过举例展示了如何寻找最优决策边界。同时,文章探讨了过拟合问题,提出了正则化作为防止过拟合的手段,以及正则化的优点和在代价函数中的应用。" 136347715,12723403,Spider-flow 0.4.3 代码注入漏洞分析 (CVE-2024-0195),"['安全', '网络', '漏洞分析', '代码注入', 'Spring Boot']

ng的第三周课程讲的内容十分丰富,可花了我不少时间来消化。嗯,开局先抛出一个问题哈,譬如,如何根据已有的邮件数据(贴上了垃圾邮件与非垃圾邮件的标记),来判断未来的一封邮件是否是垃圾邮件呢? 

以上的问题本质上是一个分类问题,而且是一个二元分类,通俗讲就是非此即彼。假设我们标记垃圾邮件为0,标记非垃圾邮件为1,邮件的一些特征我们也进行数值化,利用我们之前了解的特征缩放等将数据整理。那么,我们需要的是一个适合的算法,对原始数据训练出一个模型。这样,新的邮件数据,我们带入这个模型,根据返回的值,比如1,我们就可以判断其为非垃圾邮件了。

所以啊,该用什么方法来对数据们进行分类呢?在我们的日常中,我们是如何对事物进行分类的呢?应该大体是这样子的,了解了事物之后,发现他们之间的不同点,根据他们的不同点来分类不同事物。

那么,开动脑洞,在数学上,我们是不是可以想象两类数据泾渭分明,会存在这么一条线将他们分割开来,一边是“0”,一边是“1”,这样子,不就分开了吗?

哈哈,脑洞大开,逻辑并不严谨,闲话不多说,让我们带着问题去思考吧,Let's go!

---------------我是萌萌的分割线------------------

Logistic Regression(逻辑回归)是一个受到广泛传播与应用的分类算法。这个算法的表达式是这样子的:

g(x) = \frac{1}{1+e^{-x}}

这个函数表达式被称为logistic function,也经常被称为sigmoid function。当 x>0 , 则0<e^{-x}<1 ,那么 0.5<g(x) = \frac{1}{1+e^{-x}}<1 ;当 x<0 , 则e^{-x}>1 ,那么 b0<g(x) = \frac{1}{1+e^{-x}}<0.5 ;当 x\rightarrow\infty , g(x)\rightarrow1 ;当 x\rightarrow-\infty , g(x)\rightarrow0 。嗯,这个函数长这个样子的:

发现了不,这个函数的值域为(0,1),而且分布很均匀,任何一个数据值投入到函数中的x中,都可以映射到(0,1),那么,我们可以将他们的值分为两类,当y>0.5时(即x>0),就属于“1”,当y<0.5时(即x<0),就属于“0”。

所以啊,结合之前我们学过的知识,对于二分类问题,我们可否利用逻辑回归对他们进行分类呢?

我们需要对原有的逻辑回归函数稍稍改造一下,如下哦:

g(\theta^{T}x) = \frac{1}{1+e^{-\theta^{T}x}}

此时,我们再令 

逻辑回归中,目标函数通常是最小化所有训练样本上的平均损失,即最小化经验风险。若有 $N$ 个训练样本,目标函数(成本函数)为 $J(w,b)=\frac{1}{N}\sum_{i=1}^{N} L(y^{(i)}, \hat{y}^{(i)})$,这里 $L(y^{(i)}, \hat{y}^{(i)})$ 是单个样本的损失函数,$y^{(i)}$ 是真实标签,$\hat{y}^{(i)}$ 是预测标签,$w$ 是权重,$b$ 是偏置 [^4]。 L1 正则化(Lasso)和 L2 正则化(权重衰减)是在上述目标函数基础上添加不同的惩罚项。L1 正则化的惩罚项是权重的绝对值之和($\lambda\sum|w|$),L2 正则化的惩罚项是权重的平方和($\lambda\sum w^2$),其中 $\lambda$ 是正则化系数,正则化项的系数 $\lambda$ 越大,正则化的强度越大,模型的权重越趋近于零,通常需通过交叉验证等方法确定最佳的正则化系数,且为了方便优化,正则化项一般会乘以一个调节因子(例如样本数量) [^1][^5]。 因此,添加 L1 正则化逻辑回归损失函数为:$J_{L1}(w,b)=\frac{1}{N}\sum_{i=1}^{N} L(y^{(i)}, \hat{y}^{(i)})+\lambda\sum|w|$;添加 L2 正则化逻辑回归损失函数为:$J_{L2}(w,b)=\frac{1}{N}\sum_{i=1}^{N} L(y^{(i)}, \hat{y}^{(i)})+\lambda\sum w^2$。 ### 相关代码示例 以下是使用 Python 和 `sklearn` 库实现带有 L1 和 L2 正则化逻辑回归示例: ```python from sklearn.linear_model import LogisticRegression from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split # 生成一些示例数据 X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_redundant=0, random_state=42) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # L1 正则化逻辑回归 logreg_l1 = LogisticRegression(penalty='l1', solver='liblinear', C=1.0) logreg_l1.fit(X_train, y_train) score_l1 = logreg_l1.score(X_test, y_test) print(f"L1 正则化逻辑回归测试集准确率: {score_l1}") # L2 正则化逻辑回归 logreg_l2 = LogisticRegression(penalty='l2', solver='liblinear', C=1.0) logreg_l2.fit(X_train, y_train) score_l2 = logreg_l2.score(X_test, y_test) print(f"L2 正则化逻辑回归测试集准确率: {score_l2}") ```
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值