首页 游戏 软件 资讯 排行榜 专题
首页
AI
“机器学习”系列之Logistic Regression (逻辑回归)

“机器学习”系列之Logistic Regression (逻辑回归)

热心网友
47
转载
2025-07-24
本文介绍逻辑回归,这是一种分类算法。它通过Sigmoid函数将线性回归结果映射到[0,1],以概率形式分类。损失函数为对数似然函数,用随机梯度下降或牛顿法优化。其优势在于输出概率、可解释性强等,应用于CTR预估等场景。还展示了自定义函数及调用sklearn的实现代码与结果。

“机器学习”系列之logistic regression (逻辑回归) - 游乐网

“机器学习”系列之Logistic Regression (逻辑回归)

0 概念

逻辑回归是用来做分类算法的,大家都熟悉线性回归,一般形式是Y=aX+b,y的取值范围是[-∞, +∞],有这么多取值,怎么进行分类呢?不用担心,伟大的数学家已经为我们找到了一个方法。也就是把Y的结果带入一个非线性变换的Sigmoid函数中,即可得到[0,1]之间取值范围的数S,S可以把它看成是一个概率值,如果我们设置概率阈值为0.5,那么S大于0.5可以看成是正样本,小于0.5看成是负样本,就可以进行分类了。

1 Sigmoid激活函数

sigmoid函数是一个s形曲线,就像是阶跃函数的温和版,阶跃函数在0和1之间是突然的起跳,而sigmoid有个平滑的过渡。如下代码块运行图从图形上看,sigmoid曲线就像是被掰弯捋平后的线性回归直线,将取值范围(−∞,+∞)映射到(0,1) 之间,更适宜表示预测的概率,即事件发生的“可能性” 。In [5]
import numpy as npimport matplotlib.pyplot as pltx = np.arange(-5.0 , 5.0 , 0.02)y = 1 / (1 + np.exp(-x))plt.xlabel('x')plt.ylabel('y = Sigmoid(x)')plt.title('Sigmoid')plt.plot(x , y)plt.show()
登录后复制        
登录后复制登录后复制登录后复制                

2 损失函数

逻辑回归的损失函数是 log loss,即对数似然函数,如下

“机器学习”系列之Logistic Regression (逻辑回归) - 游乐网        

公式中的 y=1 表示的是真实值为1时用第一个公式,真实 y=0 用第二个公式计算损失。当真实样本为1是,但h=0概率,那么log0=∞,这就对模型最大的惩罚力度;当h=1时,那么log1=0,相当于没有惩罚,也就是没有损失,达到最优结果。所以数学家就想出了用log函数来表示损失函数。

3 优化

3.1 随机梯度下降

随机梯度下降J(w) 对 w 的一阶导数来找下降方向,并且以迭代的方式来更新参数每次更新参数后,可以通过比较阈值或者到达最大迭代次数来停止迭代。

3.2 牛顿法

牛顿法的基本思路是,在现有极小点估计值的附近对 f(x) 做二阶泰勒展开,进而找到极小点的下一个估计值。

4 优势

LR能以概率的形式输出结果,而非只是0,1判定。LR的可解释性强,可控度高。训练快,feature engineering之后效果赞。因为结果是概率,可以做ranking model。

5 应用

CTR预估/推荐系统的learning to rank/各种分类场景。某搜索引擎厂的广告CTR预估基线版是LR。某电商搜索排序/广告CTR预估基线版是LR。某电商的购物搭配推荐用了大量LR。某现在一天广告赚1000w+的新闻app排序基线是LR。

6 自定义函数代码实现

In [1]
from math import expimport numpy as npimport pandas as pdimport matplotlib.pyplot as plt%matplotlib inlinefrom sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_split
登录后复制    

6.1 自定义数据

In [2]
# datadef create_data():    iris = load_iris()    df = pd.DataFrame(iris.data, columns=iris.feature_names)    df['label'] = iris.target    df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']    data = np.array(df.iloc[:100, [0,1,-1]])    # print(data)    return data[:,:2], data[:,-1]
登录后复制    In [3]
X, y = create_data()X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
登录后复制    In [8]
import math
登录后复制    

6.2 自定义逻辑回归函数

