原文地址:http://www.bugingcode.com/machine_learning/ex7.html

把所有的问题都转换为程序问题,可以通过程序来就问题进行求解了。

这里的模拟问题来之于Coursera 上 Andrew 的机器学习课程,问题是根据学生的两次考试成绩判断该学生是否会被录取。

数据在 这里

数据格式如下:

  1. ...
  2. 79.0327360507101,75.3443764369103,1
  3. 45.08327747668339,56.3163717815305,0
  4. 61.10666453684766,96.51142588489624,1
  5. 75.02474556738889,46.55401354116538,1
  6. ...

前面两列数据位两个科目的成绩,最后一列为是否录取的标志。

为了更加形象的观察这些数据,可以把这些数据绘制图表中。

  1. import matplotlib.pyplot as plt
  2. import pandas as pd
  3. df = pd.read_csv("ex2data1.txt", header=None)
  4. ex_data_0 = df[df[2] == 0].values
  5. ex_data_1 = df[df[2] == 1].values
  6. plt.scatter(ex_data_0[:,0],ex_data_0[:,1], marker='x', c='r')
  7. plt.scatter(ex_data_1[:,0],ex_data_1[:,1], marker='o', c='g')
  8. plt.show()

数据图形如下:

是不是已经容易观察多了,现在只要给你一个数据,放在图片中你可以根据点的位置来进行分类判断了。

现在我们需要把已知的观察数据,作为训练的数据,来训练模型求出模型的参数 $\theta$。

这里对上一节中的训练函数gradAscent做一点稍微的修改,这样我们可以看到训练时候的误差和分类渐渐接近理想的过程,不断的提高迭代的次数,把每一次训练的图片都保存在png 的目录下,可以看到误差慢慢的再减少。

  1. #!/usr/bin/python
  2. #coding=utf-8
  3. """
  4. start python 项目
  5. """
  6. import matplotlib.pyplot as plt
  7. import numpy as np
  8. import pandas as pd
  9. plt.rcParams['font.sans-serif'] = ['SimHei']
  10. def sigmoid(inX):
  11. return 1.0/(1+np.exp(-inX))
  12. def gradAscent(dataMatIn, classLabels,maxCycles = 4000):
  13. dataMatrix = np.mat(dataMatIn)
  14. labelMat = np.mat(classLabels).transpose()
  15. m,n = np.shape(dataMatrix)
  16. alpha = 0.001
  17. weights = np.ones((n,1))
  18. error = 0.0
  19. for k in range(maxCycles):
  20. h = sigmoid(dataMatrix*weights)
  21. error = (labelMat - h)
  22. weights = weights + alpha * dataMatrix.transpose()* error
  23. return weights,error
  24. df = pd.read_csv("ex2data1.txt", header=None)
  25. # 想一想为什么需要添加一个df.shape[0],1 维全部为1的矩阵
  26. train_data = pd.concat([pd.DataFrame(np.ones((df.shape[0],1))), df], axis=1).values[:,:-1]
  27. train_labels = df.values[:,-1:]
  28. train_labels = train_labels.transpose()[0]
  29. ex_data_0 = df[df[2] == 0].values
  30. ex_data_1 = df[df[2] == 1].values
  31. for i in range(1,10,1):
  32. plt.figure()
  33. weights,error = gradAscent(train_data,train_labels,40000*i)
  34. print '迭代 ' + str(i)
  35. print 'weights:',weights
  36. print 'error:',np.sum(np.fabs(error))
  37. print
  38. plt.scatter(ex_data_0[:, 0], ex_data_0[:, 1], marker='x', c='r')
  39. plt.scatter(ex_data_1[:, 0], ex_data_1[:, 1], marker='o', c='g')
  40. plt.title(u"阿猫学编程 - 迭代 " + str(i))
  41. x = np.arange(25, 110, 10)
  42. y = (-weights[0,0]-weights[1,0]*x)/weights[2,0]
  43. plt.plot(x, y)
  44. plt.savefig("png/"+str(i)+".png")

输出的结果如下:

  1. 迭代 1
  2. weights: [[-287.60304361]
  3. [ 6.64688566]
  4. [ 5.14028377]]
  5. error: 58.7661212634
  6. 迭代 2
  7. weights: [[-440.5765795 ]
  8. [ 3.69480405]
  9. [ 3.40160905]]
  10. error: 10.6292565438
  11. 迭代 3
  12. weights: [[-529.23457359]
  13. [ 4.37723902]
  14. [ 2.86035351]]
  15. error: 30.7017745021
  16. 迭代 4
  17. weights: [[-583.52707721]
  18. [ 4.54341767]
  19. [ 3.76547293]]
  20. error: 22.8273300804
  21. 迭代 5
  22. weights: [[-625.08172275]
  23. [ 4.74699397]
  24. [ 4.48060405]]
  25. error: 18.9823637933
  26. 迭代 6
  27. weights: [[-626.48915563]
  28. [ 4.90990087]
  29. [ 4.96692013]]
  30. error: 8.89022955778
  31. 迭代 7
  32. weights: [[-612.37844675]
  33. [ 4.77961144]
  34. [ 4.81567921]]
  35. error: 8.44936229379
  36. 迭代 8
  37. weights: [[-599.34934139]
  38. [ 4.67820704]
  39. [ 4.62686215]]
  40. error: 8.00111334277
  41. 迭代 9
  42. weights: [[-587.1142939 ]
  43. [ 4.54874417]
  44. [ 4.49216541]]
  45. error: 8.10605656988

