回归----逻辑回归

目录

 引入 

 决策的边界

 代价函数

 梯度下降法

 正确率和召回率

 梯度下降法实现逻辑回归代码

 sklearn实现逻辑回归代码


引入 

逻辑回归是在线性回归的基础上加了一个 Sigmoid 函数(非线形)映射,使得逻辑回归称为了一个优秀的分类算法。本质上来说,两者都属于广义线性模型,但他们两个要解决的问题不一样,逻辑回归解决的是分类问题,输出的是离散值,线性回归解决的是回归问题,输出的连续值。 

 我们定义逻辑回归的预测函数为,其中g(x)函数是sigmoid函数,如下图:

 决策的边界

             

    假设w0 = -3 ,w1 = 1, w2 =1 ,那么

 代价函数

 可以将上边的代价函数简化为

 梯度下降法

代价函数:

目标:min   即需要求出

 那么

 在用代码实现之前,插入两个概念:

正确率和召回率

正确率与召回率是广泛应用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。一般来说,正确率就是检索出来的条目有多少是正确的,召回率就是所有正确的条目有多少被检索出来了。

F1 = 2*(正确率*召回率)/ (正确率+召回率),这个是综合上边两个指标的评估指标,用于综合反映整体的指标。

这几个指标的取值都在0-1之间,数值越接近于1,效果越好。

 梯度下降法实现逻辑回归代码

  • 导入所用的包
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import classification_report  #对模型进行评估
from sklearn import preprocessing  #对数据做标准化
scale = True
%matplotlib inline
  •  导入数据对数据进行处理,画散点图
data = np.genfromtxt('LR-testSet.csv',delimiter = ',')
x_data = data[:,:-1]
y_data = data[:,-1]

def plot():
    x0 = []
    y0 = []
    x1 = []
    y1 = []
    
    for i in range(len(x_data)):
        if y_data[i] == 0:
            x0.append(x_data[i,0])
            y0.append(x_data[i,1])
        else:
            x1.append(x_data[i,0])
            y1.append(x_data[i,1])
    
    #画图
    scatter0 = plt.scatter(x0,y0,c='b',marker='o')
    scatter1 = plt.scatter(x1,y1,c='r',marker='x')
    #画图例
    plt.legend(handles = [scatter0,scatter1],labels=['label0','label1'],loc ='best')
    
plot()
plt.show()
  • 将数据转换成矩阵形式,添加偏置
#数据进行处理
x_data = data[:,:-1]
y_data = data[:,-1,np.newaxis]
#转成矩阵
print(np.mat(x_data).shape)
print(np.mat(y_data).shape)
#添加偏执
X_data = np.concatenate((np.ones((100,1)),x_data),axis = 1)
print(X_data.shape)
  • 实现sigmoid函数以及代价函数
def sigmoid(x):
    return 1.0/(1+np.exp(-x))

def cost(Xmat,Ymat,ws):
    left  = np.multiply(Ymat,np.log(sigmoid(Xmat*ws)))
    right = np.multiply(1-Ymat,np.log(1-sigmoid(Xmat*ws)))
    return np.sum(left+right) / -(len(Xmat))

def gradAscent(Xarr,Yarr):
    
    if scale == True:
        Xarr = preprocessing.scale(Xarr)
    Xmat = np.mat(Xarr)
    Ymat = np.mat(Yarr)
    
    lr = 0.001
    epochs  =10000
    costList = []
    
    m,n = np.shape(Xmat) #行代表数据的个数,列代表权值的个数
    ws = np.mat(np.ones((n,1))) #初始化权值
    
    for i in range(epochs+1):
        h = sigmoid(Xmat*ws)
        ws_grad = Xmat.T*(h - Ymat)/m
        ws = ws - lr *ws_grad
        
        if i % 50 ==0:
            costList.append(cost(Xmat,Ymat,ws))
        
    return ws,costList
  • 调用函数
ws,costList = gradAscent(X_data,y_data)
  •  做预测
#做预测
def predict(x_data,ws):
     if scale == True:
        x_data = preprocessing.scale(x_data)
     Xmat = np.mat(x_data)
     ws = np.mat(ws)
     return [1 if x >= 0.5 else 0 for x in sigmoid(Xmat*ws)]

predictions = predict(X_data,ws)

print(classification_report(y_data,predictions))

结果显示: 在导入包中,我们最初领scale = True ,代表做标准化,结果为0.96

 我们改为scale = False ,结果显示如下,为0.92

 从上边对比,我们可以看到综合评估的指标一般会更好。

sklearn实现逻辑回归代码

  • 导入所用的包 
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import classification_report  #对模型进行评估
from sklearn import preprocessing  #对数据做标准化
from sklearn import linear_model
#数据是否需要标准化
scale =True
%matplotlib inline
  •  导入数据对数据进行处理,画散点图 
data = np.genfromtxt('LR-testSet.csv',delimiter = ',')
x_data = data[:,:-1]
y_data = data[:,-1]

def plot():
    x0 = []
    y0 = []
    x1 = []
    y1 = []
    
    for i in range(len(x_data)):
        if y_data[i] == 0:
            x0.append(x_data[i,0])
            y0.append(x_data[i,1])
        else:
            x1.append(x_data[i,0])
            y1.append(x_data[i,1])
    
    #画图
    scatter0 = plt.scatter(x0,y0,c='b',marker='o')
    scatter1 = plt.scatter(x1,y1,c='r',marker='x')
    #画图例
    plt.legend(handles = [scatter0,scatter1],labels=['label0','label1'],loc ='best')
    
plot()
plt.show()
  •  训练模型
logistic = linear_model.LogisticRegression()
logistic.fit(x_data,y_data)
  • 做预测 
predictions = logistic.predict(x_data)

print(classification_report(y_data,predictions))
  • 结果显示 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
拟(Generalized Linear Model,简称GLM)是一种广泛应用于分类和回归问题的统计模型。逻辑回归是GLM的一种特殊情况,用于解决二分类问题。 在逻辑回归中,我们希望根据输入变量的线性组合来预测一个二元变量的概率。逻辑回归使用逻辑函数(也称为sigmoid函数)将线性输出转换为概率。逻辑函数的公式如下: p = 1 / (1 + exp(-z)) 其中,p表示概率,z表示线性组合的结果。线性组合的计算可以表示为: z = b0 + b1*x1 + b2*x2 + ... + bn*xn 其中,b0,b1,b2...bn分别表示模型的参数(也称为系数),x1,x2...xn表示输入变量。 逻辑回归模型的训练过程是通过最大似然估计来确定参数的,使得模型预测的概率最大化与实际观测结果的概率相符。 逻辑回归具有以下优点: - 简单易实现:模型参数的估计相对简单,可以通过常用的优化算法进行求解。 - 可解释性强:可以通过参数的来解释变量对结果的影响程度。 - 可以处理线性可分和线性不可分的问题。 然而,逻辑回归也有一些局限性: - 只能处理二分类问题:逻辑回归只能对二元变量进行分类,无法直接处理多分类问题。 - 对线性关系敏感:逻辑回归假设输入变量与输出变量之间存在线性关系,对非线性关系的拟合能力较弱。 总的来说,逻辑回归是一种强大的分类模型,特别适用于二分类问题。在实际应用中,可以通过特征工程和模型优化来提高逻辑回归的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值