美文网首页
Python 机器学习——回归(逻辑回归)

Python 机器学习——回归(逻辑回归)

作者: Bocchi | 来源:发表于2019-07-24 12:39 被阅读0次

    0 前言

    本次教程分为三部分

    • 逻辑回归在二分类问题的应用
    • 逻辑回归在大数据集多分类问题的应用
    • 练习题

    如想了解逻辑回归的相关理论知识,可以参考:
    Logistic Regression(逻辑回归)原理及公式推导


    1 考试成绩预测

    (本节介绍如何利用逻辑回归模型进行二分类预测)
      关于课程“中级宏观经济学”的新教学方法 PSI 的效果评价的数据资料如下表。其中,GPA 为修该门课程前的学分绩点;TUCH 为修该门课程前的摸底测试成绩;PSI 为 1 表示使用 PSI 方法;LG 为该门课程的考试成绩取值为 1(LG=A) 或 0(LG=B 或 LG=C)。由于成绩只有 0 或 1 两种取值,因此该问题为二分类问题。

    序号 GPA TUCH PSI LG
    1 2.66 20 0 0
    2 2.89 22 0 0
    3 3.28 24 0 0
    4 2.92 12 0 0
    5 4.00 21 0 1
    6 2.86 17 0 0
    7 2.76 17 0 0
    8 2.89 21 0 0
    9 3.03 25 0 0
    10 3.92 29 0 1
    11 2.63 20 0 0
    12 3.32 23 0 0
    13 3.57 23 0 0
    14 3.26 25 0 1
    15 3.53 26 0 0
    16 2.74 19 0 0
    17 2.75 25 0 0
    18 2.83 19 0 0
    19 3.12 23 1 0
    20 3.12 23 1 1
    21 2.06 22 1 0
    22 3.62 28 1 1
    23 2.89 14 1 0
    24 3.51 26 1 0
    25 3.54 24 1 1
    26 2.83 27 1 1
    27 3.39 17 1 1
    28 2.67 24 1 0
    29 3.65 21 1 1
    30 4.00 25 1 1
    31 3.10 21 1 0
    32 2.39 19 1 1

      使用 sklearn 中的 LogisticRegression 类进行模型的构建

    • 导入宏包

      导入模型构建所需要的库:

    # 导入宏包
    import pandas as pd
    import matplotlib.pyplot as plt
    from sklearn.linear_model import LogisticRegression
    
    #隐藏警告
    import warnings
    warnings.filterwarnings('ignore')
    
    • 导入数据
        利用 pandas 库中的 pd.read_excel 函数进行数据读取:
    # 导入数据
    data = pd.read_excel('data.xlsx')
    # 划分数据集
    x_train = data.iloc[:, 1:4]
    y_train = data.iloc[:, 4]
    
    • 数据可视化
        可视化有利于对数据进行整体的把握:
    # 可视化
    plt.figure()
    plt.plot(x_train.GPA[(x_train.PSI == 0) & (data.LG == 0)], x_train.TUCH[(x_train.PSI == 0) & (data.LG == 0)], 'bx')
    plt.plot(x_train.GPA[(x_train.PSI == 0) & (data.LG == 1)], x_train.TUCH[(x_train.PSI == 0) & (data.LG == 1)], 'ro')
    plt.xlabel('GPA')
    plt.ylabel('TUSH')
    plt.legend(('LG=0', 'LG=1'))
    plt.title('PSI=0')
    plt.figure()
    plt.plot(x_train.GPA[(x_train.PSI == 1) & (data.LG == 0)], x_train.TUCH[(x_train.PSI == 1) & (data.LG == 0)], 'bx')
    plt.plot(x_train.GPA[(x_train.PSI == 1) & (data.LG == 1)], x_train.TUCH[(x_train.PSI == 1) & (data.LG == 1)], 'ro')
    plt.xlabel('GPA')
    plt.ylabel('TUSH')
    plt.legend(('LG=0', 'LG=1'))
    plt.title('PSI=1')
    
    PSI=0 PSI=1

      该数据集样本数较少,总体把握不是很明显,但是还是能看出 GPA 与 TUCH 越大成绩越好,且采用 PSI 方法下成绩好的更多。

    • 构建模型
    LR = LogisticRegression()
    LR.fit(x_train, y_train)
    LR.predict([[3.32, 20, 1]])
    
    • 结果分析
    print(LR.score(x_train, y_train))
    print(LR.coef_)
    print(LR.intercept_)
    

    输出为:

    0.71875
    [[ 0.32590462 -0.05076111  1.01457151]]
    [-0.9018812]
    

    因此逻辑回归模型为p(x_1,x_2,x_3) = \frac{e^{0.3259x_1-0.0508x_2+1.0145x_3-0.919}}{1+e^{0.3259x_1-0.0508x_2+1.0145x_3-0.919}}p(x_1,x_2,x_3) = \frac{1}{1+e^{-0.3259x_1+0.0508x_2-1.0145x_3+0.919}}其中,x_1为 GPA,x_2为 TUCH,x_3表示是否使用 PSI 方法,p(x_1,x_2,x_3)是模型给出的该门考试成绩为 1 的概率。由模型可知,是否使用 PSI 方法,对成绩的好坏影响极大,验证了 PSI 教学方法的作用


    2 鸢尾花分类

    本节介绍如何利用逻辑回归模型进行多分类预测
      数据集为 UCI 公开的 Iris 数据集,样本数为 150 个,有 4 个特征,分别是花萼长度、花萼宽度、花瓣长度、花瓣宽度,类别标签为 Setosa、Versicolour、Viriginica。

    • 导入数据

      使用 sklearn 中的 datasets 模块导入数据集:

    import pandas as pd
    from sklearn import datasets
    iris_dataset = datasets.load_iris()
    

      load_iris 返回的是一个 Bunch 对象,与字典十分相似,里面包含键值对

    • 使用留出法检验模型

      使用 sklearn.model_selection 中的 train_test_split 对数据进行划分

    from sklearn.model_selection import train_test_split
    x_train, x_test, y_train, y_test = train_test_split(iris_dataset.data, iris_dataset.target, random_state=0)
    
    • 观察数据
        同样我们也采用 散点图矩阵 两两查看所有的数据特征

      散点图矩阵
        对角线上是每个特征的直方图。由图我们可以看出利用这些测试数据基本可以按三个类别区分开。这说明机器学习模型可能可以学会区分他们。
    • 构建模型

    #隐藏警告
    import warnings
    warnings.filterwarnings('ignore')
    
    from sklearn.linear_model import LogisticRegression
    LR = LogisticRegression()
    LR.fit(x_train, y_train)
    
    • 模型预测及评估
    y_pred = LR.predict(x_test)
    print('Test set prections:\n {}'.format(y_pred))
    
    print('Test set score: {:.3f}'.format(np.mean(y_pred == y_test)))
    

    结果:

    Test set prections:
     [2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 2 1 0 0 2 2 0 0 2 0 0 1 1 0 2 2 0 2 2 2 0 2]
    Test set score: 0.868
    

    3 练习题

    • 检验逻辑回归方程的显著性

      逻辑回归方程的显著性检验的目的是检验自变量全体与 \text{Logit} P的线性关系是否显著,从而决定逻辑回归模型是否合理。

    • 检验逻辑回归系数的显著性
        逻辑回归系数的显著性检验目的是逐个检验各自变量是否与 \text{Logit} P 有显著的线性关系,对结束 \text{Logit} P 具有重要贡献。一般采用 Wald 检验统计量,其服从 \chi^2(1) 分布。

    • 逻辑回归方程的拟合优度检验

    相关文章

      网友评论

          本文标题:Python 机器学习——回归(逻辑回归)

          本文链接:https://www.haomeiwen.com/subject/omizlctx.html