逻辑回归

基本概念

1. 逻辑回归是经典的二分类模型

2. 逻辑回归的过程是面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型的好坏

3. 逻辑回归主要应用于研究某些事件发生的概率,本质是极大似然估计

4. 逻辑回归的代价函数是交叉熵,激活函数是Sigmoid

优点

1. 速度快,适合二分类问题

2. 简单易于理解,直接看到各个特征的权重

3. 能容易地更新模型吸收新的数据

缺点

对数据和场景的适应能力有局限性,不如决策树算法适应性那么强

代价函数是交叉熵而不是MSE

面试题解答6:逻辑斯蒂回归为什么使用交叉熵而不是MSE - 知乎最本质的原因:(KL散度与交叉熵的关系)首先我们要明白MSE和交叉熵衡量的到底是什么。 对于MSE而言,其公式为: \frac{1}{m}\sum_{i=1}^m(y_i - \hat{y}_i)^2\\ 也就是真实值 - 预测值的平方和的平均值,放在坐标…https://zhuanlan.zhihu.com/p/453411383?utm_source=wechat_session&utm_medium=social&utm_oi=1008803434115416064

为什么模型要使用 sigmoid 函数

1.广义模型推导所得
2.满足统计的最大熵模型
3.性质优秀,方便使用(Sigmoid函数是平滑的,而且任意阶可导,一阶二阶导数可以直接由函数值得到不用进行求导,这在实现中很实用

逻辑回归算法之Python实现

import numpy as npclass LogisticRegression:def __init__(self):"""初始化 Logistic Regression 模型"""self.coef = None  # 权重矩阵self.intercept = None  # 截距self._theta = None  # _theta[0]是intercept,_theta[1:]是coefdef sigmoid(self, x):"""sigmoid 函数:param x: 参数x:return: 取值y"""y = 1.0 / (1.0 + np.exp(-x))return ydef loss_func(self, theta, x_b, y):"""损失函数:param theta: 当前的权重和截距:param x_b: 修改过的数据集(第一列为全1):param y: 数据集标签:return:"""p_predict = self.sigmoid(x_b.dot(theta))try:return -np.sum(y * np.log(p_predict) + (1 - y) * np.log(1 - p_predict))except:return float('inf')def d_loss_func(self, theta, x_b, y):"""损失函数的导数:param theta: 当前的权重和截距:param x_b: 修改过的数据集(第一列为全1):param y: 数据集标签:return:"""out = self.sigmoid(x_b.dot(theta))  # 计算sigmoid函数的输出结果return x_b.T.dot(out - y) / len(x_b)def gradient_descent(self, x_b, y, initial_theta, eta, n_iters=1e4, epsilon=1e-8):"""梯度下降函数:param x_b: 修改过的数据集(第一列为全1):param y: 数据集标签:param initial_theta: 初始权重矩阵:param eta: 学习率:param n_iters: 最大迭代周期:param epsilon: 当两次训练损失函数下降小于此值是提前结束训练:return:"""theta = initial_thetai_iter = 0while i_iter < n_iters:gradient = self.d_loss_func(theta, x_b, y)last_theta = thetatheta = theta - eta * gradienti_iter += 1if abs(self.loss_func(theta, x_b, y) - self.loss_func(last_theta, x_b, y)) < epsilon:breakreturn thetadef fit(self, train_data, train_label, eta=0.01, n_iters=1e4):"""模型训练函数:param train_data: 训练数据集:param train_label: 训练数据标签:param eta: 学习率,默认为0.01:param n_iters: 最大迭代次数:return:"""assert train_data.shape[0] == train_label.shape[0], "训练数据集的长度需要和标签长度保持一致"x_b = np.hstack([np.ones((train_data.shape[0], 1)), train_data])  # 在原有数据集前加全1列initial_theta = np.zeros(x_b.shape[1])  # 初始化权重值self._theta = self.gradient_descent(x_b, train_label, initial_theta, eta, n_iters)  # 使用梯度下降训练数据self.intercept = self._theta[0]  # 得到截距self.coef = self._theta[1:]  # 得到权重矩阵return selfdef predict_proba(self, x_predict):"""得到预测的实际结果:param x_predict: 待预测值:return: 预测的实际结果"""x_b = np.hstack([np.ones((len(x_predict)), 1), x_predict])return self.sigmoid(x_b.dot(self._theta))def predict(self, x_predict):"""对数据进行分类:param x_predict: 待分类的数据集:return: 数据集分类"""proba = self.predict_proba(x_predict)# 由于sigmoid函数的输出值是在0-1的,因此将小于0.5的归为一类,将大于0.5的归为一类return np.array(proba > 0.5, dtype='int')

LR里每个样本点都要参与核计算,计算复杂度太高,故逻辑回归通常不用核函数。

逻辑回归是线性模型还是非线性模型?

逻辑回归是线性模型还是非线性模型?_一只工程狮的博客-CSDN博客_逻辑回归是线性还是非线性个人观点,现在都是把逻辑回归作为复合函数使用的,如下所示:z=g(x)z=g(x)z=g(x)f(z)=11+e−zf(z)=\frac{1}{1+{{e}^{-z}}}f(z)=1+e−z1​逻辑回归的原始形式f(z)f(z)f(z)是非线性的,决定这个复合函数是否是线性的,要看 g(x)g(x)g(x)的形式。 假设阈值为0.5,那么逻辑回归最终求得如下解:z≥0,即g(x)...https://blog.csdn.net/qq_40913465/article/details/103416677

线性回归

基本概念

1. 假设目标值(因变量)与特征值(自变量)之间线性相关(即满足一个多元一次方程,如:f(x)=w1x1+…+wnxn+b.)

2. 然后构建损失函数。

3. 最后通过令损失函数(均方误差)最小来确定参数。

这里称J(a,b)为损失函数,明显可以看出它是个二次函数,即凸函数(这里的凸函数对应中文教材的凹函数),所以有最小值。当J(a,b)取最小值的时候,f(x)和y的差异最小,然后我们可以通过J(a,b)取最小值来确定a和b的值。

求解方法

下面介绍三种方法来确定a和b的值:

1. 最小二乘法

既然损失函数J(a,b)是凸函数,那么分别关于a和b对J(a,b)求偏导,并令其为零解出a和b。

2.梯度下降法

梯度的本意是一个向量(矢量),表示某一函数(该函数一般是二元及以上的)在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。当函数是一元函数时,梯度就是导数。

梯度下降算法(Gradient Descent)的原理和实现步骤_GlassySky0816的博客-CSDN博客_梯度下降法原理和步骤梯度下降的目的绝大多数的机器学习模型都会有一个损失函数。比如常见的均方误差(Mean Squared Error)损失函数:损失函数用来衡量机器学习模型的精确度。一般来说,损失函数的值越小,模型的精确度就越高。如果要提高机器学习模型的精确度,就需要尽可能降低损失函数的值。而降低损失函数的值,我们一般采用梯度下降这个方法。所以,梯度下降的目的,就是为了最小化损失函数。...https://blog.csdn.net/qq_38784098/article/details/120934613?spm=1001.2014.3001.55023. 正规方程

机器学习算法——线性回归(超级详细且通俗)_一只认真的菜狗的博客-CSDN博客_机器学习算法线性回归通俗理解线性回归回归分析什么是回归分析呢?这是一个来自统计学的概念。回归分析是指一种预测性的建模技术,主要是研究自变量和因变量的关系。通常使用线/曲线来拟合数据点,然后研究如何使曲线到数据点的距离差异最小。例如,存在以下数据然后我们拟合一条曲线f(x):回归分析的目标就是要拟合一条曲线,让图中红色线段加起来的和最小。线性回归(简介)线性回归是回归分析的一种。假设目标值(因变量)与特征值(自变量)之间线性相关(即满足一个多元一次方程,如:f(x)=w1x1+…+wnxn+b.)。然后构https://blog.csdn.net/weixin_44697198/article/details/109405212?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.pc_relevant_default&utm_relevant_index=2三种方法的优缺点:

  • 梯度下降法是通用的,包括更为复杂的逻辑回归算法中也可以使用,但是对于较小的数据量来说它的速度并没有优势
  • 正规方程的速度往往更快,但是当数量级达到一定的时候,还是梯度下降法更快,因为正规方程中需要对矩阵求逆,而求逆的时间复杂的是n的3次方
  • 最小二乘法一般比较少用,虽然它的思想比较简单,在计算过程中需要对损失函数求导并令其为0,从而解出系数θ。但是对于计算机来说很难实现,所以一般不使用最小二乘法。

线性回归和逻辑回归的区别

  1. 线性回归适合连续型特征和标签的数据。逻辑回归适合离散型特征和标签的数据。

  2. 逻辑回归是逻辑函数里面套用回归函数。

  3. 线性回归重点是得出最佳拟合线。逻辑回归重点是得出决策面。

  4. 线性回归是通过决定系统R平方确定准确率。逻辑回归是通过正确率(概率值)决定模型是否准确。

CV面试知识点总结--机器学习相关推荐

  1. AI工程师面试知识点:机器学习算法类

    AI工程师面试知识点:机器学习算法类   (帮助你选择合适的机器学习算法 https://docs.microsoft.com/zh-cn/azure/machine-learning/stu ...

  2. 2020秋招CV面试知识点汇总

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 1.NMS https://blog.csdn.net/lanchunhui/article/ ...

  3. 机器学习算法工程师面试知识点汇总

    机器学习算法工程师面试知识点汇总 机器学习 梯度下降 k-means 1 × 1卷积核 模型 SVM Bagging & Boosting 随机森林 激活函数 Sigmod tanh ReLU ...

  4. CV 面试问题详解宝典—目标检测篇

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨那年当上博士前 来源丨AI约读社 编辑丨极市平台 导读 面试知识点总结 序言 目标检测篇面试知识 ...

  5. GitHub上AI岗位面试笔记(机器学习算法/深度学习/ NLP/计算机视觉)

    目录 机器学习 深度学习 自然语言处理与数学 算法题和笔试题 推荐阅读 工具 最近在GitHub上淘到一个很棒的AI算法面试笔记,特地分享给小伙伴们~ GitHub地址:https://github. ...

  6. CV面试,坐下直接开撸代码,当场给了offer

    同学们好,我是秋津.普通本科毕业三年,电子相关行业,报的[机器学习集训营 第七期]. 目前只能说是跨进CV的大门,离真正的CV算法工程师还有很长的路要走. 社招面试更看重的是项目经验,问的比较多的也是 ...

  7. AI工程师面试知识点:神经网络相关

    AI工程师面试知识点:神经网络相关 (http://www.asimovinstitute.org/neural-network-zoo) 

  8. AI工程师面试知识点:TensorFlow 框架

    AI工程师面试知识点:TensorFlow 框架

  9. Java 面试知识点解析(七)——Web篇

    前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...

最新文章

  1. linux shell wc 命令
  2. 服务器自动关机怎么查,怎样设置WIN7系统的自动关机和查询系统上次的关机时间?...
  3. Linux命令之文件处理
  4. 获取远程计算机动态ip,c# - 获取远程主机的IP地址
  5. C++ 类的定义、作用域及大小计算,限定访问符,this指针
  6. php mysql调用crontab_PHP中如何实现crontab代码
  7. 时间序列的归一化方法
  8. 3D点云模型下载网站
  9. echarts 柱状图设置边框_echarts柱状图
  10. 力争群雄:2012年度IT博客大赛100强脱颖而出
  11. 小米手机修改ip代理服务器,小米手机如何设置和更改静态IP地址
  12. Jetbrains教育邮箱操作指南
  13. 高性能本地缓存Ristretto(一)——存储策略
  14. 超级详细的晶圆厂前世今生,半导体研究史诗级长文
  15. 【编译原理】词法分析(正规式与自动机)
  16. Kafka topic增加partitions
  17. autojs遍历当前页面所有控件_纯前端表格控件SpreadJS V14.0发布:组件化编辑器+数据透视表 - 葡萄城开发工具...
  18. java 神剑_java语音短信的实现
  19. 嵌入式分享合集122
  20. 鸿蒙系统当贝市场,新款华为智慧屏如何安装第三方软件?当贝市场分享最详细的安装教程详解...

热门文章

  1. JS分别取数值的整数部分和小数部分的几种方法
  2. python取整数部分的几种方法
  3. 普通台式机上Tesla M40显卡paddleGPU深度学习柯南的变身器上机体验
  4. Pkg打包nodejs程序整理
  5. 相机系统综述 —— ISP
  6. freeswitch系列31注册流程
  7. Vue实现图片预览(放大缩小拖拽)纯手写
  8. 程序员在网吧敲代码,这波操作真的太秀了!
  9. 对接mysql采集_关于西门子PLC设备数据采集与SQL数据库对接(带边缘计算)的案例...
  10. pycharm选择虚拟环境