把目录png 下的图片做成gif 图片,更能看出训练的过程。

转载请标明来之:http://www.bugingcode.com/

更多教程:阿猫学编程

机器学习入门 - 逻辑(Logistic)回归(5)的更多相关文章

  1. 机器学习入门-逻辑(Logistic)回归(1)

    原文地址:http://www.bugingcode.com/machine_learning/ex3.html 关于机器学习的教程确实是太多了,处于这种变革的时代,出去不说点机器学习的东西,都觉得自 ...

  2. 机器学习(4)之Logistic回归

    机器学习(4)之Logistic回归 1. 算法推导 与之前学过的梯度下降等不同,Logistic回归是一类分类问题,而前者是回归问题.回归问题中,尝试预测的变量y是连续的变量,而在分类问题中,y是一 ...

  3. 《机器学习实战》-逻辑(Logistic)回归

    目录 Logistic 回归 本章内容 回归算法 Logistic 回归的一般过程 Logistic的优缺点 基于 Logistic 回归和 Sigmoid 函数的分类 Sigmoid 函数 Logi ...

  4. 机器学习实战3:逻辑logistic回归+在线学习+病马实例

    本文介绍logistic回归,和改进算法随机logistic回归,及一个病马是否可以治愈的案例.例子中涉及了数据清洗工作,缺失值的处理. 一 引言 1 sigmoid函数,这个非线性函数十分重要,f( ...

  5. 数据挖掘-逻辑Logistic回归

    逻辑回归的基本过程:a建立回归或者分类模型--->b 建立代价函数 ---> c 优化方法迭代求出最优的模型参数  --->d 验证求解模型的好坏. 1.逻辑回归模型: 逻辑回归(L ...

  6. 机器学习实战之Logistic回归

    Logistic回归一.概述 1. Logistic Regression 1.1 线性回归 1.2 Sigmoid函数 1.3 逻辑回归 1.4 LR 与线性回归的区别 2. LR的损失函数 3. ...

  7. 机器学习实践之Logistic回归

        关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2017年12月17日 19:18:31所撰写内容(http://blog.cs ...

  8. 机器学习之线性回归---logistic回归---softmax回归

    在本节中,我们介绍Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签 可以取两个以上的值. Softmax回归模型对于诸如MNIST手写数字分类等问题 ...

  9. 05机器学习实战之Logistic 回归

    Logistic 回归 概述 Logistic 回归 或者叫逻辑回归 虽然名字有回归,但是它是用来做分类的.其主要思想是: 根据现有数据对分类边界线(Decision Boundary)建立回归公式, ...

随机推荐

  1. ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction hihocoder1870~1879

    ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction hihocoder1870~1879 A 签到,dfs 或者 floyd 都行. #i ...

  2. Graph & Trees3 - 二分图

    \[二分图略解\] \[By\;TYQ\] 二分图定义: \(f(i,L) = [a \in L\;\text{&}\;\forall b \in a.to \;\text{,}\; b \n ...

  3. BBS数据库设计

    BBS数据库设计 一.BBS数据库设计 # models.py from django.db import models # Create your models here. from django. ...

  4. HTTP协议解析小白文

    1. 什么是HTTP协议? HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本 ...

  5. VS2015提示资源视图加载失败

    关闭VS打开的resource,h这个文件,然后重启VS就行了.网上有很多其他的说法,我本地尝试始终不行,暴力解决. 今天发现,其实是不用重启的,直接对rc文件右键保存,就可以正常打开了......

  6. [NOIP 2002普及组]产生数(floyd+高精度)

    https://www.luogu.org/problem/P1037 题目描述 给出一个整数 n(n<1030) 和 k 个变换规则(k<=15). 规则: 一位数可变换成另一个一位数: ...

  7. 51)PHP,一个数据库操作类的代码

    <?php //类名,也习惯上(推荐)使用跟文件名相似的名字 //定义一个mysql连接类,该类可以连接mysql数据库 //并实现其单例模式 //该类的功能还能够完成如下基本mysql操作: ...

  8. 吴裕雄--天生自然 JAVA开发学习:发送邮件

    import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; pu ...

  9. centos telnet

    yum install telnet yum install telnet-server

  10. DateTimePicket jQuery 日期插件,开始时间和结束时间示例

    需要引入的js文件: <input type="text" id="startTime" placeholder="开始时间"/> ...