1. Logistic regression

在这部分的练习中,你将建立一个逻辑回归模型来预测一个学生是否能进入大学。假设你是一所大学的行政管理人员,你想根据两门考试的结果,来决定每个申请人是否被录取。你有以前申请人的历史数据,可以将其用作逻辑回归训练集。对于每一个训练样本,你有申请人两次测评的分数以及录取的结果。为了完成这个预测任务,我们准备构建一个可以基于两次测试评分来评估录取可能性的分类模型。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.optimize as opt# ------------sigmiod函数-------------
def sigmoid(z):return 1 / (1 + np.exp(- z))# -----------代价函数-----------------
def cost(theta, X, y):first = (-y) * np.log(sigmoid(X @ theta))     #cost函数前面的项  @是矩阵乘法second = (1 - y)*np.log(1 - sigmoid(X @ theta))   #cost函数后面的项return np.mean(first - second)  # 求均值
#------------梯度计算--------------
def gradient(theta, X, y):return (X.T @ (sigmoid(X @ theta) - y))/len(X)
#------------模型预测函数--------------
def predict(theta, X):probability = sigmoid(X@theta)return [1 if x >= 0.5 else 0 for x in probability]  # return a list# --------------1.读取数据 数据可视化-----------------
data = pd.read_csv('ex2data1.txt', names=['exam1', 'exam2', 'admitted'])  # 读入数据 标记列名
print (data.describe())   # 计算基本信息
positive = data[data.admitted.isin(['1'])]  # 挑选出admitted列中值为1的数据
negetive = data[data.admitted.isin(['0'])]  # 挑选出admitted列中值为0的数据fig, ax = plt.subplots(figsize=(6,5))   # 1行1个6*5大小的图
ax.scatter(positive['exam1'], positive['exam2'], c='b', label='Admitted')   #画散点图,x y 点的颜色 标签
ax.scatter(negetive['exam1'], negetive['exam2'], s=50, c='r', marker='x', label='Not Admitted')  #画散点图,x y 点的颜色 点的形状 标签
ax.legend(loc='center left', bbox_to_anchor=(0.2, 1.12),ncol=3)  # 设置图例显示在图的上方
ax.set_xlabel('Exam 1 Score')  # 设置横坐标名
ax.set_ylabel('Exam 2 Score')  # 设置纵坐标名
plt.show()# ---------------2.数据预处理-----------------
if 'Ones' not in data.columns:data.insert(0, 'Ones', 1)         # 在data中加一列x0X = data.iloc[:, :-1].values  # x0,x1,x2
y = data.iloc[:, -1].values  # 最后一列 admitted
theta = np.zeros(X.shape[1])    #设定theta初始值为0
print (X.shape, theta.shape, y.shape)    #检查矩阵维度# ---------------3.利用优化的梯度下降算法求解-----------------
result = opt.fmin_tnc(func=cost, x0=theta, fprime=gradient, args=(X, y))   #func:优化的目标函数  fprime:梯度函数 args:数据 x0 初值
print (result)# ---------------4.模型预测-----------------
final_theta = result[0]      # 0里面存的是最终的theta值
predictions = predict(final_theta, X)    #计算预测值
print(predictions)
correct = [1 if a==b else 0 for (a, b) in zip(predictions, y)]   #检查预测值和真实值的偏差,相等为1,不等为0
accuracy = sum(correct) / len(X)
print (accuracy)
# ---------------5.决策边界-----------------
x1 = np.arange(130, step=0.1)
x2 = -(final_theta[0] + x1*final_theta[1]) / final_theta[2]
fig, ax = plt.subplots(figsize=(6,5))
ax.scatter(positive['exam1'], positive['exam2'], c='b', label='Admitted')
ax.scatter(negetive['exam1'], negetive['exam2'], s=50, c='r', marker='x', label='Not Admitted')
ax.plot(x1, x2)
ax.set_xlim(0, 130)
ax.set_ylim(0, 130)
ax.set_xlabel('x1')
ax.set_ylabel('x2')
ax.set_title('Decision Boundary')
plt.show()


2. Regularized logistic regression

在训练的第二部分,我们将要通过加入正则项提升逻辑回归算法。简而言之,正则化是成本函数中的一个术语,它使算法更倾向于“更简单”的模型(在这种情况下,模型将更小的系数)。这个理论助于减少过拟合,提高模型的泛化能力。这样,我们开始吧。