In [202]
class LogisticReressionClassifier:    def __init__(self, max_iter=200, learning_rate=0.02):        self.max_iter = max_iter        self.learning_rate = learning_rate        # sigmoid激活函数    def sigmoid(self, x):        return 1 / (1 + exp(-x))    def data_matrix(self, X):        data_mat = []        for d in X:            data_mat.append([1.0, *d])        return data_mat    def fit(self, X, y):        # label = np.mat(y)        data_mat = self.data_matrix(X) # m*n        self.weights = np.zeros((len(data_mat[0]),1), dtype=np.float32)        for iter_ in range(self.max_iter):            for i in range(len(X)):                result = self.sigmoid(np.dot(data_mat[i], self.weights))                error = y[i] - result                 self.weights += self.learning_rate * error * np.transpose([data_mat[i]])        print('LogisticRegression Model(learning_rate={},max_iter={})'.format(self.learning_rate, self.max_iter))    # def f(self, x):    #     return -(self.weights[0] + self.weights[1] * x) / self.weights[2]    def score(self, X_test, y_test):        right = 0        X_test = self.data_matrix(X_test)        for x, y in zip(X_test, y_test):            result = np.dot(x, self.weights)            if (result > 0 and y == 1) or (result < 0 and y == 0):                right += 1        return right / len(X_test)
登录后复制    

6.3 训练

In [203]
lr_clf = LogisticReressionClassifier()lr_clf.fit(X_train, y_train)
登录后复制        
LogisticRegression Model(learning_rate=0.02,max_iter=200)
登录后复制        

6.4 结果展示及可视化

In [204]
lr_clf.score(X_test, y_test)
登录后复制        
0.9666666666666667
登录后复制                In [205]
x_ponits = np.arange(4, 8)y_ = -(lr_clf.weights[1]*x_ponits + lr_clf.weights[0])/lr_clf.weights[2]plt.plot(x_ponits, y_)#lr_clf.show_graph()plt.scatter(X[:50,0],X[:50,1], label='0')plt.scatter(X[50:,0],X[50:,1], label='1')plt.legend()
登录后复制        
登录后复制                
登录后复制登录后复制登录后复制                

7 调用sklearn实现

sklearn.linear_model.LogisticRegression参数

solver参数决定了我们对逻辑回归损失函数的优化方法,有四种算法可以选择,分别是:

a) liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。b) lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。c) newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。d) sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。In [8]
from sklearn.linear_model import LogisticRegression
登录后复制    In [9]
clf = LogisticRegression(max_iter=200)
登录后复制    In [10]
clf.fit(X_train, y_train)
登录后复制        
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,                   intercept_scaling=1, l1_ratio=None, max_iter=200,                   multi_class='auto', n_jobs=None, penalty='l2',                   random_state=None, solver='lbfgs', tol=0.0001, verbose=0,                   warm_start=False)
登录后复制                In [11]
clf.score(X_test, y_test)
登录后复制        
1.0
登录后复制                In [12]
print(clf.coef_, clf.intercept_)
登录后复制        
[[ 2.69741404 -2.61019199]] [-6.44843344]
登录后复制        In [13]
x_ponits = np.arange(4, 8)y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]plt.plot(x_ponits, y_)plt.plot(X[:50, 0], X[:50, 1], 'bo', color='blue', label='0')plt.plot(X[50:, 0], X[50:, 1], 'bo', color='orange', label='1')plt.xlabel('sepal length')plt.ylabel('sepal width')plt.legend()
登录后复制        
登录后复制                
登录后复制登录后复制登录后复制                
来源:https://www.php.cn/faq/1425370.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

Solidus Ai Tech(AITECH)币是什么?怎么样?AITECH工作原理和代币经济学概述
web3.0
Solidus Ai Tech(AITECH)币是什么?怎么样?AITECH工作原理和代币经济学概述

Solidus AI 是什么 在AI与Web3加速融合的当下,一个名为Solidus AI的项目提出了自己的解决方案。它将自己定位为“Web3原生的AI HPC基础设施”,其蓝图相当清晰:以位于欧洲的环保高性能计算(HPC)数据中心为基石,向上构建一个计算与AI工具市场,并最终通过AITECH代币完

热心网友
04.03
Cardano(ADA)2026 年价格预测:Grok AI 分析与未来走势
web3.0
Cardano(ADA)2026 年价格预测:Grok AI 分析与未来走势

Cardano (ADA) 2026年价格预测:AI深度解析与增长路径 在瞬息万变的加密市场,人工智能分析正成为洞察未来趋势的关键工具。近期,由Grok AI模型发布的Cardano(ADA)2026年价格预测引发了广泛关注,其大胆展望ADA或有望触及两位数美元价格。这不仅彰显了AI数据分析的潜力,

热心网友
04.02
京东发起全民养虾计划 整合AI硬件与服务降低门槛
科技数码
京东发起全民养虾计划 整合AI硬件与服务降低门槛

