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

本文介绍逻辑回归,这是一种分类算法。它通过Sigmoid函数将线性回归结果映射到[0,1],以概率形式分类。损失函数为对数似然函数,用随机梯度下降或牛顿法优化。其优势在于输出概率、可解释性强等,应用于CTR预估等场景。还展示了自定义函数及调用sklearn的实现代码与结果。
“机器学习”系列之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,即对数似然函数,如下
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()登录后复制
登录后复制
登录后复制登录后复制登录后复制
免责声明
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
爱彼迎CEO切斯基:ChatGPT不成熟,阿里通义千问高效又实惠
爱彼迎首席执行官布莱恩·切斯基近日在接受媒体采访时透露,公司目前尚未将应用程序与OpenAI的ChatGPT进行技术整合。他指出,尽管ChatGPT在生成式人工智能领域表现突出,但其现有连接工具的成
荣耀AI投入超百亿:升级HONOR AI Connect平台 共建智慧生态
在荣耀AI终端生态大会上,荣耀董事长吴晖提出“得AI者得天下,得终端者得未来”的论断,强调人工智能技术正以颠覆性力量重构终端产业生态。他指出,智能体将取代传统交互方式,成为连接人与数字世界的核心入口
字节跳动Seed团队发布Seed3D+1.0:单图生成高质量3D模型
字节跳动Seed团队近日宣布,正式推出其最新研发的3D生成大模型——Seed3D 1 0。这款模型具备从单张图像直接生成高质量仿真级3D模型的端到端能力,为3D内容创作领域带来了突破性进展。在性能对
Meta优化AI部门架构,裁员600人紧追行业竞争
meta公司近期对其人工智能部门展开大规模调整,宣布裁减约600名员工。此次裁员由首席人工智能官亚历山大·王通过内部备忘录披露,旨在精简组织架构、提升运营效率。被裁岗位主要涉及AI基础设施团队、基础
阿里夸克上线对话助手,Qwen模型融合搜索能力提升AI体验
阿里巴巴旗下智能应用夸克近日正式推出对话助手功能,该产品基于阿里自研的Qwen最新闭源大模型构建,成为国内首个将搜索服务与智能对话深度整合的AI工具。这一创新被视为夸克 "C计划 "战略的重要突破,此前
相关攻略
热门教程
更多- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程



