设想你是工厂的生产主管,你有一些芯片在两次测试中的测试结果。对于这两次测试,你想决定是否芯片要被接受或抛弃。为了帮助你做出艰难的决定,你拥有过去芯片的测试数据集,从其中你可以构建一个逻辑回归模型。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.optimize as opt
# ------------sigmiod函数-------------
def sigmoid(z):return 1 / (1 + np.exp(- z))
# -----------代价函数-----------------
def cost(theta, X, y):first = (-y) * np.log(sigmoid(X @ theta))  # cost函数前面的项  @是矩阵乘法second = (1 - y) * np.log(1 - sigmoid(X @ theta))  # cost函数后面的项return np.mean(first - second)  # 求均值
# ------------梯度计算--------------
def gradient(theta, X, y):return (X.T @ (sigmoid(X @ theta) - y)) / len(X)
# ------------模型预测函数--------------
def predict(theta, X):probability = sigmoid(X @ theta)return [1 if x >= 0.5 else 0 for x in probability]  # return a list
# ------------数据可视化---------------
def plot_data():positive = data2[data2['Accepted'].isin([1])]negative = data2[data2['Accepted'].isin([0])]fig, ax = plt.subplots(figsize=(8, 5))ax.scatter(positive['Test 1'], positive['Test 2'], s=50, c='b', marker='o', label='Accepted')ax.scatter(negative['Test 1'], negative['Test 2'], s=50, c='r', marker='x', label='Rejected')ax.legend()ax.set_xlabel('Test 1 Score')ax.set_ylabel('Test 2 Score')# -------------数据不符合线性逻辑回归,因此要增加特征-----------
def feature_mapping(x1, x2, power):data = {}for i in np.arange(power + 1):for p in np.arange(i + 1):data["f{}{}".format(i - p, p)] = np.power(x1, i - p) * np.power(x2, p)return pd.DataFrame(data)
#-----------带惩罚项的代价函数-----------------
def costReg(theta, X, y, l=1):# 不惩罚第一项_theta = theta[1:]reg = (l / (2 * len(X))) * (_theta @ _theta)  # _theta@_theta == inner productreturn cost(theta, X, y) + regdef gradientReg(theta, X, y, l=1):reg = (1 / len(X)) * thetareg[0] = 0return gradient(theta, X, y) + reg# -------------1.数据输入及可视化---------------
data2 = pd.read_csv('ex2data2.txt', names=['Test 1', 'Test 2', 'Accepted'])
# -------------2.数据初始化---------------
x1 = data2['Test 1'].values
x2 = data2['Test 2'].values
_data2 = feature_mapping(x1, x2, power=6)  # 增加特征,使边界非线性
X = _data2.values  # 这里因为做特征映射的时候已经添加了偏置项,所以不用手动添加了。
y = data2['Accepted'].values
theta = np.zeros(X.shape[1])
print(X.shape, y.shape, theta.shape)  # ((118, 28), (118,), (28,))
# -------------3.梯度下降---------------
# gradientReg(theta, X, y, 1)
result2 = opt.fmin_tnc(func=costReg, x0=theta, fprime=gradientReg, args=(X, y, 2))
final_theta = result2[0]
# -------------4.结果预测---------------
predictions = predict(final_theta, X)
correct = [1 if a == b else 0 for (a, b) in zip(predictions, y)]
accuracy = sum(correct) / len(correct)
# -------------5.数据可视化---------------
x = np.linspace(-1, 1.5, 250)
xx, yy = np.meshgrid(x, x)
z = feature_mapping(xx.ravel(), yy.ravel(), 6).values
z = z @ final_theta
z = z.reshape(xx.shape)
plot_data()
plt.contour(xx, yy, z, 0)
plt.ylim(-.8, 1.2)
plt.show()