京东“全民养虾计划”:开启AI助手体验新纪元 科技领域近期迎来一场别开生面的创新活动:京东正式推出“全民养虾计划”。表面看,它与美食相关,实际上是一场针对AI智能体技术普及的宏大实验。该计划通过“购买AI硬件、赠送专业安装服务与趣味小龙虾”的组合策略,为当前热门的开源AI智能体——OpenClaw,

热心网友
04.02
一波资本从以太坊(ETH)流出,进入TRON [TRX]
web3.0
一波资本从以太坊(ETH)流出,进入TRON [TRX]

以太坊资本外溢:TRON为何成为15 2亿美元稳定币新枢纽? 区块链世界的地壳运动从未停止,资本的流向便是其中最敏锐的震感。近期,一场规模惊人的资本迁徙正在上演:大量资金正从以太坊网络流出,涌入TRON生态。这不仅是简单的资产转移,更是一次深刻的行业风向标,揭示了用户对交易成本、网络效率与应用场景的

热心网友
04.02
自研第一个SKILL-openclaw入门
AI
自研第一个SKILL-openclaw入门

自研第一个SKILL:手把手教你开发openclaw自定义技能 当你成功构建好openclaw之后,如何让它真正“智能”起来?关键在于为其开发SKILL——这些技能是openclaw的“内功心法”,决定了它能帮你做什么、做多好。 本文将带你亲自动手,从零开始开发你的第一个openclaw自定义技能,

热心网友
04.02

最新APP

火柴人传奇
火柴人传奇
动作冒险 04-01
街球艺术
街球艺术
体育竞技 04-01
飞行员模拟
飞行员模拟
休闲益智 04-01
史莱姆农场
史莱姆农场
休闲益智 04-01
绝区零
绝区零
角色扮演 04-01

热门推荐

《三国:天下归心》香香连击队成员推荐
游戏攻略
《三国:天下归心》香香连击队成员推荐

《三国:天下归心》香香连击队全面解析:后期最强阵容搭配攻略 在策略手游《三国:天下归心》中,如何打造一支能够主宰战局的后期王牌队伍?本篇将为您深入剖析以孙尚香为核心的“香香连击队”终极搭配方案。该阵容由孙尚香、蔡文姬、貂蝉三位核心武将构成,其独特之处在于通过蔡文姬与貂蝉的完美辅助联动,极大化触发孙尚

热心网友
04.03
爱奇艺极速版如何查看营业执照
手机教程
爱奇艺极速版如何查看营业执照

爱奇艺极速版营业执照信息查询全攻略 在使用爱奇艺极速版应用时,无论是出于消费保障、商务合作考量,还是日常维权需要,核实其背后的实际运营主体与工商信息都是十分必要的环节。查询其营业执照信息有着明确且可靠的操作路径,可以帮助用户清晰了解服务提供方的合法资质。 官方权威途径:国家企业信用信息公示系统查询

热心网友
04.03
红色沙漠堕落之神任务闪电柱解谜答案一览
游戏攻略
红色沙漠堕落之神任务闪电柱解谜答案一览

在《红色沙漠》的“堕落之神”任务中,古代闪电装置的解谜环节是挑战巨化泰坦BOSS前的核心难点。整个电塔谜题由五座塔构成,其核心在于正确的激活与连接顺序。为了让各位冒险家能快速通关,本篇攻略将详细解析闪电塔的正确操作步骤。咱们这就开始,一步步点亮所有的电塔。 《红色沙漠》堕落之神任务:闪电塔解谜全流程

热心网友
04.03
洛克王国世界炽心勇狮图鉴
游戏攻略
洛克王国世界炽心勇狮图鉴

洛克王国炽心勇狮全面解析:技能、获得方法与实战指南 在《洛克王国》的众多宠物中,炽心勇狮以其传奇守护者的身份和强大的火焰力量而备受瞩目。作为火系宠物的代表之一,它的核心特征在于那颗永不熄灭的火焰心脏,这不仅是它力量的象征,更是其所有强大技能的能量源泉。由炽心勇狮喷发出的烈焰,拥有随着战斗进程而不断增

热心网友
04.03
洛克王国世界公平鸽图鉴
游戏攻略
洛克王国世界公平鸽图鉴

洛克王国公平鸽图鉴详解:裁判型宠物的属性技能与获取攻略 在洛克王国的众多宠物当中,公平鸽以其鲜明的裁判官形象与独特的对战定位,成为了许多玩家关注的对象。这只严格恪守自身准则的宠物,完美诠释了何为“公正严明”。它的行事守则堪称一套独特的生存哲学:执着于介入每一场争执,绝不因任何原因延误“出庭”,坚持做

热心网友
04.03