Logistic分类应用于二分类问题,即给定特征XXX,y" role="presentation" style="position: relative;">yyy为0或者1.

模型假设

hθ(x)=g(θTx)hθ(x)=g(θTx)h_\theta(x) = g(\theta^Tx)
z=θTxz=θTxz = \theta^Tx
g(z)=11+e−zg(z)=11+e−zg(z) = \frac{1}{1 + e^{-z}}
g(z)g(z)g(z)函数如下:

hθ(x)hθ(x)h_\theta(x)取值范围是(0,1)(0,1)(0, 1 ),其含义为y=1y=1y = 1的概率,即hθ(x)=P(y=1|x,θ)=1−P(y=0|x,θ)hθ(x)=P(y=1|x,θ)=1−P(y=0|x,θ)h_\theta(x) = P(y = 1|x, \theta) = 1- P(y = 0|x, \theta).

决策边界

上面提到hθ(x)hθ(x)h_\theta(x)表示y = 1的概率,当其大于0.5时,我们可以预测y = 1,当其小于0.5时,我们可以预测y = 0,对于等于0.5的情况,我们可以约定 y = 1。那么由上图可知,当θTx>=0θTx>=0\theta^Tx >= 0时, y=1;y=1;y = 1;当θTx<0θTx<0\theta^Tx 时, y=0;y=0;y = 0;
对于线性的情况θTx=θ0+θ1x1+θ2x2θTx=θ0+θ1x1+θ2x2\theta^Tx = \theta_0 + \theta_1x_1 + \theta_2x_2可以得到如下所示的决策边界:

对于非线性情况θTx=θ0+θ1x1+θ2x2+θ3x21+θ4x22θTx=θ0+θ1x1+θ2x2+θ3x12+θ4x22\theta^Tx = \theta_0 + \theta_1x_1 + \theta_2x_2 + \theta_3x_1^2 + \theta_4x_2^2可以得到如下所示的决策边界:

对于更复杂的情况,可以通过θTxθTx\theta^Tx的复杂的多项式来实现。
Logistic分类的目标就是找到决策边界。

误差函数


于是有:

将两种情况结合起来:

得到误差函数为:

梯度下降法

使用梯度下降法对误差函数最小化求解

下面推导∂J(θ)∂θj∂J(θ)∂θj\frac{\partial J(\theta)}{\partial \theta_j}:
在正式推导之前先推导g(z)=11+e−zg(z)=11+e−zg(z) = \frac{1}{1 + e^{-z}}的导数,
∂g(z)∂z=−1∗1(1+e−z)2∗e−z∗−1=e−z(1+e−z)2=g(z)(1−g(z))∂g(z)∂z=−1∗1(1+e−z)2∗e−z∗−1=e−z(1+e−z)2=g(z)(1−g(z))\frac{\partial g(z)}{\partial z} = -1 * \frac{1}{(1 + e^{-z})^2}*e^{-z}*-1=\frac{e^{-z}}{(1 + e^{-z})^2} = g(z)(1-g(z))
下面正式推导

∂J(θ)∂θj====−1m∑i=1m(yi1hθ(xi)hθ(xi)(1−hθ(xi))xji+(1−yi)11−hθ(xi)(−hθ(xi)(1−hθ(xi)))xji)−1m∑i=1m(yi(1−hθ(xi))xji+(1−yi)(−hθ(xi))xji)−1m∑i=1m(yixji−yihθ(xi)xji−hθ(xi)xji+yihθ(xi)xji)1m∑i=1m(hθ(xi)−yi)xji(1)(2)(3)(4)(1)∂J(θ)∂θj=−1m∑i=1m(yi1hθ(xi)hθ(xi)(1−hθ(xi))xij+(1−yi)11−hθ(xi)(−hθ(xi)(1−hθ(xi)))xij)(2)=−1m∑i=1m(yi(1−hθ(xi))xij+(1−yi)(−hθ(xi))xij)(3)=−1m∑i=1m(yixij−yihθ(xi)xij−hθ(xi)xij+yihθ(xi)xij)(4)=1m∑i=1m(hθ(xi)−yi)xij

\begin{eqnarray} \frac{\partial J(\theta)}{\partial \theta_j} &=&-\frac{1}{m}\sum_{i=1}^m(y_i\frac{1}{h_\theta(x_i)}h_\theta(x_i)(1-h_\theta(x_i))x_i^j+(1-y_i)\frac{1}{1-h_\theta(x_i)}(-h_\theta(x_i)(1-h_\theta(x_i)))x_i^j) \\ &=&-\frac{1}{m}\sum_{i=1}^m(y_i(1-h_\theta(x_i))x_i^j+(1-y_i)(-h_\theta(x_i))x_i^j)\\ &=&-\frac{1}{m}\sum_{i=1}^m(y_ix_i^j-y_ih_\theta(x_i)x_i^j-h_\theta(x_i)x_i^j+y_ih_\theta(x_i)x_i^j)\\ &=&\frac{1}{m}\sum_{i=1}^m(h_\theta(x_i)-y_i)x_i^j \end{eqnarray}
由此梯度下降算法为:

优化算法

比如共轭梯度法什么的,吴老师都认为超纲了,还是让专业的搞数值算法的人去弄吧,我们需要的是知道怎么调用接口。

多分类

logistic分类可用于二分类,通过1-vs-all方法,即针对每一个类别,将训练集分为此类和非此类两类,进而使用logistic进行分类,共得到k个分类器(假设有k类),对于任意输入,将其输入该k个分类器,而后选择概率最高的那个。

softmax

等待填坑ing…

过拟合

使用了过多的特征,是的误差函数在训练集上很小,但是对于新的实例泛化能力较差。正则化可用于克服过拟合问题,实现方法是在误差函数的基础上加上λλ\lambda倍的θθ\theta的2范数或者1范数(不含θ0θ0\theta_0)。

sklearn logistic

sklearn中正则化实现的误差函数如下:


上述中C越大,w的值影响越小,正则化的作用越弱;反之,C越小,正则化作用越强。
LogisticRegression参数C决定了正则化的强度,penalty确定误差函数添加的是2范数还是1范数,tol是优化是收敛的阈值。
示例代码如下:

import numpy as np
import matplotlib.pyplot as plt from sklearn.linear_model import LogisticRegression
from sklearn import datasets
from sklearn.preprocessing import StandardScalerdigits  = datasets.load_digits()X, y = digits.data, digits.target
X = StandardScaler().fit_transform(X)y = (y > 4).astype(np.int)for i, C in enumerate((100, 1, 0.01)):clf_l1_LR = LogisticRegression(C = C, penalty='l1', tol=0.01)clf_l2_LR = LogisticRegression(C = C, penalty='l2', tol=0.01)clf_l1_LR.fit(X, y)clf_l2_LR.fit(X, y)coef_l1_LR = clf_l1_LR.coef_.ravel()coef_l2_LR = clf_l2_LR.coef_.ravel()sparsity_l1_LR = np.mean(coef_l1_LR == 0) * 100sparsity_l2_LR = np.mean(coef_l2_LR == 0) * 100print("C = %.2f" % C)print("Sparsity with L1 penalty: %.2f%%" % sparsity_l1_LR)print("Score with L1 penalty: %.4f" % clf_l1_LR.score(X, y))print("Sparsity with L2 penalty: %.2f%%" % sparsity_l2_LR)print("Score with L2 penalty: %.4f" % clf_l2_LR.score(X, y))l1_plot = plt.subplot(3, 2, 2 * i + 1)l2_plot = plt.subplot(3, 2, 2 * (i + 1))if i == 0:l1_plot.set_title("L1 penalty")l2_plot.set_title("L2 penalty")l1_plot.imshow(np.abs(coef_l1_LR.reshape(8, 8)), interpolation='nearest',cmap='binary', vmax=1, vmin=0)l2_plot.imshow(np.abs(coef_l2_LR.reshape(8, 8)), interpolation='nearest',cmap='binary', vmax=1, vmin=0)plt.text(-8, 3, "C = %.2f" % C)l1_plot.set_xticks(())l1_plot.set_yticks(())l2_plot.set_xticks(())l2_plot.set_yticks(())plt.show()

效果:

多分类问题实例
multinomial logistic regression(softmax regression) && 1-vs-rest:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.linear_model import LogisticRegressioncenters = [[-5, 0], [0, 1.5], [5, -1]]
X, y = make_blobs(n_samples = 1000, centers = centers, random_state = 40)
transformation = [[0.4, 0.2], [-0.4, 1.2]]
X = np.dot(X, transformation)for multi_class in ('multinomial', 'ovr'):clf = LogisticRegression(solver='sag', max_iter=100, random_state=42, multi_class=multi_class).fit(X, y)print("training score : %.3f(%s)" % (clf.score(X, y), multi_class))h = .02x_min, x_max = X[:, 0].min()-1, X[:, 0].max()+1y_min, y_max = X[:, 1].min()-1, X[:, 1].max()+1xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])Z =Z.reshape(xx.shape)plt.figure()plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)plt.title("Decision surface of LogisticRegression (%s)" % multi_class)plt.axis('tight')colors = 'bry'for i, color in zip(clf.classes_, colors):idx = np.where(y == i)plt.scatter(X[idx,0], X[idx, 1], c=color, cmap=plt.cm.Paired, edgecolor='black', s=20)xmin, xmax = plt.xlim()ymin, ymax = plt.ylim()coef = clf.coef_intercept = clf.intercept_def plot_hyperplane(c, color):def line(x0):return (-(x0 * coef[c, 0])- intercept[c])/coef[c,1]plt.plot([xmin, xmax], [line(xmin), line(xmax)], ls="--", color=color)for i, color in zip(clf.classes_, colors):plot_hyperplane(i, color)plt.show()