吴恩达机器学习logistic回归作业(python实现)相关推荐

  1. 吴恩达机器学习 逻辑回归 作业3(手写数字分类) Python实现 代码详细解释

    整个项目的github:https://github.com/RobinLuoNanjing/MachineLearning_Ng_Python 里面可以下载进行代码实现的数据集 题目介绍: In t ...

  2. 吴恩达机器学习 逻辑回归 作业2(芯片预测) Python实现 代码详细解释

    整个项目的github:https://github.com/RobinLuoNanjing/MachineLearning_Ng_Python 里面可以下载进行代码实现的数据集 题目介绍: In t ...

  3. [转载] 吴恩达机器学习逻辑回归练习题:逻辑回归及规则化(python实现)

    参考链接: 了解逻辑回归 Python实现 练习题背景:网易云课堂->吴恩达机器学习课程->逻辑回归练习题 对于练习题的详细内容,和课程中推荐的octave编程实现,请见:吴恩达机器学习逻 ...

  4. Python吴恩达机器学习课后习题作业一算法(Ⅰ)(1)

    吴恩达老师的机器学习课程是机器学习入门者必看的经典之一,其课后习题也是典中典.下面将在以Python为语言工具完成课后习题. 问题一:单元线性回归 问题:根据城市人口数量,预测开小吃店的利润 下面我将 ...

  5. 吴恩达机器学习第二次作业——逻辑回归

    逻辑回归 一.逻辑回归 1,数据可视化 2,sigmoid函数,逻辑回归模型 3,代价函数以及梯度 4,评价逻辑回归 二.正规化逻辑回归 1,数据可视化 2,特征映射(Feature Mapping) ...

  6. 吴恩达机器学习 -- 逻辑回归(Logistic Regression)

    7.1  分类问题 如果要预测的变量 是离散值,此时我们应用 logistics regression. 在分类问题中,我们对某一事物进行分类,有二分类和多分类问题.此节先讨论二分类问题,即只有两个分 ...

  7. 吴恩达机器学习系列课程作业ex3 matlab实现

    目录 Matlab实现: lrCostFunction.m oneVsAll.m predictOneVsAll.m predict.m Matlab实现: lrCostFunction.m func ...

  8. 吴恩达机器学习笔记---ex1练习(Python实现)

    练习链接 编程练习1:线性回归 1.用一个变量进行线性回归   在这部分的练习中,你将用一个变量来实现线性回归来预测食品卡车的利润. 假设你是一家餐馆特许经营的首席执行官,并正在考虑在不同的城市开设新 ...

  9. 吴恩达机器学习课后作业——线性回归(Python实现)

    1.写在前面 吴恩达机器学习的课后作业及数据可以在coursera平台上进行下载,只要注册一下就可以添加课程了.所以这里就不写题目和数据了,有需要的小伙伴自行去下载就可以了. 作业及数据下载网址:吴恩 ...

最新文章

  1. phpcms V9判断奇数偶数的实例
  2. EBS form日历可选范围设置(calendar.setup )介绍
  3. pandas使用idxmax函数获取dataframe每个数据行中最大值对应的列名称(column label of max value in each row in dataframe)
  4. Java中 SPI的使用
  5. OpenGL 光照贴图Lighting maps
  6. python的requests模块功能_python中requests模块的使用方法
  7. HDOJ 2955 Robberies (01背包)
  8. 【披着递推皮的动态规划】 山区建小学 题解
  9. [运维]PowerShell简体中文编码转换
  10. VB-ocx应用于Web
  11. C#编程(七)----------命名空间
  12. mysql数据库置疑_SQL数据库置疑 823 824 错误修复 无法附加处理
  13. 赛默飞世尔Thermo Fisher仪器电路板维修故障概述
  14. 页高速缓存(Page Cache)
  15. 全国哪个城市适合创业
  16. 使用VMware镜像文件快速安装Kali linux
  17. 新年快乐(用软件去祝你的好朋友新年快乐,有亿点简陋)C语言
  18. Windows2008硬盘安装OpenSuse11.2
  19. 有了LIGO,引力波不仅可以被探测,还可以被发射!
  20. 英汉词典mysql_构建英汉词典数据库 java

热门文章

  1. form表单无刷新提交文件(iframe)
  2. iOS工程师常用的命令行命令总结
  3. 判断访问页面的设备并打开对应的网站
  4. WPS2012交叉引用技巧,word比wps这点强更新參考文献
  5. 学习 MFC 的好网站
  6. Windows下Android开发环境搭建和配置
  7. AI时代学习新的技术,方向为计算机视觉--欢迎来我的简书blog拔草
  8. 【luogu P2341 [HAOI2006]受欢迎的牛】 题解
  9. Android Studio创建AVD
  10. OpenGL+VS2013+WIN7(64)组态