当前位置:   article > 正文

案例实战:Python实现逻辑回归(Logistic Regression)与梯度下降策略_logistic regress例子代码

logistic regress例子代码

0. 案例背景

我们将建立一个逻辑回归模型来预测一个学生是否被大学录取。假设你是一个大学系的管理员,你想根据两次考试的结果来决定每个申请人的录取机会。你有以前的申请人的历史数据,你可以用它作为逻辑回归的训练集。对于每一个培训例子,你有两个考试的申请人的分数和录取决定。为了做到这一点,我们将建立一个分类模型,根据考试成绩估计入学概率。

1. 导入pythony库

  1. #导入机器学习三大件:Numpy, Pandas, Matplotlib
  2. import numpy as np
  3. import pandas as pd
  4. import matplotlib
  5. import matplotlib.pyplot as plt
  6. %matplotlib inline
  7. for i in [np, pd, matplotlib]:
  8. print(i.__version__)

输出:

  1. 1.17.4
  2. 0.25.3
  3. 3.1.2

2. 导入数据集

  1. import os
  2. path = 'data' + os.sep + 'LogiReg_data.txt'
  3. pdData = pd.read_csv(path, header=None, names=['Exam1', 'Exam2', 'Admitted'])
  4. print(pdData.head(8))
  5. print("Data shape:",pdData.shape)

输出:

  1. Exam1 Exam2 Admitted
  2. 0 34.623660 78.024693 0
  3. 1 30.286711 43.894998 0
  4. 2 35.847409 72.902198 0
  5. 3 60.182599 86.308552 1
  6. 4 79.032736 75.344376 1
  7. 5 45.083277 56.316372 0
  8. 6 61.106665 96.511426 1
  9. 7 75.024746 46.554014 1
  10. Data shape: (100, 3)

3. 数据可视化

  1. positive = pdData[pdData['Admitted'] == 1] # 返回Admitted列值为1的样本
  2. negative = pdData[pdData['Admitted'] == 0] # 返回Admitted列值为1的样本
  3. fig, ax = plt.subplots(figsize=(10,5))
  4. ax.scatter(positive['Exam1'], positive['Exam2'], s=30, c='b', marker='o', label='Admitted')
  5. ax.scatter(negative['Exam1'], negative['Exam2'], s=30, c='r', marker='x', label='Not Admitted')
  6. ax.legend()
  7. ax.set_xlabel('Exam1 Score')
  8. ax.set_ylabel('Exam2 Score')

输出:

从上图可以看出:数据具有一定的可区分性。红色点(负样本)总体位于左下方,而蓝色点(正样本)总体位于右上方。

4. 数据处理

在模型构建中为了方便书写和计算,将偏置项用W0表示,因此在数据所有样本的第一列插入1,即b=W0*1

  1. try:
  2. pdData.insert(0, 'Ones', 1) # 写到try...except结构中以防第二次执行时报错
  3. except:
  4. pass
  5. orig_data = pdData.as_matrix() # 将Pandas的DataFrame转换成矩阵形成
  6. print(type(orig_data))
  7. print(orig_data.shape)
  8. cols = orig_data.shape[1]
  9. X = orig_data[:,0:cols-1]
  10. y = orig_data[:,cols-1:cols]
  11. print("X shape:",X.shape)
  12. print("y shape:",y.shape)
  13. #X = np.matrix(X.values)
  14. #y = np.matrix(data.iloc[:,3:4].values) #np.array(y.values)
  15. W = np.zeros([3, 1])
  16. print("W shape:",W.shape)

输出:

  1. <class 'numpy.ndarray'>
  2. (100, 4)
  3. X shape: (100, 3)
  4. y shape: (100, 1)
  5. W shape: (3, 1)

根据X, y, W的shape以及矩阵乘法相关知识可得:XW=y

5. 用Python手动实现逻辑回归

目标:建立逻辑回归模型,即求解出参数

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/475795
推荐阅读
相关标签