目录

1)数据可视化

2)创建多项式特征

3)正则化成本函数

4)正则化梯度下降

4)准确度

5)Scikit-learn实现


正则化是成本函数中的一个术语,它使算法更倾向于“更简单”的模型(在这种情况下,模型将有更小的系数)。这个理论有助于减少过拟合,提高模型的泛化能力。这样,我们开始吧。

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

和第一部分很像,从数据可视化开始吧!

1)数据可视化

我们这里使用之前导入过的库:

path =  'ex2data2.txt'
data2 = pd.read_csv(path, header=None, names=['Test 1', 'Test 2', 'Accepted'])
data2.head()positive = data2[data2['Accepted'].isin([1])]
negative = data2[data2['Accepted'].isin([0])]fig, ax = plt.subplots(figsize=(12,8))
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')
plt.show()

这个数据看起来可比前一次的复杂得多。特别地,你会注意到其中没有线性决策界限,来良好的分开两类数据。一个方法是用像逻辑回归这样的线性技术来构造从原始特征的多项式中得到的特征。让我们通过创建一组多项式特征入手吧。

2)创建多项式特征

degree = 5
x1 = data2['Test 1']
x2 = data2['Test 2']data2.insert(3, 'Ones', 1)for i in range(1, degree):for j in range(0, i):data2['F' + str(i) + str(j)] = np.power(x1, i-j) * np.power(x2, j)data2.drop('Test 1', axis=1, inplace=True)
data2.drop('Test 2', axis=1, inplace=True)data2.head()

3)正则化成本函数

def costReg(theta, X, y, learningRate):theta = np.matrix(theta)X = np.matrix(X)y = np.matrix(y)first = np.multiply(-y, np.log(sigmoid(X * theta.T)))second = np.multiply((1 - y), np.log(1 - sigmoid(X * theta.T)))reg = (learningRate / (2 * len(X))) * np.sum(np.power(theta[:,1:theta.shape[1]], 2))return np.sum(first - second) / len(X) + reg

4)正则化梯度下降

现在我们来看看正则化的代价函数,只是第一项未正则化:

对上面的算法中 j=1,2,...,n 时的更新式子进行调整可得:

def gradientReg(theta, X, y, learningRate):theta = np.matrix(theta)X = np.matrix(X)y = np.matrix(y)parameters = int(theta.ravel().shape[1])grad = np.zeros(parameters)error = sigmoid(X * theta.T) - yfor i in range(parameters):term = np.multiply(error, X[:,i])if (i == 0):grad[i] = np.sum(term) / len(X)else:grad[i] = (np.sum(term) / len(X)) + ((learningRate / len(X)) * theta[:,i])return grad

4)准确度

剩下的操作就像之前一样:

# set X and y (remember from above that we moved the label to column 0)
cols = data2.shape[1]
X2 = data2.iloc[:,1:cols]
y2 = data2.iloc[:,0:1]# convert to numpy arrays and initalize the parameter array theta
X2 = np.array(X2.values)
y2 = np.array(y2.values)
theta2 = np.zeros(11)learningRate = 1

现在,我们来计算新的默认为0的正则化函数的值:

costReg(theta2, X2, y2, learningRate)0.6931471805599454gradientReg(theta2, X2, y2, learningRate)array([0.00847458, 0.01878809, 0.05034464, 0.01150133, 0.01835599,0.00732393, 0.00819244, 0.03934862, 0.00223924, 0.01286005,0.00309594])

现在我们可以使用和第一部分相同的优化函数来计算优化后的结果。

result2 = opt.fmin_tnc(func=costReg, x0=theta2, fprime=gradientReg, args=(X2, y2, learningRate))
result2
(array([  1.22702519e-04,   7.19894617e-05,  -3.74156201e-04,-1.44256427e-04,   2.93165088e-05,  -5.64160786e-05,-1.02826485e-04,  -2.83150432e-04,   6.47297947e-07,-1.99697568e-04,  -1.68479583e-05]), 96, 1)

最后,我们可以使用第1部分中的预测函数来查看我们的方案在训练数据上的准确度。

theta_min = np.matrix(result2[0])
predictions = predict(theta_min, X2)
correct = [1 if ((a == 1 and b == 1) or (a == 0 and b == 0)) else 0 for (a, b) in zip(predictions, y2)]
accuracy = (sum(map(int, correct)) % len(correct))
print ('accuracy = {0}%'.format(accuracy))

5)Scikit-learn实现

from sklearn import linear_model#调用sklearn的线性回归包
model = linear_model.LogisticRegression(penalty='l2', C=1.0)
model.fit(X2, y2.ravel())model.score(X2, y2)
0.6610169491525424

这个准确度和我们刚刚实现的差了好多,不过请记住这个结果是使用默认参数下计算的结果。我们可能需要做一些参数的调整来获得和我们之前结果相同的精确度。

