机器学习--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是一 ...
随机推荐
- C#位运算实际运用
前言 前几天写了一篇关于c#位操作,c#位运算基本概念与计算过程 最后提到一个实际问题 需求:C# 用两个short,一个int32拼成一个long型 要求:现在有两个short和一个int,需要拼成 ...
- 8-51单片机ESP8266学习-AT指令(单片机采集温湿度数据通过8266发送给C#TCP客户端显示)
http://www.cnblogs.com/yangfengwu/p/8785516.html 先写单片机端的程序 先把源码和资料链接放到这里 链接: https://pan.baidu.com/s ...
- TCP/IP协议--TCP协议概括和TCP连接的建立和终止
TCP提供一种面向连接的.可靠的字节流服务.面向连接指,发送和接收方在交换数据前必须建立一个TCP连接.顺便说下,一个TCP连接只有两方,因此广播和多播是不能应用于TCP的.字节流指,两个应用程序通过 ...
- Unity 协程停不了?
你是不是遇到过协程停不了的情况?你是直接调用IEnumerator方法,如下? void Start () { StartCoroutine(IETest01()); StartCoroutine(I ...
- Deep Learning(深度学习)学习笔记整理系列之(一)(转)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-0 ...
- 【强化学习】python 实现 q-learning 例一
本文作者:hhh5460 本文地址:https://www.cnblogs.com/hhh5460/p/10134018.html 问题情境 -o---T# T 就是宝藏的位置, o 是探索者的位置 ...
- 使用Pandas_UDF快速改造Pandas代码
1. Pandas_UDF介绍 PySpark和Pandas之间改进性能和互操作性的其核心思想是将Apache Arrow作为序列化格式,以减少PySpark和Pandas之间的开销. Pandas_ ...
- Hexo博客搭建以及Next主题美化的经验之谈
这并不是一篇博客搭建教程.内容主要包含个人对于Hexo博客搭建的心得,Next6.0主题美化的部分建议,以及摘录一些各种用于博客搭建的link. 在博客园3年6个月,确实也学到了很多,博客园也是目前为 ...
- Vue中axios访问 后端跨域问题
public class AllowOriginFilter implements Filter { @SuppressWarnings("unused") public void ...
- 【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--控制器和处理函数的注册篇(4/8)【controller+action】
文章目录 前情概要 前边的文章把一些基本的前置任务都完成了.接下就是比较重要的处理函数action是如何自动发现和注册的拉,也就是入口函数RouteHandler(也是我们的第一个express中间件 ...