zoukankan      html  css  js  c++  java
  • 逻辑回归分类算法

    逻辑回归由于其简单、高效、可解释性强的特点,在实际用途中十分的广泛:从购物预测到用户营销响应,从流失分析到信用评价,都能看到其活跃的身影。可以说逻辑回归占据了分类算法中非常重要的地位。
     
    逻辑回归:logistic regression,LR。模型公式是Logistic函数,也叫Sigmoid函数。图像形如S型曲线。它可以将实数映射到[0,1]区间用来做二分类。一般选择0.5作为阀值,大于阀值的归为类1,小于阀值的归为类0。公式(Y为决策值,x为特征值,e为自然对数):
    逻辑回归分类算法             
    逻辑回归分类算法
    如果希望对正例样本有更高的准确率,则可以把阈值适当地调高,例如调高到0.6。
    如果希望对正例样本有更高的召回率,则可以把阈值适当地降低,例如降低到0.4。
     
     
    用python拟合了不同的自变量取值下,与因变量的成像。结果都是S型曲线,取值集中在0和1上。
    1.自变量是线性连续值:
        x = np.arange(-20, 20, 0.1)
        y =1/( 1+math.e**(-x))
        plt.scatter(x, y, c = 'r', marker = 'o')
    逻辑回归分类算法
    2.自变量是一元三次方程式的取值:
        z = np.arange(-20, 20, 0.1)
        x = 2*z**3+4*z**2+3*z+10
        y =1/( 1+math.e**(-x))
        plt.scatter(x, y, c = 'r', marker = 'o')

    逻辑回归分类算法

     

    损失函数定义与最小化:对数损失函数/梯度下降法求极值
    先来回顾下线性回归的损失函数:
    线性回归预测算法
    如果逻辑回归也用这个,这会引发损失函数为非凸函数的问题,简单来说就是有很多个局部最低点。
    逻辑回归分类算法
    而理想的损失函数是一个如下图所示的碗状结构的凸函数,这样求解到局部最低点,就一定是全局最小值。
    逻辑回归分类算法
    用极大似然思想推导出其损失函数,参考https://blog.csdn.net/programmer_wei/article/details/52072939。结论:
    逻辑回归分类算法
    汇总所有点的损失,即:
    逻辑回归分类算法
     
    逻辑回归分类算法
     
    如果y = 1, 判断Y(x)=1,则Cost = 0:预测值和真实值相等,损失本该为0;
    如果y = 1, 判断Y(x)=0,则Cost ->∞:预测值和真实值相反,损失无穷大。
     
    用梯度下降法求损失最小值,即可求得Logistic函数中的参数:各特征的特征向量、唯一截距。
    比如下图的:
    z=w0+w1x1+w2x2+...+wnxn
    表示有n个特征Xi,最后会求出每个特征对应的特征向量Wi,以及截距W0。
    疑问:Z为什么是线性函数?为什么不是多项式函数?暂未看到相关资料说明。
     
    补充:在吴恩达视频学习P44时了解到:逻辑回归=线性分类器,非线性的可以用神经网络算法实现。
    逻辑回归分类算法
     
     
    简单代码示例
    import numpy as np
    import math
    import matplotlib.pyplot as plt
    from sklearn import linear_model
     
    x = [[20,3],[23,7],[31,10],[42,13],[50,7],[60,5]]
    y = [0,1,1,1,0,0]
     
    lr = linear_model.LogisticRegression()
    lr.fit(x,y)
     
    testX = [[28,10]]
    label = lr.predict(testX)
    print(label)#预测分类值
    prob = lr.predict_proba(testX)
    print(prob)#预测分类分别是0和1的概率
    print lr.coef_,lr.intercept_,lr.n_iter_ #输出特征向量、截距、迭代次数
     
    #根据上述输出的特征向量和截距,输出Logistic函数图像
    x1 = np.arange(20, 60, 1)
    x2 = np.arange(30, -10, -1)#也可以写成x2 = np.arange(-10, 30, 1)
    #x1和x2不光个数要相同,还要和模拟样本数据吻合,如果x2 = np.arange(20, 60, 1)就看不到S型图像了
    x = (-0.19730001)*x1+(0.91555745)*x2-0.04131838
    y =1/( 1+math.e**(-x))
    plt.scatter(x, y, c = 'r', marker = 'o')
    plt.show()
     
    #用预测点计算Logistic函数结果,即预测分类较大的概率值
    x1=28
    x2=10
    x= (-0.19730001)*x1+(0.91555745)*x2-0.04131838
    y =1/( 1+math.e**(-x))
    print y
     
    输出:
    逻辑回归分类算法

     
  • 相关阅读:
    vue中使用v-on绑定事件中,获取$event.currentTarget,日志打印为null
    问题记录:events.js:183 throw er; // Unhandled 'error' event Error: listen EADDRINUSE 127.0.0.1:8888
    跨域通信——多窗口通信
    fiddler抓包工具-常用功能1
    git使用手册
    webpack.config.js配置文件
    Loader转换器
    webpack安装使用
    <el-table>里的数据已经修改了,但是页面不更新
    <el-onload>使用属性file-list时返回数据里必须含url字段
  • 原文地址:https://www.cnblogs.com/myshuzhimei/p/11743599.html
Copyright © 2011-2022 走看看