逻辑斯谛回归(Logistic回归)最详解 您所在的位置:网站首页 logistic回归分析对变量的要求 逻辑斯谛回归(Logistic回归)最详解

逻辑斯谛回归(Logistic回归)最详解

#逻辑斯谛回归(Logistic回归)最详解| 来源: 网络整理| 查看: 265

                                                                                Logistic回归学习思路

一.逻辑回归模型的原理与定义(主要思想)

逻辑斯谛回归是经典的分类方法,它属于对数线性模型,原理是根据现有的数据对分类边界线建立回归公式,以此进行分类。(主要思想)

定义:

在线性回归模型的基础上,使用Sigmoid函数,将线性模型的结果压缩到[0,1]之间,使其拥有概率意义,它可以将任意输入映射到[0,1]区间,实现值到概率转换。

属于概率性判别式模型线性分类算法

在学习逻辑回归模型之前,先来看一下逻辑斯谛分布,因为我们的逻辑斯蒂模型就是根据逻辑斯蒂分布得到的;通过参数估计方法直接估计出参数,从而得到P(Y|X)。

下面给出《统计学习方法》上逻辑斯蒂分布的定义:

二.逻辑回归的推导过程

为了实现根据所有输入预测出类别,为此引入了sigmoid函数p=1/(1+exp(-z)),sigmoid函数刚好也有二分类的功能。

1. 为什么要使用sigmoid函数作为假设?

因为线性回归模型的预测值为一般为大于1的实数,而样本的类标签为(0,1),我们需要将分类任务的真实标记y与线性回归模型的预测值联系起来,也就是找到广义线性模型中的联系函数。如果选择单位阶跃函数的话,它是不连续的不可微。而如果选择sigmoid函数,它是连续的,而且能够将z转化为一个接近0或1的值。

当z=0时,p=0.5 当z>0时,p>0.5  归为1类 当z 在X_train中保持不变(年龄、资本损失...)。X_train, X_test : 每一行包含一个510-dim的特征,代表一个样本。Y_train: label = 0 表示 "50K " 。 项目要求

请动手编写 gradient descent 实现 logistic regression

请动手实现概率生成模型。单个代码块运行时长应低于五分钟。禁止使用任何开源的代码(例如,你在GitHub上找到的决策树的实现)。 数据准备

项目数据集以及源码:https://e.coding.net/xucancan1/logistic/logistic.git。

源码: # 下面该你动手啦! import pandas as pd import numpy as np from math import exp from math import * df=pd.read_csv("work/data/X_train",encoding="big5") #print(df) train_label=pd.read_csv("work/data/Y_train",encoding="big5") train_label=train_label.iloc[:700,1:] #处理标签 train_label=np.array(train_label) #处理标签 print(train_label.shape) #print(train_label) #打印标签 df=df.iloc[:700,1:] #处理特征 print(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>") df=np.array(df) df=df.astype("float") #训练集特征的处理 #print(df.shape) #print(df) w=np.ones((511,1)) #初始化w eta=0.00000008 loop= 100 #循环次数 m=len(train_label) data=[] def sigmoid(x): return 1.0/(1+exp(-x)) for k in df: data.append([1.0,*k]) #每一个特征数据样本添加一个1.0 #print(np.shape(data)) data=np.array(data) #特征数据 #print(data) w=np.mat(w) data=np.mat(data) for i in range(1000): #梯度下降,第一种:根据矩阵乘法直接计算w h1=[] for k in range(m): h=sigmoid(np.dot(data[k],w)) h1.append(h) h2=np.array(h1) h2=h2.reshape(700,1) #变成列向量 #print(h2.shape) err=train_label-h2 w+=eta*data.transpose()*err #用矩阵梯度下降,下面也是 #print(w.shape)打印参数w #print(w) ''' for i in range(100): #梯度下降,第二种:一个一个的下降,训练模型参数w for k in range(m): h=sigmoid(np.dot(data[k],w)) err=train_label[k]-h #print(err) d=data[k].reshape(511,1) d=np.array(d) w+=eta*err*d #梯度下降 print(w) ''' test=pd.read_csv("work/data/X_test",encoding="big5") #处理测试集 test=test.iloc[:,1:] #处理数据集 test=np.array(test) print(test.shape) #print(test) true=1 false=0 for t in test: #在每个测试样本增加一个1.0的特征值,并预测年收入 dt=[1.0,*t] h=np.dot(dt,w) if h>0: print(true) #输出为1,大于5000 else: print(false) #输出为0,小于等于5000

逻辑回归也可以做以下的二分类问题: 1.区分是否是垃圾邮件 2.银行判断是否给用户办信用卡

3.从氙气病症预测病马的死亡率

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有