最最后:欢迎关注微信公众号“翰墨知道”

吴恩达《机器学习》--- Logistic分类相关推荐

  1. 吴恩达机器学习logistic回归作业(python实现)

    1. Logistic regression 在这部分的练习中,你将建立一个逻辑回归模型来预测一个学生是否能进入大学.假设你是一所大学的行政管理人员,你想根据两门考试的结果,来决定每个申请人是否被录取 ...

  2. 吴恩达机器学习006分类问题

    点击查看笔记 转载于:https://www.cnblogs.com/ziyanghana/p/11066392.html

  3. python分类预测降低准确率_python实现吴恩达机器学习练习3(多元分类器和神经网络)...

    Programming Exercise 3: Multi-class Classification and Neural Networks 吴恩达机器学习教程练习3,练习数据是5000个手写数字(0 ...

  4. 吴恩达机器学习作业Python实现(三):多类分类和前馈神经网络

    吴恩达机器学习系列作业目录 1 多类分类(多个logistic回归) 我们将扩展我们在练习2中写的logistic回归的实现,并将其应用于一对多的分类(不止两个类别). import numpy as ...

  5. 吴恩达机器学习作业Python实现(二):logistic回归

    吴恩达机器学习系列作业目录 1 Logistic regression 在这部分的练习中,你将建立一个逻辑回归模型来预测一个学生是否能进入大学.假设你是一所大学的行政管理人员,你想根据两门考试的结果, ...

  6. 【吴恩达机器学习】Week4 编程作业ex3——多分类任务和神经网络

    Multi-class Classification 1. 数据预处理和可视化 dispalyData.m function [h, display_array] = displayData(X, e ...

  7. 吴恩达机器学习之逻辑回归:逻辑回归的假说表示、判定边界、代价函数、简化的成本函数和梯度下降、高级悠哈、多类别分类之一对多(详细笔记,建议收藏,已有专栏)

    吴恩达机器学习栏目清单 专栏直达:https://blog.csdn.net/qq_35456045/category_9762715.html 文章目录 6.逻辑回归(Logistic Regres ...

  8. 3. 吴恩达机器学习课程-作业3-多分类和神经网络

    fork了别人的项目,自己重新填写,我的代码如下 https://gitee.com/fakerlove/machine-learning/tree/master/code 代码原链接 文章目录 3. ...

  9. 吴恩达ex3_吴恩达机器学习 EX3 作业 第一部分多分类逻辑回归 手写数字

    1 多分类逻辑回归 逻辑回归主要用于分类,也可用于one-vs-all分类.如本练习中的数字分类,输入一个训练样本,输出结果可能为0-9共10个数字中的一个数字.一对多分类训练过程使用"一对 ...

  10. 吴恩达机器学习之逻辑回归(二分类)

    吴恩达机器学习之逻辑回归 逻辑回归 二分类逻辑回归 二分类逻辑回归案例 python代码实现(含详细代码注释): 案例中几个问题的解析 不同于线性回归,逻辑回归的hθ(x)还需要用sigmoid函数处 ...

最新文章

  1. android action pick,Intent中各种常见的Action
  2. Spring全局异常处理的三种方式
  3. java基础篇之理解synchronized的用法
  4. Python中列表的copy方法
  5. 2G的MSN邮箱已经不能申请了
  6. java HashMap和LinkedHashMap区别
  7. Bootstrap-Table入门篇
  8. Android开发面试题之Android四大组件
  9. java生成密码_java生成密码生成 | 学步园
  10. 一步步学习EF Core(1.DBFirst)
  11. 漫步数学分析二——欧几里得空间
  12. html三个div相同高度,两个并列div高度相同的问题_html/css_WEB-ITnose
  13. 我发现了 Microsoft Azure 中的两个漏洞
  14. 从华为看企业高效产品的研发管理
  15. postman自动化测试
  16. 【观察】神州数码:三生万物,云起神州
  17. oppo r11s鸿蒙固件,OPPO R11s刷机包
  18. 运用R语言绘制火山图
  19. 京东首推的“SpringBoot+Vue前后端分离全栈项目”牛炸天了?
  20. CEC2018:动态多目标测试函数DF10~DF14的PS及PF(提供Matlab代码)

热门文章

  1. [转载] Dreamweaver——02 创建网页的基本对象
  2. del退役了/del 滚回来了
  3. 常用Linux命令:
  4. 【hdu 6396】Swordsman
  5. pwershell custom objects
  6. $.getJSON()不执行回调函数
  7. ASP.NET - JQuery的.getJSON给Dropdownlist绑定Item
  8. Popush项目团队开发章程
  9. adb devices 找不到夜神模拟器解决方法
  10. spring使用@Value注解读取.properties文件时出现中文乱码问题的解决