吴恩达机器学习作业(4):正则化逻辑回归相关推荐

  1. 吴恩达机器学习作业2:逻辑回归(Python实现)

    逻辑回归 在训练的初始阶段,将要构建一个逻辑回归模型来预测,某个学生是否被大学录取.设想你是大学相关部分的管理者,想通过申请学生两次测试的评分,来决定他们是否被录取.现在你拥有之前申请学生的可以用于训 ...

  2. 逻辑回归python sigmoid(z)_python实现吴恩达机器学习练习2(逻辑回归)-data1

    python实现吴恩达机器学习练习2(逻辑回归)-data1 这篇是第一个数据集:这部分练习中,你将建立一个预测学生是否被大学录取的逻辑回归模型. 假如一所大学会每个报名学生进行两项入学考试,根据两项 ...

  3. 吴恩达机器学习(四)逻辑回归(二分类与多分类)

    目录 0. 前言 1. 假设函数(Hypothesis) 2. 决策边界(Decision Boundary) 3. 代价函数(Cost Funciton) 4. 梯度下降(Gradient Desc ...

  4. 吴恩达机器学习笔记三之逻辑回归

    本节目录: 分类问题 假说表示 判定边界 代价函数 高级优化 多类别分类 1.分类问题 在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误).分类问 题的例子有:判断一封电子邮件是否是 ...

  5. 吴恩达机器学习作业ex2-python实现

    系列文章目录 吴恩达机器学习作业ex1-python实现 吴恩达机器学习作业ex2-python实现 吴恩达机器学习作业ex3-python实现 作业说明及数据集 链接:https://pan.bai ...

  6. 第一章-机器学习简介 深度之眼_吴恩达机器学习作业训练营

    目录 专栏简介: 一,机器学习简介 1.1 机器学习定义 1.1 机器学习的重要性 1.2 应用领域 二.监督学习 三.无监督学习 四.总结 专栏简介: 本栏主要内容为吴恩达机器学习公开课的学习笔记, ...

  7. k均值算法python实现(吴恩达机器学习作业)

    k均值算法python实现(吴恩达机器学习作业) 题目要求 数据集 读取mat文件 K-means 实现 结果 问题 题目要求 采用K均值算法对样本进行聚类. 编写K均值算法源代码,对ex7data2 ...

  8. 吴恩达机器学习作业7 - K-means和PCA主成分分析(Python实现)

    吴恩达机器学习作业7 - K-means和PCA主成分分析(Python实现) Introduction 在本实验中,将实现K-means聚类算法,并将其应用于图像压缩.在第二部分实验中,将使用主成分 ...

  9. 吴恩达机器学习作业Python实现(八):异常检测和推荐系统

    吴恩达机器学习系列作业目录 1 Anomaly detection 这部分,您将实现一个异常检测算法来检测服务器计算机中的异常行为.他的特征是测量每个服务器的响应速度(mb/s)和延迟(ms).当你的 ...

  10. 吴恩达机器学习作业Python实现(五):偏差和方差

    吴恩达机器学习系列作业目录 在本练习中,您将实现正则化的线性回归和多项式回归,并使用它来研究具有不同偏差-方差属性的模型 1 Regularized Linear Regression 正则线性回归 ...

最新文章

  1. Python基础19-面向对象基础
  2. android 开发文档模板
  3. when will ifm open?
  4. Git新建临时分支进行开发后合并至master
  5. 使用require.context实现前端工程自动化
  6. 基于Apache POI 向xlsx写入数据
  7. BZOJ.3489.A simple rmq problem(主席树 Heap)
  8. pip安装tensorflow_Tensorflow源代码编译踩坑若干
  9. Python 中 set 的基本用法
  10. Android字体加粗
  11. h5在线制作平台h5案例分享
  12. 苹果cms10自适应模板好看的苹果cmsv10美化模板免费
  13. python学习笔记(二十九)网络通信之模仿qq的在线聊天工具
  14. 任正非“互联网思维”如是说
  15. 互联网公司最常见的面试算法题大集合!
  16. 判断MySQL安装是否成功的两种验证方法
  17. 自定义模板以及解决乱码问题、使用grafana为zabbix出图、自定义模板
  18. Android 虚拟分区详解(二) 虚拟分区布局
  19. 痛惜!34岁研究生猝死!事发当天熬夜到凌晨两点半,生前称被延毕半年…
  20. 如何在word(wps)文档中插入一条水平直线(横线)

热门文章

  1. POJ-1050 To the Max 二维最大子段和
  2. java铃声类_MediaPlayer.setDataSource中的java.lang.IllegalStateException,使用铃声类
  3. 698A. Vacations
  4. redis5 外部不能连接_【硬见小百科】PCB连接的方法
  5. std::set作为一个有序集合
  6. linux中线程的挂起与恢复(进程暂停)
  7. Windows与linux双系统安装
  8. python traceback 丢失_基于python traceback实现异常的获取与处理
  9. 河北2018年职称计算机开始,2018河北职称计算机考试操作题答案(8页)-原创力文档...
  10. 【转】老男孩:Linux企业运维人员最常用150个命令汇总