logistic回归

很多时候我们需要基于一些样本数据去预测某个事件是否发生,如预测某事件成功与失败,某人当选总统是否成功等。

这个时候我们希望得到的结果是 bool型的,即 true or false

我们最先想到的是通过最小二乘法求出线性回归模型,

即 Y = WTX  = w0x+  w1x+  w2x+ ...  +  wnx

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回归的更多相关文章

  1. 机器学习——Logistic回归

    1.基于Logistic回归和Sigmoid函数的分类 2.基于最优化方法的最佳回归系数确定 2.1 梯度上升法 参考:机器学习--梯度下降算法 2.2 训练算法:使用梯度上升找到最佳参数 Logis ...

  2. 机器学习——Logistic回归

    参考<机器学习实战> 利用Logistic回归进行分类的主要思想: 根据现有数据对分类边界线建立回归公式,以此进行分类. 分类借助的Sigmoid函数: Sigmoid函数图: Sigmo ...

  3. 机器学习——logistic回归,鸢尾花数据集预测,数据可视化

    0.鸢尾花数据集 鸢尾花数据集作为入门经典数据集.Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理.Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集.数据集包含150个数 ...

  4. coursera机器学习-logistic回归,正则化

    #对coursera上Andrew Ng老师开的机器学习课程的笔记和心得: #注:此笔记是我自己认为本节课里比较重要.难理解或容易忘记的内容并做了些补充,并非是课堂详细笔记和要点: #标记为<补 ...

  5. 机器学习 Logistic 回归

    Logistic regression 适用于二分分类的算法,用于估计某事物的可能性. logistic分布表达式 $ F(x) = P(X<=x)=\frac{1}{1+e^{\frac{-( ...

  6. 机器学习-- Logistic回归 Logistic Regression

    转载自:http://blog.csdn.net/linuxcumt/article/details/8572746 1.假设随Tumor Size变化,预测病人的肿瘤是恶性(malignant)还是 ...

  7. 吴恩达-机器学习+Logistic回归分类方案

  8. 机器学习简易入门(四)- logistic回归

    摘要:使用logistic回归来预测某个人的入学申请是否会被接受 声明:(本文的内容非原创,但经过本人翻译和总结而来,转载请注明出处) 本文内容来源:https://www.dataquest.io/ ...

  9. 机器学习(4)之Logistic回归

    机器学习(4)之Logistic回归 1. 算法推导 与之前学过的梯度下降等不同,Logistic回归是一类分类问题,而前者是回归问题.回归问题中,尝试预测的变量y是连续的变量,而在分类问题中,y是一 ...

随机推荐

  1. Django ORM相关

    1. ORM 外键关联查询和多对多关系正反向查询 Class Classes(): name = CF class Student(): name = CF class = FK(to="C ...

  2. MySQL 基础三 函数(聚合、字符串、时间、条件判断)

    1.聚合 其它:GROUP_CONCAT.avg.sum.count.max.min SELECT typeid,GROUP_CONCAT(goodsname) FROM `goods` GROUP ...

  3. Omi框架学习之旅 - 生命周期 及原理说明

    生命周期 name avatars company constructor 构造函数 new的时候 install 初始化安装,这可以拿到用户传进的data进行处理 实例化 installed 安装完 ...

  4. 监控虚拟机跟外部的tcp连接

    1.监控虚拟机跟外部的tcp连接,如果连接数超过阈值,就在FORWARD把ip DROP ,并且发送邮件 root@InternetGateway:~# cat /root/scripts/check ...

  5. highcharts中数据列点击事件

    Highcharts.chart('container', { xAxis: { categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul ...

  6. TCP/IP与OSI模型

  7. curl发送json格式数据

    php的curl方法详细的见官方手册. curl_setopt用法:  http://www.php.net/manual/en/function.curl-setopt.php <?php $ ...

  8. HSF源码阅读

    HSF各组成之间的关系 1 服务提供者注册与发布 <bean id="hsfTestService" class="com.test.service.impl.Hs ...

  9. Python从菜鸟到高手(5):数字

    1 基础知识   Python语言与其他编程语言一样,也支持四则运算(加.减.乘.除),以及圆括号运算符.在Python语言中,数字分为整数和浮点数.整数就是无小数部分的数,浮点数就是有小数部分的数. ...

  10. SCP和Rsync远程拷贝的几个技巧

    scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器 ...