机器学习--Logistic回归
logistic回归
很多时候我们需要基于一些样本数据去预测某个事件是否发生,如预测某事件成功与失败,某人当选总统是否成功等。
这个时候我们希望得到的结果是 bool型的,即 true or false
我们最先想到的是通过最小二乘法求出线性回归模型,
即 Y = WTX = w0x0 + w1x1 + w2x2 + ... + wnxn
X表示自变量向量,可以通过随机梯度算法求出上述的系数向量W
此时Y表示线性回归的预测值。
这时存在的问题是:
Y表示的是预测值,但是其可正,可负,可以很大,可以很小,我们无法通过Y得出二进制的结果
为了解决上面的问题,我们可以大胆假设该事件发生的概率的p且 logit(p) = Y
logit(p) 是一个统计学上的模型

由logit (p ) = Y求得

画图如下:

我们可以看出,对于任意的Y值,假设的概率值p都分布在[0,1]之间
这样我们可以规定任何p大于0.5的数据被分入1类,小于0.5被归入0类,从而得到bool型的结果
事实证明,上述的logit(p) 模型,在处理这种二分类预测中非常有用
这便是logistic回归
用logistic回归预测实例
数据集来源: http://archive.ics.uci.edu/ml/datasets/Haberman%27s+Survival
数据集说明:
该数据集包含了1958年-1970年在芝加哥大学的比林斯医院接受过乳房癌症手术的病人的存活率。数据集样例如下:

X1: 手术时病人年龄
X2: 患者手术年(年- 1900年)
X3: 检测阳性腋窝淋巴结数目(数值)
X4: 生存状态(class属性)1--患者活了5年或更长 , 0---病人在5年内死亡。
求当一个病人的数据为[X1,X2,X3] = [34,66,9]时我们可以通过logistic回归预测病人手术后是否有可能活过5年?
代码
# -*- coding:utf-8 -*-
import numpy as np def load_data(file_name):
# 载入数据
data_mat = []
labels = [] with open(file_name) as file:
for line in file.readlines():
line_arr = line.strip().split(',')
data_mat.append([float(line_arr[0]), float(line_arr[1]), float(line_arr[2])])
labels.append(int(line_arr[3]))
return data_mat, labels def sigmoid(x):
# 阶跃函数
if -x > np.log(np.finfo(type(x)).max):
return 0.0
else:
return 1.0 / (1 + np.exp(-x)) def grad_ascent(data_mat, data_labels, num_iter=200):
"""随机梯度上升算法"""
data_mat = np.array(data_mat)
m, n = np.shape(data_mat) weights = np.ones(n).astype(np.float)
for j in range(num_iter):
data_index = list(range(m))
for i in range(m):
alpha = 0.001 + 4 / (1.0 + j + i) random_index = int(np.random.uniform(0, len(data_index)))
h = sigmoid(sum(data_mat[random_index] * weights))
error = data_labels[random_index] - h
weights = weights + alpha * error * data_mat[random_index]
del (data_index[random_index]) return weights def test(x, name):
file_name = name
data_mat, labels = load_data(file_name)
weights = grad_ascent(data_mat, labels)
print(weights)
res = classify_vector(x, weights)
print(res) def classify_vector(inx, weights):
prob = sigmoid(sum(inx * weights))
if prob > 0.5:
return 1.0
else:
return 0.0 name = 'data/haberman.txt'
test([72, 63, 0], name)
执行结果为 0
说明改病人很可能术后活不过5年。
以上只是logistic 回归的一个简单测试,所有代码已上传 https://github.com/beiyan1911/machine_learning/tree/master/logistic_reg
机器学习--Logistic回归的更多相关文章
- 机器学习——Logistic回归
1.基于Logistic回归和Sigmoid函数的分类 2.基于最优化方法的最佳回归系数确定 2.1 梯度上升法 参考:机器学习--梯度下降算法 2.2 训练算法:使用梯度上升找到最佳参数 Logis ...
- 机器学习——Logistic回归
参考<机器学习实战> 利用Logistic回归进行分类的主要思想: 根据现有数据对分类边界线建立回归公式,以此进行分类. 分类借助的Sigmoid函数: Sigmoid函数图: Sigmo ...
- 机器学习——logistic回归,鸢尾花数据集预测,数据可视化
0.鸢尾花数据集 鸢尾花数据集作为入门经典数据集.Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理.Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数 ...
- coursera机器学习-logistic回归,正则化
#对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...
- 机器学习 Logistic 回归
Logistic regression 适用于二分分类的算法,用于估计某事物的可能性. logistic分布表达式 $ F(x) = P(X<=x)=\frac{1}{1+e^{\frac{-( ...
- 机器学习-- Logistic回归 Logistic Regression
转载自:http://blog.csdn.net/linuxcumt/article/details/8572746 1.假设随Tumor Size变化,预测病人的肿瘤是恶性(malignant)还是 ...
- 吴恩达-机器学习+Logistic回归分类方案
- 机器学习简易入门(四)- logistic回归
摘要:使用logistic回归来预测某个人的入学申请是否会被接受 声明:(本文的内容非原创,但经过本人翻译和总结而来,转载请注明出处) 本文内容来源:https://www.dataquest.io/ ...
- 机器学习(4)之Logistic回归
机器学习(4)之Logistic回归 1. 算法推导 与之前学过的梯度下降等不同,Logistic回归是一类分类问题,而前者是回归问题.回归问题中,尝试预测的变量y是连续的变量,而在分类问题中,y是一 ...
随机推荐
- 关于原型继承中的constructor重定向的问题
上代码 function SuperType(name){ this.name = name; this.colors = ["red","blue",&quo ...
- Qt 中一些常用类中文说明
Qt 中一些常用类中文说明是本文讲述的内容,这篇文章主要是介绍Qt 当中经常使用的类,采取的是使用字母索引的方式,下面的类是被经常使用的. QDataStream 为QIODevice提供了一串的二进 ...
- python:利用smtplib模块发送邮件
自动化测试中,测试报告一般都需要发送给相关的人员,比较有效的一个方法是每次执行完测试用例后,将测试报告(HTML.截图.附件)通过邮件方式发送. 参考代码:send_mail.py 一.python对 ...
- Volume is already attached by pod default/nginx-deployment-86dfb99868-szpkd. Status Running
1.部署WordPress - mysql ,想扩容,修改deployment,结果报错: MountVolume.SetUp failed for volume "pvc-e" ...
- keystone系列五:keystone源码分析
六 keystone架构 6.1 Keystone API Keystone API与Openstack其他服务的API类似,也是基于ReSTFul HTTP实现的. Keystone API划分为A ...
- ASP.NET的生命周期
我主要参考了这些文章 ASP.NET应用程序与页面生命周期, IIS处理Asp.net请求和 Asp.net页面生命周期 asp.net页面的生命周期 页面生命周期开始 (一)页面生命周期的主要阶段包 ...
- Mybatis自动生成实体类
Maven自动生成实体类需要的jar包 一.pom.xml中 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns ...
- Codechef MGCHGYM Misha and Gym 容斥、背包、Splay
VJ传送门 简化题意:给定一个长度为\(N\)的数列,\(Q\)个操作: \(1\,x\,a\).将数列中第\(x\)个元素改为\(a\) \(2\,l\,r\).反转子序列\([l,r]\) \(3 ...
- 把一个List<T>的数据复制至另一个List<T>
把一个数据集List<T>复制至到另一个数据集List<T>. 方法一,可以使用循环,然后把每一个T添加至另一个集合中去: public void ListDemo() { , ...
- Zookeeper-基本概念
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务.它是一个典型的分布式数据一致性的解决方案,分布式应用可以基于它实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理 ...