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

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

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

数据在 这里

数据格式如下:

...
79.0327360507101,75.3443764369103,1
45.08327747668339,56.3163717815305,0
61.10666453684766,96.51142588489624,1
75.02474556738889,46.55401354116538,1
...

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

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

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

数据图形如下:

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

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

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

#!/usr/bin/python
#coding=utf-8 """
start python 项目
""" import matplotlib.pyplot as plt
import numpy as np
import pandas as pd plt.rcParams['font.sans-serif'] = ['SimHei'] def sigmoid(inX):
return 1.0/(1+np.exp(-inX)) def gradAscent(dataMatIn, classLabels,maxCycles = 4000):
dataMatrix = np.mat(dataMatIn)
labelMat = np.mat(classLabels).transpose()
m,n = np.shape(dataMatrix)
alpha = 0.001
weights = np.ones((n,1))
error = 0.0
for k in range(maxCycles):
h = sigmoid(dataMatrix*weights)
error = (labelMat - h)
weights = weights + alpha * dataMatrix.transpose()* error
return weights,error df = pd.read_csv("ex2data1.txt", header=None) # 想一想为什么需要添加一个df.shape[0],1 维全部为1的矩阵
train_data = pd.concat([pd.DataFrame(np.ones((df.shape[0],1))), df], axis=1).values[:,:-1]
train_labels = df.values[:,-1:]
train_labels = train_labels.transpose()[0]
ex_data_0 = df[df[2] == 0].values
ex_data_1 = df[df[2] == 1].values for i in range(1,10,1):
plt.figure() weights,error = gradAscent(train_data,train_labels,40000*i)
print '迭代 ' + str(i)
print 'weights:',weights
print 'error:',np.sum(np.fabs(error))
print
plt.scatter(ex_data_0[:, 0], ex_data_0[:, 1], marker='x', c='r')
plt.scatter(ex_data_1[:, 0], ex_data_1[:, 1], marker='o', c='g') plt.title(u"阿猫学编程 - 迭代 " + str(i)) x = np.arange(25, 110, 10)
y = (-weights[0,0]-weights[1,0]*x)/weights[2,0]
plt.plot(x, y)
plt.savefig("png/"+str(i)+".png")

输出的结果如下:

迭代 1
weights: [[-287.60304361]
[ 6.64688566]
[ 5.14028377]]
error: 58.7661212634 迭代 2
weights: [[-440.5765795 ]
[ 3.69480405]
[ 3.40160905]]
error: 10.6292565438 迭代 3
weights: [[-529.23457359]
[ 4.37723902]
[ 2.86035351]]
error: 30.7017745021 迭代 4
weights: [[-583.52707721]
[ 4.54341767]
[ 3.76547293]]
error: 22.8273300804 迭代 5
weights: [[-625.08172275]
[ 4.74699397]
[ 4.48060405]]
error: 18.9823637933 迭代 6
weights: [[-626.48915563]
[ 4.90990087]
[ 4.96692013]]
error: 8.89022955778 迭代 7
weights: [[-612.37844675]
[ 4.77961144]
[ 4.81567921]]
error: 8.44936229379 迭代 8
weights: [[-599.34934139]
[ 4.67820704]
[ 4.62686215]]
error: 8.00111334277 迭代 9
weights: [[-587.1142939 ]
[ 4.54874417]
[ 4.49216541]]
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. 如何在C语言 C++里面调用 DOS命令

    C里面调用可以用[system("命令")]这样的形式. 但需要include <stdlib.h> 例子如下: #include <stdio.h> #i ...

  2. 3.docker machine 连接 aliyun 远程docker 服务器

    1.在aliyun ecs 创建docker 服务器 docker-machine create -d aliyunecs machine-aliyunecs 2.远程连接 docker 获取客户端 ...

  3. 关于shopee平台接口(php)对接示例

    2018年8月之后,shopee开始使用新接口,需要进行授权操作 1.授权 public function getAuth(){ /** * @param ShopApiShopee $model * ...

  4. 如何把Visual Studio完全安装在其他磁盘

    //Visual Studio快把我c盘吃完了,就网上找了找解决方法,自己总结一下,方便理解 第一步 找到以下文件夹 C:\\Program Files (x86)\\Microsoft SDKs C ...

  5. ESLint javascript格式要求

    首行缩进2个空格 eslint: indent functionhello (name) { console.log('hi', name) } 字符串使用单引号(除了避免转义) eslint: qu ...

  6. windows系统下的渗透测试神器 -pentestbox

    Pentestbox介绍 PentestBox官网:https://pentestbox.org/zh/ 这是一个运行在windows环境下的终端,集成了绝大部分渗透测试所需要的环境 如python2 ...

  7. LeetCode No.145,146,147

    No.145 PostorderTraversal 二叉树的后序遍历 题目 给定一个二叉树,返回它的 后序 遍历. 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 示例 输入: [1,null,2 ...

  8. MySQL_学习资料

    https://mp.weixin.qq.com/s/qOmyaEEpVJTUMZYfomp3ug

  9. 2018 ACM-ICPC 宁夏 H.Fight Against Monsters(贪心)

    It is my great honour to introduce myself to you here. My name is Aloysius Benjy Cobweb Dartagnan Eg ...

  10. python,openpyxl,读写excel文件

    import openpyxl as oxl from openpyxl.utils import get_column_letter, column_index_from_string import ...