逻辑回归 Logistic Regression
逻辑回归(Logistic Regression)是广义线性回归的一种。逻辑回归是用来做分类任务的常用算法。分类任务的目标是找一个函数,把观测值匹配到相关的类和标签上。比如一个人有没有病,又因为噪声的干扰,条件的描述的不够完全,所以可能不确定正确,还希望得到一个概率,比如有病的概率是80%。也即P(Y|X),对于输入X,产生Y的概率,Y可取两类,1或者0。
推导
Sigmod函数
相当于线性模型的计算结果来逼近真实01标记的对数几率。
他的导数:
对数线性模型
概率P的值域是[0,1],线性函数的值域是\((-\infty ,+\infty)\),要将建立一个互相映射的函数关系,log函数在[0,1]上的值域是\([-\infty,0]\),对P进行变换,使得变换之后的值域包含\([0,+\infty]\),而\(log(\frac{p}{1-p})\)满足要求。而这个称为logit变换。线性拟合
\(log(\frac{P(x;\theta)}{1-P(x;\theta)}) = \theta x\)
由此可得
\(P(x;\theta) = \frac{1}{1+e^{-(\theta x)}} = h_\theta (x) \)
优点:可以算出落入 0 1的概率,无穷可导。
假设各个样本互相独立则,服从伯努利分布。
\(P(y = 1 |x;\theta) = h_\theta(x)\)
\(P(y = 0 |x;\theta) = 1 - h_\theta(x)\)
\(P(y |x;\theta) = h_\theta(x)^y(1 - h_\theta(x))^{1-y}\)
似然函数:
对于最大似然估计(MLE)就是已知了样本的分布,求最有可能导致这种分布的参数的值。也即是什么样的参数使得我们看到的这样一个数据分布出现的概率最大。
\(L_\theta = \prod_{i=1}^{m}h_{\theta}(x^{(i)})^{y^{(i)}} (1 - h_\theta(x^{(i)}))^{(1-y^{(i)})} \)
\(l(\theta) = logL(\theta) \)
损失函数:
损失函数越小,模型越好。
损失函数是似然函数的取负之后得到,最小化的损失。
拆开写:
理解:当y =1时,如果h的预测结果也为1,则cost为0,如果h为0,则相当于预测相反,cost为无穷,类似的y=0的时候。
合并写,全体样本的损失函数为
另外Softmax 只不过是2分类变成了K分类,本质上是一样的。
由于令损失函数等于0,无法求解析解。所以想到了用梯度下降,类似的算法还有BFGS,L-BFGS(Spark Mllib中用的),牛顿法,拟牛顿法,共轭梯度法。其中BFGS,和LBFGS由牛顿法而来,速度比梯度下降要快,但是复杂。
梯度下降:
\(J(\theta)\) = cost
得到迭代子式:
其中 \(\alpha\)是步长。
SKLearn简单例子
if __name__ == "__main__":
path = u'iris.data' # 数据文件路径 #用pandas读数据
data = pd.read_csv(path)
x = data.values[:,:-1]
y = data.values[;-1]
le = LabelEncoder()
le.fit(['Iris-setosa', 'Iris-versicolor', 'Iris-virginica'])
y = le.transform(y) x = StandardScaler().fit_transform(x)
logreg = LogisticRegression() # Logistic回归模型
logreg.fit(x, y.ravel()) # 根据数据[x,y],计算回归参数 ,y.ravel()是reshape成一列数,对原来的y的一个引用 # 训练集上的预测结果
y_hat = logreg.predict(x)
y = y.reshape(-1) # 此转置仅仅为了print时能够集中显示
print y_hat.shape # 不妨显示下y_hat的形状
print y.shape
result = (y_hat == y) # True则预测正确,False则预测错误
print y_hat
print y
print result
c = np.count_nonzero(result) # 统计预测正确的个数
print c
print 'Accuracy: %.2f%%' % (100 * float(c) / float(len(result)))
logL(θ)=∑i=1mlog[(hθ(xi)y(i)(1−hθ(x(i)))1−y(i))]=∑i=1m[y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]
逻辑回归 Logistic Regression的更多相关文章
- 机器学习总结之逻辑回归Logistic Regression
机器学习总结之逻辑回归Logistic Regression 逻辑回归logistic regression,虽然名字是回归,但是实际上它是处理分类问题的算法.简单的说回归问题和分类问题如下: 回归问 ...
- 机器学习(四)--------逻辑回归(Logistic Regression)
逻辑回归(Logistic Regression) 线性回归用来预测,逻辑回归用来分类. 线性回归是拟合函数,逻辑回归是预测函数 逻辑回归就是分类. 分类问题用线性方程是不行的 线性方程拟合的是连 ...
- 机器学习入门11 - 逻辑回归 (Logistic Regression)
原文链接:https://developers.google.com/machine-learning/crash-course/logistic-regression/ 逻辑回归会生成一个介于 0 ...
- Coursera公开课笔记: 斯坦福大学机器学习第六课“逻辑回归(Logistic Regression)” 清晰讲解logistic-good!!!!!!
原文:http://52opencourse.com/125/coursera%E5%85%AC%E5%BC%80%E8%AF%BE%E7%AC%94%E8%AE%B0-%E6%96%AF%E5%9D ...
- 机器学习方法(五):逻辑回归Logistic Regression,Softmax Regression
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面介绍过线性回归的基本知识, ...
- 机器学习 (三) 逻辑回归 Logistic Regression
文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang 的个人 ...
- ML 逻辑回归 Logistic Regression
逻辑回归 Logistic Regression 1 分类 Classification 首先我们来看看使用线性回归来解决分类会出现的问题.下图中,我们加入了一个训练集,产生的新的假设函数使得我们进行 ...
- 逻辑回归(Logistic Regression)详解,公式推导及代码实现
逻辑回归(Logistic Regression) 什么是逻辑回归: 逻辑回归(Logistic Regression)是一种基于概率的模式识别算法,虽然名字中带"回归",但实际上 ...
- 【机器学习】Octave 实现逻辑回归 Logistic Regression
ex2data1.txt ex2data2.txt 本次算法的背景是,假如你是一个大学的管理者,你需要根据学生之前的成绩(两门科目)来预测该学生是否能进入该大学. 根据题意,我们不难分辨出这是一种二分 ...
随机推荐
- 如何决解项目中hibernate中多对多关系中对象转换json死循环
先写一下原因吧!我是写的SSH项目,在项目中我遇到的问题是把分页对象(也就是pageBean对象)转化为json数据,下面为代码: public class PageBean <T>{// ...
- Java 内存区域与内存溢出
内存区域 Java 虚拟机在执行 Java 程序的过程中会把他所管理的内存划分为若干个不同的数据区域.Java 虚拟机规范将 JVM 所管理的内存分为以下几个运行时数据区:程序计数器.Java 虚拟机 ...
- 使用cmd打开java文件,报错:“错误,编码GBK的不可映射字符”
今天使用EditPlus写了一个小程序,用cmd运行时报错--"错误,编码GBK的不可映射字符". 处理办法是用EditPlus另存为时,把编码格式由UTF-8改为ANSI. 然后 ...
- eCharts 数据转换json
public ActionResult ShowChart() { return View(); } <div id="main" style="width:600 ...
- ZeroC Ice启用SSL通讯的配置
Zeroc ICE ( Internet Communications Engine )中间件号称标准统一,开源,跨平台,跨语言,分布式,安全,服务透明,负载均衡,面向对象,性能优越,防火墙穿透,通讯 ...
- Google C++单元测试框架GoogleTest---GMock的CheatSheet文档
CheatSheet文档中包含了GMock所有常用的东西,看了这个基本上就可以用它了,本文接上篇博文:Google C++单元测试框架GoogleTest---Google Mock简介--概念及基础 ...
- 整理分享原生态mac AndroidStudio的快捷键
使用AndroidStudio开发半年了,一路爬坑至今,刚由Windows转mac一个星期.通过查些资料和自己摸索,记录一些常用的快捷键,犹豫个人不喜欢改快捷键,所以都是原生的.特此分享给大家!欢迎补 ...
- Redis五种基本数据结构
1.字符串 示例: 2.列表 示例: 3.集合 示例: 4.散列 示例: 5.有序集合 待续...
- 随笔分类 - [C#6] 新增特性
C#6.0中引入的基本特性总结 [C#6] 7-索引初始化器 摘要: 0. 目录 C#6 新增特性目录 1. 老版本的代码 早C#3中引入的集合初始化器,可是让我们用上面的语法来在声明一个字典或者集合 ...
- jquery 金额转换成大写
<script language="javascript" type="text/javascript"> function Ara ...