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. Selenium:利用select模块处理下拉框

    在利用selenium进行UI自动化测试过程中,经常会遇到下拉框选项,这篇博客,就介绍下如何利用selenium的Select模块来对标准select下拉框进行操作... 首先导入Select模块: ...

  2. BZOJ1767/Gym207383I CEOI2009 Harbingers 斜率优化、可持久化单调栈、二分

    传送门--BZOJCH 传送门--VJ 注:本题在BZOJ上是权限题,在Gym里面也不能直接看,所以只能在VJ上交了-- 不难考虑到这是一个\(dp\). 设\(dep_x\)表示\(x\)在树上的带 ...

  3. 一篇自己都看不懂的CDQ分治&整体二分学习笔记

    作为一个永不咕咕咕的博主,我来更笔记辣qaq CDQ分治 CDQ分治的思想还是比较简单的.它的基本流程是: \(1.\)将所有修改操作和查询操作按照时间顺序并在一起,形成一段序列.显然,会影响查询操作 ...

  4. mysql的聚簇索引与非聚簇索引的简短总结

    [原文]https://www.jianshu.com/p/72763d47aa1a 在mysql数据库中,myisam引擎和innodb引擎使用的索引类型不同,myisam对应的是非聚簇索引,而in ...

  5. 当给DataGrid的Itemssoure属性赋值引起TabControl_SelectionChanged事件

    在TabControl的TabItem下布局了DataGrid控件时,当给dg.ItemsSource 赋值时会触发父控件的TabControl_SelectionChanged事件; 类似问题原因可 ...

  6. YY:2018互联网创业公司应看清的事情

    潮流,技术,生活方式,盈利模式,消费人群几乎每年都在改变,2018,你看到的是怎样的一盘棋. 2018年是个很好的数字,很多互联网公司寄予希望在这个幸运数字年头奋起一搏,拿到一份可观的酬金.特别是一些 ...

  7. .NETCore_生成实体

    先安装以下三个包,或者使用Nuget引用 不要问我为什么,按哥说的做吧: Install-Package Microsoft.EntityFrameworkCore.SqlServer Install ...

  8. Redis常见问题和解决办法梳理

    =============Redis主从复制问题和解决办法 ================= 一.Redis主从复制读写分离问题 1)数据复制的延迟读写分离时,master会异步的将数据复制到sla ...

  9. 浅谈JS的作用域链(二)

    上一篇文章中介绍了Execution Context中的三个重要部分:VO/AO,scope chain和this,并详细的介绍了VO/AO在JavaScript代码执行中的表现. 本文就看看Exec ...

  10. 函数:this & return、break、continue、exit()

    this this:的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象在调用的时候才能决定,谁调用的就指向谁. 情景1:指向 ...