机器学习/逻辑回归(logistic regression)/--附python代码
个人分类: 机器学习
本文为吴恩达《机器学习》课程的读书笔记,并用python实现。
前一篇讲了线性回归,这一篇讲逻辑回归,有了上一篇的基础,这一篇的内容会显得比较简单。
逻辑回归(logistic regression)虽然叫回归,但他做的事实际上是分类。这里我们讨论二元分类,即只分两类,y属于{0,1}。
选择如下的假设函数:
这里写图片描述
其中:
这里写图片描述
上式称为逻辑函数或S型函数,图像如下图:
这里写图片描述
可以看到,当z趋向正无穷,g(z)趋向1,当z趋向负无穷g(z)趋向0,即g(z)取值[0,1]。
同样,令 这里写图片描述 ,
现在我们要根据训练集,获取上面模型的最好参数 值。同样,可以通过最大似然函数的方法来求解。
假设:
这里写图片描述
合并上面两个式子:
这里写图片描述
假设m个训练样本是独立的,则似然函数:
这里写图片描述
同样,我们求其对数值以方便求解:
这里写图片描述
我们的目的是最大似然函数,即max l ,可以用梯度上升法:
这里写图片描述
下面我们先对g(z)进行函数求导(后面会用到):
这里写图片描述
则可以求得一个样本时的导数(第二步用到 ):
这里写图片描述
则增量梯度法(上一篇线性回归有介绍)有:
这里写图片描述
m个样本的批处理梯度法有:
这里写图片描述
python 代码:
##author:lijiayan
##data:2016/10/27
from numpy import *
import matplotlib.pyplot as plt
def loadData(filename):
data = loadtxt(filename)
x = data[:,0:2]
y = data[:,2:3]
return x,y
#the sigmoid function
def sigmoid(x):
return 1.0 / (1 + exp(-x))
#the cost function
def costfunction(y,h):
y = array(y)
h = array(h)
J = sum(y*log(h))+sum((1-y)*log(1-h))
return J
# the batch gradient descent algrithm
def gradescent(x,y):
m,n = shape(x) #m: number of training example; n: number of features
x = c_[ones(m),x] #add x0
x = mat(x) # to matrix
y = mat(y)
a = 0.002 # learning rate
maxcycle = 2000
theta = ones((n+1,1)) #initial theta
J = []
for i in range(maxcycle):
h = sigmoid(x*theta)
theta = theta + a * x.transpose()*(y-h)
cost = costfunction(y,h)
J.append(cost)
plt.plot(J)
plt.show()
return theta,cost
#the stochastic gradient descent (m should be large,if you want the result is good)
def stocGraddescent(x,y):
m,n = shape(x) #m: number of training example; n: number of features
x = c_[ones(m),x] #add x0
x = mat(x) # to matrix
y = mat(y)
a = 0.01 # learning rate
theta = ones((n+1,1)) #initial theta
J = []
for i in range(m):
h = sigmoid(x[i]*theta)
theta = theta + a * x[i].transpose()*(y[i]-h)
cost = costfunction(y,h)
J.append(cost)
plt.plot(J)
plt.show()
return theta,cost
#plot the decision boundary
def plotbestfit(x,y,theta):
plt.plot(x[:,0:1][where(y==1)],x[:,1:2][where(y==1)],'ro')
plt.plot(x[:,0:1][where(y!=1)],x[:,1:2][where(y!=1)],'bx')
x1= arange(-4,4,0.1)
x2 =(-float(theta[0])-float(theta[1])*x1) /float(theta[2])
plt.plot(x1,x2)
plt.xlabel('x1')
plt.ylabel(('x2'))
plt.show()
def classifyVector(inX,theta):
prob = sigmoid(sum(inX*theta))
print 'the probobility is:',prob
if prob > 0.5:
return 1.0
else:
return 0.0
if __name__=='__main__':
x,y = loadData("testSet.txt")
theta,cost = gradescent(x,y)
print 'theta:\n',theta
print 'J:',cost
X = [1,2,9]
print 'the new input:',X
h = classifyVector(X,theta)
print 'the predict y:',h
plotbestfit(x,y,theta)
这个是logL(似然函数对数值)的曲线图,有点cost function的意思,只不过cost function取最小值,这个是取最大值,平稳了不震荡、不发散,就说明算法正常运行:
这里写图片描述
这个是两个类的分类示意图:
这里写图片描述
这是最后的运算结果,给出了theta值,logL的最终值(最大值),以及新来一个输入X,模型给出的预测值。注意,输入是两个特征x1,x2,这边X=[1,2,9]是三个特征,其中有一个是x0=1。
这里写图片描述
机器学习/逻辑回归(logistic regression)/--附python代码的更多相关文章
- 机器学习(四)--------逻辑回归(Logistic Regression)
逻辑回归(Logistic Regression) 线性回归用来预测,逻辑回归用来分类. 线性回归是拟合函数,逻辑回归是预测函数 逻辑回归就是分类. 分类问题用线性方程是不行的 线性方程拟合的是连 ...
- 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
文章内容均来自斯坦福大学的Andrew Ng教授讲解的Machine Learning课程,本文是针对该课程的个人学习笔记,如有疏漏,请以原课程所讲述内容为准.感谢博主Rachel Zhang 的个人 ...
- 逻辑回归(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 ...
- 机器学习方法(五):逻辑回归Logistic Regression,Softmax Regression
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面介绍过线性回归的基本知识, ...
- ML 逻辑回归 Logistic Regression
逻辑回归 Logistic Regression 1 分类 Classification 首先我们来看看使用线性回归来解决分类会出现的问题.下图中,我们加入了一个训练集,产生的新的假设函数使得我们进行 ...
- 【机器学习】Octave 实现逻辑回归 Logistic Regression
ex2data1.txt ex2data2.txt 本次算法的背景是,假如你是一个大学的管理者,你需要根据学生之前的成绩(两门科目)来预测该学生是否能进入该大学. 根据题意,我们不难分辨出这是一种二分 ...
- [笔记]机器学习(Machine Learning) - 02.逻辑回归(Logistic Regression)
逻辑回归算法是分类算法,虽然这个算法的名字中出现了"回归",但逻辑回归算法实际上是一种分类算法,我们将它作为分类算法使用.. 分类问题:对于每个样本,判断它属于N个类中的那个类或哪 ...
随机推荐
- java流汇总以及使用实例
流一.基本概念 Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络) 读入到内存中,形成了流,然后将这些流还可以写到另外的目的地 ...
- H5新增API和操作DOM
博客原文:https://dobinspark.com.cn/ H5-dom扩展 获取元素 document.getElementsByClassName ('class'); //通过类名获取元素, ...
- BFC、IFC、GFC、FFC
原文地址:https://www.xingkongbj.com/blog/css/fc.html FC FC的全称是:Formatting Contexts,是W3C CSS2.1规范中的一个概念.它 ...
- 关于truthy 和 falsy
一,强制类型转换 JavaScript 在需要用到布尔类型值的上下文中使用强制类型转换(Type Conversion )将值转换为布尔值,比如:在条件语句或者循环语句中 一,truthy 在java ...
- lvs集群实现lvs-dr模型和lvs-nat模型
ipvsadm ipvsadm命令是lvs集群在应用层的管理工具,我们可以通过此ipvsadm来管理lvs的配置,其实现了集群服务管理:增.删.改,集群服务的RS管理:增.删.改以及查看集群状态. 管 ...
- 密钥登录LINUX步骤
1.创建目录2.创建一个文件3.给目录和文件授权4.关闭防火墙5.然后才可以登录.
- php面向对象基础知识整理之类中的属性和方法的使用
<?php /** * class Index * 类包含什么 * 1.创建类 * 2.类的属性和类中方法 * 3.类中访问修饰符 * 4.类的封装.继承.多态 */ // 创建类,创建的类名是 ...
- 【Nginx】Nginx配置REWRITE隐藏index.php
只需要在server里面加上 if (!-e $request_filename) { rewrite ^/(.*)$ /index.php/$1 last; break; }
- Trie(字典树,前缀树)_模板
Trie Trie,又经常叫前缀树,字典树等等. Trie,又称前缀树或字典树,用于保存关联数组,其中的键通常是字符串.与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定.一个节点的 ...
- Could not obtain transaction-synchronized Session for current thread 错误的解决方法!
BsTable bsTable = new BsTable(); // String time = request.getParameter("date"); String tim ...