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. AI 机器学习基础

    深度学习是机器学习的一个特定分支. 1.学习算法 对于某类任务T和性能度量P, 2.线性回归 3.正规方程(normal equation) 4.监督学习(supervised learning) 5 ...

  2. AI 随机梯度下降(SGD)

    随机梯度下降(stochastic gradient descent) 梯度是期望 计算梯度耗时太长

  3. Android在代码中设置控件的drawableLeft,drawableRight,drawableTop,drawableBottom。

    根据业务的需要,要在代码中设置控件的drawableLeft,drawableRight,drawableTop,drawableBottom属性. 我们知道在xml中设置的方法为:android:d ...

  4. MSComm控件与Win32 API操作串口有何区别?

    MSComm控件与Win32 API操作串口有何区别? [问题点数:50分,结帖人shell_shell]   收藏帖子 回复 我是一个小兵,在战场上拼命!   结帖率 83.33% 我以前用MSCo ...

  5. Windows下jupyter notebook 修改打开的浏览器

    1. 打开cmd,输入jupyter notebook --generate-config 2. 根据返回的路径打开 C:\Users\Administrator\.jupyter\jupyter_n ...

  6. (译)理解 LSTM 网络 (Understanding LSTM Networks by colah)

    @翻译:huangyongye 原文链接: Understanding LSTM Networks 前言:其实之前就已经用过 LSTM 了,是在深度学习框架 keras 上直接用的,但是到现在对LST ...

  7. BugkuCTF 你必须让他停下

    前言 写了这么久的web题,算是把它基础部分都刷完了一遍,以下的几天将持续更新BugkuCTF WEB部分的题解,为了不影响阅读,所以每道题的题解都以单独一篇文章的形式发表,感谢大家一直以来的支持和理 ...

  8. Notepad++列编辑

    NotePad++列编辑 工具:Notepad++使用说明:在我们的日常工作中,经常会碰到要修改多行记录,一行行去处理会非常浪费人力,这时候列编辑就是一个很好的解决方法,列编辑在进行数据批量操作时是一 ...

  9. haproxy反向代理环境部署(http和https代理)

    操作背景:前方有一台haproxy代理机器(115.100.120.57/192.168.1.7),后方两台realserver机器(192.168.1.150.192.168.1.151,没有公网i ...

  10. this.$http.post ||this.$http.put||vue 获取url参

    getClasslist() { this.$http.get('/xxxxx/childlist', { params: { ServiceUnitId: localStorage.getItem( ...