机器学习入门 - 逻辑(Logistic)回归(5)
原文地址: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)的更多相关文章
- 机器学习入门-逻辑(Logistic)回归(1)
原文地址:http://www.bugingcode.com/machine_learning/ex3.html 关于机器学习的教程确实是太多了,处于这种变革的时代,出去不说点机器学习的东西,都觉得自 ...
- 机器学习(4)之Logistic回归
机器学习(4)之Logistic回归 1. 算法推导 与之前学过的梯度下降等不同,Logistic回归是一类分类问题,而前者是回归问题.回归问题中,尝试预测的变量y是连续的变量,而在分类问题中,y是一 ...
- 《机器学习实战》-逻辑(Logistic)回归
目录 Logistic 回归 本章内容 回归算法 Logistic 回归的一般过程 Logistic的优缺点 基于 Logistic 回归和 Sigmoid 函数的分类 Sigmoid 函数 Logi ...
- 机器学习实战3:逻辑logistic回归+在线学习+病马实例
本文介绍logistic回归,和改进算法随机logistic回归,及一个病马是否可以治愈的案例.例子中涉及了数据清洗工作,缺失值的处理. 一 引言 1 sigmoid函数,这个非线性函数十分重要,f( ...
- 数据挖掘-逻辑Logistic回归
逻辑回归的基本过程:a建立回归或者分类模型--->b 建立代价函数 ---> c 优化方法迭代求出最优的模型参数 --->d 验证求解模型的好坏. 1.逻辑回归模型: 逻辑回归(L ...
- 机器学习实战之Logistic回归
Logistic回归一.概述 1. Logistic Regression 1.1 线性回归 1.2 Sigmoid函数 1.3 逻辑回归 1.4 LR 与线性回归的区别 2. LR的损失函数 3. ...
- 机器学习实践之Logistic回归
关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2017年12月17日 19:18:31所撰写内容(http://blog.cs ...
- 机器学习之线性回归---logistic回归---softmax回归
在本节中,我们介绍Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签 可以取两个以上的值. Softmax回归模型对于诸如MNIST手写数字分类等问题 ...
- 05机器学习实战之Logistic 回归
Logistic 回归 概述 Logistic 回归 或者叫逻辑回归 虽然名字有回归,但是它是用来做分类的.其主要思想是: 根据现有数据对分类边界线(Decision Boundary)建立回归公式, ...
随机推荐
- Linux-守护进程的引入
1.进程查看命令ps (1).ps -ajx 偏向显示各种有关的ID号 (2).ps -aux 偏向显示进程各种占用资源 2.向进程发送信号指令kill (1).kill -信号编号 进程ID,向一 ...
- IDEA 安装破解
打开IntelliJ IDEA的官网. https://www.jetbrains.com/idea/download/#section=windows 开始安装吧!傻瓜式安装,不多说 激活 ...
- linuxmint截图
利用import命令截图,并设置快捷键 shift + PrtScrSysRq: 选中区域截图. 设置快捷键的时候,提示: Ctrl + PrtScrSysRq: 复制截图到剪切板 PrtScrSys ...
- D - Daydreaming Stockbroker Gym - 101550D
题目链接:http://codeforces.com/gym/101550/attachments 总的来说就是要: 极大值卖出,极小值买入, 再加上端点时的特判. 还有就是会有连续几天股票价格相同的 ...
- Java任务调度框架之分布式调度框架XXL-Job介绍
Java任务调度框架之分布式调度框架XXL-Job介绍及快速入门 调度器使用场景: Java开发中经常会使用到定时任务:比如每月1号凌晨生成上个月的账单.比如每天凌晨1点对上一天的数据进行对账操作 ...
- 前端Js复习-前后台的搭建-结合Bootstrap和JQuery搭建vue项目
流式布局思想 """ 页面的尺寸改变动态改变页面布局,或是通过父集标签控制多个子标签,这种布局思想就称之为 - 流式布局思想 1) 将标签宽高设置成 百分比,就可以随屏幕 ...
- matlab2016b
http://www.cnblogs.com/CQBZOIer-zyy/p/5933954.html
- 如何让网站HTTPS评级为A或者A+
环境说明:CentOS Linux release 7.5.1804 (Core).nginx/1.10.0 需求:公司网站在myssl的评级只得到了B的评分,需要提升至A+ 具体操作如下: 一.ng ...
- Exynos4412开发板-网络-同一网段
1.1 同一网段在不少实验中,都会需要用到局域网的一些基础知识,在技术支持的过程中,发现不少用户对于这个概念非常模糊,导致 IP 地址或者网络环境稍微有点变化,就无法实现实验.如果没有接触过这个概念, ...
- Linux inode的正确理解
一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统 ...